Class: Stupidedi::Parser::TransactionSetState

Inherits:
AbstractState show all
Defined in:
lib/stupidedi/parser/states/transaction_set_state.rb

Instance Attribute Summary collapse

Constructors collapse

Instance Method Summary collapse

Methods inherited from AbstractState

#leaf?, lsequence, mkcomposite, mkelement, mkrepeated, mksegment, mksimple, #pretty_print, sequence, tsequence

Methods included from Inspect

#inspect

Constructor Details

#initialize(separators, segment_dict, instructions, zipper, children) ⇒ TransactionSetState

Returns a new instance of TransactionSetState.



22
23
24
25
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 22

def initialize(separators, segment_dict, instructions, zipper, children)
  @separators, @segment_dict, @instructions, @zipper, @children =
    separators, segment_dict, instructions, zipper, children
end

Instance Attribute Details

#childrenArray<AbstractState> (readonly)

Returns:



20
21
22
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 20

def children
  @children
end

#instructionsInstructionTable (readonly)

Returns:



14
15
16
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 14

def instructions
  @instructions
end

#segment_dictReader::SegmentDict (readonly)

Returns:



11
12
13
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 11

def segment_dict
  @segment_dict
end

#separatorsReader::Separators (readonly)

Returns:



8
9
10
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 8

def separators
  @separators
end

#zipperZipper::AbstractCursor (readonly)



17
18
19
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 17

def zipper
  @zipper
end

Class Method Details

.push(zipper, parent, segment_tok, segment_use, config) ⇒ TransactionSetState

Returns:



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 43

def push(zipper, parent, segment_tok, segment_use, config)
  # GS01: Functional Identifier Code
  gs01 = parent.gs01

  # ST01: Transaction Set Identifier Code
  st01 = segment_tok.element_toks.at(0).try(:value)

  # ST03: Implementation Convention Reference
  #
  # The implementation convention reference (ST03) is used by the
  # translation routines of the interchange partners to select the
  # appropriate implementation convention to match the transaction set
  # definition. When used, this implementation convention reference takes
  # precedence over the implementation reference specified in the GS08
  st03 = segment_tok.element_toks.at(2).try(:value)

  # Fall back to GS08 if ST03 isn't available
  if st03.blank? or st03.is_a?(Symbol)
    # GS08: Version / Release / Industry Identifier Code
    st03 = parent.gs08
  end

  # Fall back to GS08 if ST03 isn't recognized
  # unless config.transaction_set.defined_at?(st03, gs01, st01)
  #   if config.transaction_set.defined_at?(parent.gs08, gs01, st01)
  #     st03 = parent.gs08
  #   end
  # end

  unless config.transaction_set.defined_at?(st03, gs01, st01)
    context = "#{st03.inspect} #{gs01.inspect} #{st01.inspect}"

    return FailureState.push(
      zipper,
      parent,
      segment_tok,
      "unknown transaction set #{context}")
  end

  envelope_def = config.transaction_set.at(st03, gs01, st01)
  envelope_val = envelope_def.empty
  segment_use  = envelope_def.entry_segment_use

  zipper = zipper.append_child \
    TransactionSetState.new(
      parent.separators,
      parent.segment_dict,
      parent.instructions.push(instructions(envelope_def)),
      parent.zipper.append(envelope_val).dangle.last,
      [])

  TableState.push(zipper, zipper.node, segment_tok, segment_use, config)
end

Instance Method Details

#copy(changes = {}) ⇒ TransactionSetState

Returns:



28
29
30
31
32
33
34
35
# File 'lib/stupidedi/parser/states/transaction_set_state.rb', line 28

def copy(changes = {})
  TransactionSetState.new \
    changes.fetch(:separators, @separators),
    changes.fetch(:segment_dict, @segment_dict),
    changes.fetch(:instructions, @instructions),
    changes.fetch(:zipper, @zipper),
    changes.fetch(:children, @children)
end