class PdfTempura::Document
Public Class Methods
debug(*options)
click to toggle source
# File lib/pdf_tempura/document.rb, line 38 def debug(*options) debug_options.concat options end
debug_options()
click to toggle source
# File lib/pdf_tempura/document.rb, line 34 def debug_options @debug_options ||= [] end
new(data = {})
click to toggle source
# File lib/pdf_tempura/document.rb, line 44 def initialize(data = {}) load_data(data) end
page(page_number, &block)
click to toggle source
# File lib/pdf_tempura/document.rb, line 27 def page(page_number, &block) page = Page.new(page_number) pages << page page.instance_eval(&block) nil end
pages()
click to toggle source
# File lib/pdf_tempura/document.rb, line 15 def pages @pages ||= [] end
repeatable()
click to toggle source
# File lib/pdf_tempura/document.rb, line 19 def repeatable @repeatable = true end
repeatable_option()
click to toggle source
# File lib/pdf_tempura/document.rb, line 23 def repeatable_option @repeatable || false end
template(path)
click to toggle source
# File lib/pdf_tempura/document.rb, line 10 def template(path) raise ArgumentError, "Template path must be a string." unless path.is_a?(String) @template_file_path = path end
template_file_path()
click to toggle source
# File lib/pdf_tempura/document.rb, line 6 def template_file_path @template_file_path end
Public Instance Methods
pages()
click to toggle source
# File lib/pdf_tempura/document.rb, line 48 def pages @pages ||= [] end
render(&block)
click to toggle source
# File lib/pdf_tempura/document.rb, line 52 def render(&block) new_renderer.render(&block) end
Private Instance Methods
class_pages()
click to toggle source
# File lib/pdf_tempura/document.rb, line 86 def class_pages self.class.pages end
generate_missing_pages()
click to toggle source
# File lib/pdf_tempura/document.rb, line 90 def generate_missing_pages if pages.count % class_pages.count != 0 [(pages.count % class_pages.count ) .. class_pages.count].each do |number| page = class_pages[number] self.pages << page.dup end end end
generate_pages_from_data(data)
click to toggle source
# File lib/pdf_tempura/document.rb, line 74 def generate_pages_from_data(data) data.each_with_index do |page_data,number| page = class_pages[number % class_pages.count ] self.pages << page.dup.tap{ |new_page| new_page.data = page_data || {} } end generate_missing_pages end
load_data(data)
click to toggle source
# File lib/pdf_tempura/document.rb, line 99 def load_data(data) if !repeatable && data.keys.count > self.class.pages.count raise ArgumentError.new("There are more pages in the data than pages defined. Use 'repeatable' to repeat template pages in the document class.") end keys = data.keys.select{|key| key.kind_of?(Numeric) || key.to_i.to_s == key.to_s}.sort {|key1,key2| key1.to_i <=> key2.to_i} data_for_pages = data.values_at(*keys) generate_pages_from_data(data_for_pages) end
new_renderer()
click to toggle source
# File lib/pdf_tempura/document.rb, line 62 def new_renderer PdfTempura::Renderer.new( self.class.template_file_path, self.pages, { debug: self.class.debug_options, repeatable: self.class.repeatable_option, template_page_count: class_pages.count } ) end
repeatable()
click to toggle source
# File lib/pdf_tempura/document.rb, line 58 def repeatable self.class.repeatable_option end