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