2016-10-13 3 views
0

J'essaie d'avoir un repo avec mes modèles de crevettes et un autre qui va créer les pdfs de crevettes.Comment passer des données à Prawn en utilisant un proc

Imaginez quelque chose comme ceci:

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

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

Et ça marche. Mais comment puis-je transmettre des données à ce proc. Est-ce possible?

Je me demande s'il existe un moyen de charger du code dans une variable comme en PHP.

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

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

Donc je pourrais charger le proc directement à une variable. Je veux pouvoir simplifier autant que possible les modèles de proc.

Merci!

+0

'new' ne prend pas de proc, cependant; 'generate' pourrait car il prend un bloc. –

+0

C'est le cas. Je viens d'essayer à nouveau. Cependant, il me manquait le & avant le proc sur Document.new (& p). –

Répondre

0

J'ai trouvé une solution possible. C'est un peu bizarre, donc je ne sais pas si je vais l'utiliser. Toute suggestion sera appréciée, je ne suis pas un pro 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(&p).render 
open('test.pdf', 'wb') { |f| f.puts bytes } 
+0

Rien d'étrange à ce sujet; c'est comme ça que vous passez un proc comme un bloc implicite. –