class Sheng::MergeFieldSet
Attributes
errors[R]
key[R]
xml_document[R]
xml_fragment[R]
Public Class Methods
new(key, xml_fragment)
click to toggle source
# File lib/sheng/merge_field_set.rb, line 9 def initialize(key, xml_fragment) @key = key @xml_fragment = xml_fragment @xml_document = xml_fragment.document @errors = {} end
Public Instance Methods
add_errors_from_node(node)
click to toggle source
# File lib/sheng/merge_field_set.rb, line 23 def add_errors_from_node(node) if node.errors.present? errors[node.raw_key] = node.errors end end
basic_node_elements()
click to toggle source
# File lib/sheng/merge_field_set.rb, line 94 def basic_node_elements child_nodes = xml_fragment.xpath(".//#{mergefield_element_path}|.//#{new_mergefield_element_path}|.//#{checkbox_element_path}").to_a child_nodes += xml_fragment.select { |element| element.name == "fldSimple" } child_nodes end
basic_nodes()
click to toggle source
# File lib/sheng/merge_field_set.rb, line 84 def basic_nodes basic_node_elements.map { |element| if element.xpath('.//w:checkBox').first CheckBox.from_element(element) else MergeField.from_element(element) end }.compact end
interpolate(data_set)
click to toggle source
# File lib/sheng/merge_field_set.rb, line 16 def interpolate(data_set) nodes.each do |node| node.interpolate(data_set) add_errors_from_node(node) end end
nodes()
click to toggle source
Returns an array of nodes for interpolation, which can be a mix of MergeField
, CheckBox
, ConditionalBlock
, and Sequence
instances.
# File lib/sheng/merge_field_set.rb, line 63 def nodes @nodes ||= begin current_block_key = nil basic_nodes.map do |node| next if node.is_a?(CheckBox) && current_block_key if node.is_a? MergeField if current_block_key if node.is_end? && node.start_key == current_block_key current_block_key = nil end next elsif node.is_start? current_block_key = node.start_key node = node.block_type.new(node) end end node end.compact end end
required_hash(placeholder = nil)
click to toggle source
# File lib/sheng/merge_field_set.rb, line 42 def required_hash(placeholder = nil) return nil if is_a?(Sequence) && array_of_primitives_expected? nodes.inject({}) do |node_list, node| hsh = if node.is_a?(ConditionalBlock) node.required_hash(placeholder) elsif node.is_a?(MergeField) node.required_hash(placeholder: placeholder) else value = node.is_a?(Block) ? [node.required_hash(placeholder)].compact : placeholder key_parts = node.key.split(/\./) last_key = key_parts.pop key_parts.reverse.inject(last_key => value) do |memo, key| memo = { key => memo }; memo end end Sheng::Support.merge_required_hashes(node_list, hsh) end end
to_tree()
click to toggle source
# File lib/sheng/merge_field_set.rb, line 29 def to_tree nodes.map do |node| hsh = { :type => node.class.name.underscore.gsub(/^sheng\//, ''), :key => node.raw_key } if node.is_a? MergeFieldSet hsh[:nodes] = node.to_tree end hsh end end