Class: Eddy::Parse::Interchange

Inherits:
Object
  • Object
show all
Defined in:
lib/eddy/parse/interchange.rb

Overview

Wrapper around an interchange file or string.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(doc, component_separator: ">", segment_separator: "~", element_separator: "*") ⇒ void

Parameters:

  • doc (String)

    EDI document.

  • component_separator (String) (defaults to: ">")

    (">")

  • segment_separator (String) (defaults to: "~")

    ("~")

  • element_separator (String) (defaults to: "*")

    ("*")



23
24
25
26
27
28
# 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

Instance Attribute Details

#component_separatorString

Component Element Separator

Returns:

  • (String)

    (">")



11
12
13
# File 'lib/eddy/parse/interchange.rb', line 11

def component_separator
  @component_separator
end

#documentString

Raw content of the interchange.

Returns:

  • (String)


8
9
10
# File 'lib/eddy/parse/interchange.rb', line 8

def document
  @document
end

#element_separatorString

Data Element Separator

Returns:

  • (String)

    ("*")



16
17
18
# File 'lib/eddy/parse/interchange.rb', line 16

def element_separator
  @element_separator
end

#segment_separatorString

Returns ("~").

Returns:

  • (String)

    ("~")



13
14
15
# File 'lib/eddy/parse/interchange.rb', line 13

def segment_separator
  @segment_separator
end

Class Method Details

.from_file(path, **kwargs) ⇒ self

Parameters:

  • path (String)

Returns:

  • (self)


32
33
34
# File 'lib/eddy/parse/interchange.rb', line 32

def self.from_file(path, **kwargs)
  return self.new(File.read(path), **kwargs)
end

Instance Method Details

#parseArray<Hash>

Returns:

  • (Array<Hash>)


37
38
39
40
41
# 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) ⇒ Hash

Parameters:

  • seg (String)

Returns:

  • (Hash)


45
46
47
48
49
50
51
52
53
54
# 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