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