class Sablon::Parser::MailMerge

Public Instance Methods

parse_fields(xml) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 132
def parse_fields(xml)
  fields = []
  xml.traverse do |node|
    if node.name == "fldSimple"
      field = SimpleField.new(node)
    elsif node.name == "fldChar" && node["w:fldCharType"] == "begin"
      field = build_complex_field(node)
    end
    fields << field if field && field.valid?
  end
  fields
end

Private Instance Methods

build_complex_field(node) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 147
def build_complex_field(node)
  possible_field_node = node.parent
  field_nodes = [possible_field_node]
  while possible_field_node && possible_field_node.search(".//w:fldChar[@w:fldCharType='end']").empty?
    possible_field_node = possible_field_node.next_element
    field_nodes << possible_field_node
  end
  # skip instantiation if no end tag
  ComplexField.new(field_nodes) if field_nodes.last
end