Class: Stupidedi::Builder::TableState

Inherits:
AbstractState show all
Defined in:
lib/stupidedi/builder/states/table_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) ⇒ TableState

Returns a new instance of TableState



25
26
27
28
# File 'lib/stupidedi/builder/states/table_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)

Returns:



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

def children
  @children
end

#instructionsInstructionTable (readonly)

Returns:



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

def instructions
  @instructions
end

#segment_dictReader::SegmentDict (readonly)

Returns:



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

def segment_dict
  @segment_dict
end

#separatorsReader::Separators (readonly)

Returns:



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

def separators
  @separators
end

#zipperZipper::AbstractCursor (readonly)



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

def zipper
  @zipper
end

Class Method Details

.push(zipper, parent, segment_tok, segment_use, config) ⇒ Zipper::AbstractCursor



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

def push(zipper, parent, segment_tok, segment_use, config)
  case segment_use.parent
  when Schema::TableDef
    table_def   = segment_use.parent
    table_val   = table_def.empty
    segment_val = mksegment(segment_tok, segment_use)

    itable = InstructionTable.build(instructions(table_def))
    itable = itable.drop(itable.at(segment_use).drop_count)

    zipper.append_child new(
      parent.separators,
      parent.segment_dict,
      parent.instructions.push(itable.instructions),
      parent.zipper.append(table_val).append_child(segment_val),
      [])

  when Schema::LoopDef
    table_def = segment_use.parent.parent
    table_val = table_def.empty

    itable = InstructionTable.build(instructions(table_def))
    itable = itable.drop(itable.at(segment_use).drop_count)

    zipper = zipper.append_child new(
      parent.separators,
      parent.segment_dict,
      parent.instructions.push(itable.instructions),
      parent.zipper.append(table_val).dangle.last,
      [])

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

Instance Method Details

#copy(changes = {}) ⇒ TableState

Returns:



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

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