Class: Stupidedi::Schema::TableDef

Inherits:
AbstractDef show all
Defined in:
lib/stupidedi/schema/table_def.rb

Instance Attribute Summary (collapse)

Constructors (collapse)

Instance Method Summary (collapse)

Methods inherited from AbstractDef

#component?, #composite?, #definition?, #element?, #functional_group?, #interchange?, #loop?, #repeated?, #segment?, #simple?, #transaction_set?, #usage?

Constructor Details

- (TableDef) initialize(id, position, repeatable, header_segment_uses, loop_defs, trailer_segment_uses, parent)



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/stupidedi/schema/table_def.rb', line 23

def initialize(id, position, repeatable, header_segment_uses, loop_defs, trailer_segment_uses, parent)
  @id, @position, @repeatable, @header_segment_uses, @loop_defs, @trailer_segment_uses, @parent =
    id, position, repeatable, header_segment_uses, loop_defs, trailer_segment_uses, parent

  # Delay re-parenting until the entire definition tree has a root
  # to prevent unnecessarily copying objects
  unless parent.nil?
    @header_segment_uses  = @header_segment_uses.map{|x| x.copy(:parent => self) }
    @loop_defs            = @loop_defs.map{|x| x.copy(:parent => self) }
    @trailer_segment_uses = @trailer_segment_uses.map{|x| x.copy(:parent => self) }
  end
end

Instance Attribute Details

- (Array<SegmentUse>) header_segment_uses (readonly)



9
10
11
# File 'lib/stupidedi/schema/table_def.rb', line 9

def header_segment_uses
  @header_segment_uses
end

- (String) id (readonly)



6
7
8
# File 'lib/stupidedi/schema/table_def.rb', line 6

def id
  @id
end

- (Array<LoopDef>) loop_defs (readonly)



15
16
17
# File 'lib/stupidedi/schema/table_def.rb', line 15

def loop_defs
  @loop_defs
end

- (TransactionSetDef) parent (readonly)



18
19
20
# File 'lib/stupidedi/schema/table_def.rb', line 18

def parent
  @parent
end

- (Integer) position (readonly)



21
22
23
# File 'lib/stupidedi/schema/table_def.rb', line 21

def position
  @position
end

- (Array<SegmentUse>) trailer_segment_uses (readonly)



12
13
14
# File 'lib/stupidedi/schema/table_def.rb', line 12

def trailer_segment_uses
  @trailer_segment_uses
end

Class Method Details

+ (TableDef) detail(id, *children)



125
126
127
128
129
# File 'lib/stupidedi/schema/table_def.rb', line 125

def detail(id, *children)
  header, children   = children.split_when{|x| x.is_a?(LoopDef) }
  loop_defs, trailer = children.split_when{|x| x.is_a?(SegmentUse) }
  new(id, 2, true, header, loop_defs, trailer, nil)
end

+ (TableDef) header(id, *children)



118
119
120
121
122
# File 'lib/stupidedi/schema/table_def.rb', line 118

def header(id, *children)
  header, children   = children.split_when{|x| x.is_a?(LoopDef) }
  loop_defs, trailer = children.split_when{|x| x.is_a?(SegmentUse) }
  new(id, 1, false, header, loop_defs, trailer, nil)
end

+ (TableDef) summary(id, *children)



132
133
134
135
136
# File 'lib/stupidedi/schema/table_def.rb', line 132

def summary(id, *children)
  header, children   = children.split_when{|x| x.is_a?(LoopDef) }
  loop_defs, trailer = children.split_when{|x| x.is_a?(SegmentUse) }
  new(id, 3, false, header, loop_defs, trailer, nil)
end

Instance Method Details

- (Array<SegmentUse, LoopDef>) children



65
66
67
# File 'lib/stupidedi/schema/table_def.rb', line 65

def children
  @header_segment_uses + @loop_defs + @trailer_segment_uses
end

- (AbstractSet<CodeList>) code_lists



79
80
81
# File 'lib/stupidedi/schema/table_def.rb', line 79

def code_lists
  children.map(&:code_lists).inject(&:|)
end

- (TableDef) copy(changes = {})



37
38
39
40
41
42
43
44
45
46
# File 'lib/stupidedi/schema/table_def.rb', line 37

def copy(changes = {})
  TableDef.new \
    changes.fetch(:id, @id),
    changes.fetch(:position, @position),
    changes.fetch(:repeatable, @repeatable),
    changes.fetch(:header_segment_uses, @header_segment_uses),
    changes.fetch(:loop_defs, @loop_defs),
    changes.fetch(:trailer_segment_uses, @trailer_segment_uses),
    changes.fetch(:parent, @parent)
end

- (Values::TableVal) empty



70
71
72
# File 'lib/stupidedi/schema/table_def.rb', line 70

def empty
  Values::TableVal.new(self, [])
end

- (Array<SegmentUse>) entry_segment_uses



53
54
55
56
57
58
59
60
61
62
# File 'lib/stupidedi/schema/table_def.rb', line 53

def entry_segment_uses
  uses = []
  uses.concat(@header_segment_uses)
  uses.concat(@loop_defs.map{|l| l.entry_segment_use })
  uses.concat(@trailer_segment_uses)

  # Up to and including the first required segment
  opt, req = uses.split_until(&:optional?)
  opt.concat(req.take(1))
end

- pretty_print(q)



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/stupidedi/schema/table_def.rb', line 84

def pretty_print(q)
  q.text("TableDef[#{@id}]")
  q.group(2, "(", ")") do
    q.breakable ""
    @header_segment_uses.each do |e|
      unless q.current_group.first?
        q.text ","
        q.breakable
      end
      q.pp e
    end
    @loop_defs.each do |e|
      unless q.current_group.first?
        q.text ","
        q.breakable
      end
      q.pp e
    end
    @trailer_segment_uses.each do |e|
      unless q.current_group.first?
        q.text ","
        q.breakable
      end
      q.pp e
    end
  end
end

- (Boolean) repeatable?



48
49
50
# File 'lib/stupidedi/schema/table_def.rb', line 48

def repeatable?
  @repeatable
end

- (Boolean) table?



74
75
76
# File 'lib/stupidedi/schema/table_def.rb', line 74

def table?
  true
end