class Docxgen::Generator

Attributes

doc[R]

Public Class Methods

new(document) click to toggle source
# File lib/docxgen/generator.rb, line 10
def initialize(document)
  @doc = Docx::Document.open(document)
  @errors = []
  @rendered = false
end

Public Instance Methods

errors() click to toggle source
# File lib/docxgen/generator.rb, line 36
def errors
  raise "Wasn't rendered" unless @rendered

  @errors
end
render(data, remove_missing: true) click to toggle source
# File lib/docxgen/generator.rb, line 16
def render(data, remove_missing: true)
  raise "Already rendered" if @rendered

  variables = JSON.parse(data.to_json, symbolize_names: true)

  paragraphs = @doc.paragraphs + collect_table_paragraphs

  paragraphs.each do |p|
    p.each_text_run do |tr|
      _, sub_errors = Templates::Parser.tr_substitute!(tr, variables, remove_missing: remove_missing)

      @errors.push(*sub_errors)
    end
  end

  @rendered = true

  valid?
end
save(to) click to toggle source
# File lib/docxgen/generator.rb, line 46
def save(to)
  raise "Wasn't rendered" unless @rendered

  @doc.save(to)
end
stream() click to toggle source
# File lib/docxgen/generator.rb, line 52
def stream
  raise "Wasn't rendered" unless @rendered

  @doc.stream
end
valid?() click to toggle source
# File lib/docxgen/generator.rb, line 42
def valid?
  errors.size.zero?
end

Private Instance Methods

collect_table_paragraphs() click to toggle source
# File lib/docxgen/generator.rb, line 60
def collect_table_paragraphs
  # TODO: Refactor, maybe?

  @doc
    .tables
    .map(&:rows).flatten
    .map(&:cells).flatten
    .map(&:paragraphs).flatten
end