Как передать данные в Prawn с помощью процедуры

#ruby #proc #prawn

#рубиновый #прок #креветки

Вопрос:

Я пытаюсь создать репозиторий с моими шаблонами Prawn и другим, который будет создавать PDF-файлы Prawn.

Представьте себе что-то вроде этого:

 # Repo A
require 'template_from_repo_b'
p = get_my_proc  # from repo b
Prawn::Document.new(amp;p).render

# Repo B
def get_my_proc
  proc do
    text 'hello world'
  end 
end
 

И это работает. Но как я могу передать данные в этот процесс? Возможно ли это?

Интересно, есть ли способ загрузить код в переменную, как в PHP.

 # File to include
<?php
return 'abc';

# Usage
$abc = include 'include.php';
 

Таким образом, я мог бы загрузить процесс непосредственно в переменную. Я хочу иметь возможность максимально упростить шаблоны proc.

Спасибо!

Комментарии:

1. new однако не требует процесса; generate может, поскольку он занимает блок.

2. Это так. Я только что попробовал еще раз. Однако мне не хватало amp; перед процедурой в Document.new(amp;p).

Ответ №1:

Я нашел возможное решение. Это немного странно, поэтому я не уверен, буду ли я его использовать. Любое предложение будет оценено, я не профессионал ruby.

 require 'prawn'

def make_proc(data)
  proc do
    text data[:greet]
  end
end

data = { greet: 'Hello World' }
p = make_proc data
bytes = Prawn::Document.new(amp;p).render
open('test.pdf', 'wb') { |f| f.puts bytes }
 

Комментарии:

1. В этом нет ничего странного; вот как вы передаете proc как неявный блок.