Module: Hippo::Parser::Segment

Included in:
Segments::Base
Defined in:
lib/hippo/parser/segment.rb

Instance Method Summary collapse

Instance Method Details

#parse(input) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/hippo/parser/segment.rb', line 4

def parse(input)
  input.gsub!(/[\a\e\f\n\r\t\v]/,'')
  fields = input.split(@field_separator)

  segment_identifier = fields.shift

  fields.each_with_index do |value, index|
    field = self.class.fields[index]

    # if the field is an array that means it is a
    # composite field
    if field.class == Array
      composite_fields    = value.split(@composite_separator)
      composite_sequence  = field.first.composite_sequence

      self.values[composite_sequence] = {}

      composite_fields.each_with_index do |comp_value, comp_index|
        composite_field = field[comp_index]

        self.values[composite_sequence][composite_field.sequence] = composite_field.formatted_value(comp_value)
      end
    else
      self.values[field.sequence] = field.formatted_value(value)
    end
  end

  self
end