class EdifactConverter::Edifact

Constants

ATTRIBUTES
DummyElement

Public Class Methods

new(options = {}) click to toggle source
# File lib/edifact_converter/edifact.rb, line 17
def initialize(options = {})
  options.each do |name, value|
    if ATTRIBUTES.include? name
      send "#{name}=", value
    else
      raise ArgumentError, 'Argument(#{name}) is not supported '
    end
  end
end

Public Instance Methods

parse(options = {}, &block) click to toggle source
# File lib/edifact_converter/edifact.rb, line 27
def parse(options = {}, &block)
  return ast unless text
  handler = EdifactConverter::EDI2XML11::XmlHandler.new
  reader = EdifactConverter::EDI2XML11::EdiReader.new handler
  reader.parse_string text, properties
  xml = handler.xml
  insert_letters xml
  self.ast = AbstractSyntaxTree.new xml
end
serialize(options = {}, &block) click to toggle source
# File lib/edifact_converter/edifact.rb, line 37
def serialize(options = {}, &block)

end

Private Instance Methods

dummy_element() click to toggle source
# File lib/edifact_converter/edifact.rb, line 104
def dummy_element
  @dummy_element ||= DummyElement.new
end
group_segments(content) click to toggle source
# File lib/edifact_converter/edifact.rb, line 87
def group_segments(content)
  parent = dummy_element
  content.elements.each do |elm|
    case elm.name
    when /S[0-9]{2}/
      parent = elm
      next
    end
    parent.add_child elm
  end
end
insert_letter_content(letter) click to toggle source
# File lib/edifact_converter/edifact.rb, line 71
def insert_letter_content(letter)
  parent = dummy_element
  letter.elements.each do |elm|
    case elm.name
    when "UNH"
      parent = elm.document.create_element "BrevIndhold"
      elm.add_next_sibling parent
      next
    when "UNT"
      parent = dummy_element
    end
    parent.add_child elm
  end
  letter.xpath("//BrevIndhold").each { |content| group_segments content }
end
insert_letters(xml) click to toggle source
# File lib/edifact_converter/edifact.rb, line 56
def insert_letters(xml)
  parent = dummy_element
  xml.root.elements.each do |elm|
    parent.add_child elm
    case elm.name
    when "UNB"
      parent = xml.create_element "Brev"
      elm.add_next_sibling parent
    when "UNT"
      parent = dummy_element
    end
  end
  xml.xpath("//Brev").each { |brev| insert_letter_content brev }
end
properties() click to toggle source
# File lib/edifact_converter/edifact.rb, line 43
def properties
  @properties ||= Hash.new do |hash,key|
    case key
    when :errors
      hash[key] = []
    when :warnings
      hash[key] = []
    else
      nil
    end
  end
end