class Sablon::Parser::MailMerge::ComplexField

Public Class Methods

new(nodes) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 45
def initialize(nodes)
  super()
  @nodes = nodes
  @raw_expression = @nodes.flat_map {|n| n.search(".//w:instrText").map(&:content) }.join
end

Public Instance Methods

ancestors(*args) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 70
def ancestors(*args)
  @nodes.first.ancestors(*args)
end
end_node() click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 78
def end_node
  @nodes.last
end
remove() click to toggle source

removes only the merge field in question

# File lib/sablon/parser/mail_merge.rb, line 61
def remove
  remove_or_decrement_ref(*@nodes)
end
remove_parent(selector) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 65
def remove_parent(selector)
  node = @nodes.first
  remove_or_decrement_ref(node.ancestors(selector).first)
end
replace(content, env) click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 55
def replace(content, env)
  replace_field_display(pattern_node, content, env)
  (@nodes - [pattern_node]).each(&:remove)
end
start_node() click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 74
def start_node
  @nodes.first
end
valid?() click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 51
def valid?
  separate_node && get_display_node(pattern_node) && expression
end

Private Instance Methods

pattern_node() click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 84
def pattern_node
  separate_node.next_element
end
separate_node() click to toggle source
# File lib/sablon/parser/mail_merge.rb, line 88
def separate_node
  @nodes.detect {|n| !n.search(".//w:fldChar[@w:fldCharType='separate']").empty? }
end