Class: Stupidedi::Builder::TransactionSetState

Inherits:
AbstractState show all
Defined in:
lib/stupidedi/builder/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



25
26
27
28
# File 'lib/stupidedi/builder/states/transaction_set_state.rb', line 25

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)



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

def children
  @children
end

#instructionsInstructionTable (readonly)



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

def instructions
  @instructions
end

#segment_dictReader::SegmentDict (readonly)



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

def segment_dict
  @segment_dict
end

#separatorsReader::Separators (readonly)



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

def separators
  @separators
end

#zipperZipper::AbstractCursor (readonly)



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

def zipper
  @zipper
end

Class Method Details

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



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
# File 'lib/stupidedi/builder/states/transaction_set_state.rb', line 46

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

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

  # ST03: Implementation Convention Reference
  version = segment_tok.element_toks.at(2).try(:value)

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

  # Fall back to GS08 if version isn't recognized
  unless config.transaction_set.defined_at?(version, fgcode, txcode)
    if config.transaction_set.defined_at?(parent.version, fgcode, txcode)
      # GS08: Version / Release / Industry Identifier Code
      version = parent.version
    end
  end

  unless config.transaction_set.defined_at?(version, fgcode, txcode)
    context = "#{fgcode.inspect} #{txcode.inspect} #{version.inspect}"

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

  envelope_def = config.transaction_set.at(version, fgcode, txcode)
  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



31
32
33
34
35
36
37
38
# File 'lib/stupidedi/builder/states/transaction_set_state.rb', line 31

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