class Eddy::Parse::Interchange

Wrapper around an interchange file or string.

Attributes

component_separator[RW]

Component Element Separator @return [String] (“>”)

document[RW]

Raw content of the interchange. @return [String]

element_separator[RW]

Data Element Separator @return [String] (“*”)

segment_separator[RW]

@return [String] (“~”)

Public Class Methods

from_file(path, **kwargs) click to toggle source

@param path [String] @return [self]

# File lib/eddy/parse/interchange.rb, line 32
def self.from_file(path, **kwargs)
  return self.new(File.read(path), **kwargs)
end
new(doc, component_separator: ">", segment_separator: "~", element_separator: "*") click to toggle source

@param doc [String] EDI document. @param component_separator [String] (“>”) @param segment_separator [String] (“~”) @param element_separator [String] (“*”) @return [void]

# File lib/eddy/parse/interchange.rb, line 23
def initialize(doc, component_separator: ">", segment_separator: "~", element_separator: "*")
  self.document = doc
  self.component_separator = component_separator
  self.segment_separator = segment_separator
  self.element_separator = element_separator
end

Public Instance Methods

parse() click to toggle source

@return [Array<Hash>]

# File lib/eddy/parse/interchange.rb, line 37
def parse()
  doc = self.document.gsub(/\n/, "")
  segments = doc.split(self.segment_separator)
  segments.map { |seg| self.parse_segment(seg) }
end
parse_segment(seg) click to toggle source

@param seg [String] @return [Hash]

# File lib/eddy/parse/interchange.rb, line 45
def parse_segment(seg)
  name, *elements = seg.split(self.element_separator)
  res = { name: name, elements: {} }
  elements.each_with_index do |value, index|
    next if value == ""
    key = sprintf("%s%02d", name, index + 1)
    res[:elements][key] = value
  end
  return res
end