module Sheng::Support
Constants
- NUMERIC_REGEX
Public Class Methods
extract_mergefield_instruction_text(element)
click to toggle source
# File lib/sheng/support.rb, line 38 def extract_mergefield_instruction_text(element) if element.name == 'fldSimple' label = element['w:instr'] else current_element = element.parent.next_element label = current_element.at_xpath(".//w:instrText").text loop do current_element = current_element.next_element next if ["bookmarkStart", "bookmarkEnd"].include?(current_element.name) label_part = current_element.at_xpath(".//w:instrText") break unless label_part label << label_part.text end end unless label.match(MergeField::REGEXES[:instruction_text]) raise MergeField::NotAMergeFieldError.new(label) end label end
is_numeric?(value)
click to toggle source
# File lib/sheng/support.rb, line 58 def is_numeric?(value) value.is_a?(Numeric) || !!NUMERIC_REGEX.match(value) end
merge_required_hashes(hsh1, hsh2)
click to toggle source
# File lib/sheng/support.rb, line 6 def merge_required_hashes(hsh1, hsh2) hsh1.merge(hsh2) do |key, old_value, new_value| if [old_value, new_value].all? { |v| v.is_a?(Hash) } merge_required_hashes(old_value, new_value) elsif [old_value, new_value].all? { |v| v.is_a?(Array) } && !old_value.empty? [merge_required_hashes(old_value.first, new_value.first)] else new_value end end end
new_tag(tag_name, xml_document:)
click to toggle source
# File lib/sheng/support.rb, line 32 def new_tag(tag_name, xml_document:) tag = Nokogiri::XML::Node.new(tag_name, xml_document) tag.namespace = xml_document.root.namespace_definitions.find { |ns| ns.prefix == "w" } tag end
new_text_run(value, xml_document:, style_run: nil, space_preserve: false)
click to toggle source
# File lib/sheng/support.rb, line 18 def new_text_run(value, xml_document:, style_run: nil, space_preserve: false) r_tag = new_tag('r', xml_document: xml_document) if style_run r_tag.add_child(style_run) end t_tag = new_tag('t', xml_document: xml_document) if space_preserve t_tag["xml:space"] = "preserve" end t_tag.content = value r_tag.add_child(t_tag) r_tag end
typecast_numeric(value)
click to toggle source
# File lib/sheng/support.rb, line 62 def typecast_numeric(value) return value if value.is_a?(Numeric) || !NUMERIC_REGEX.match(value) val = value.gsub(",", "").to_d if val.frac == 0 val.to_i else val end end