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