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)

Returns a new instance of TableDef



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)

Returns:



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

def header_segment_uses
  @header_segment_uses
end

- (String) id (readonly)

Returns:



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

def id
  @id
end

- (Array<LoopDef>) loop_defs (readonly)

Returns:



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

def loop_defs
  @loop_defs
end

- (TransactionSetDef) parent (readonly)

Returns:



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

def parent
  @parent
end

- (Integer) position (readonly)

Returns:



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

def position
  @position
end

- (Array<SegmentUse>) trailer_segment_uses (readonly)

Returns:



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)

Returns:



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)

Returns:



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)

Returns:



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

Returns:



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

Returns:



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

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

- (TableDef) copy(changes = {})

Returns:



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

Returns:



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

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

- (Array<SegmentUse>) entry_segment_uses

Returns:



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)

This method returns an undefined value.



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?

Returns:

  • (Boolean)


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

def repeatable?
  @repeatable
end

- (Boolean) table?

Returns:

  • (Boolean)


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

def table?
  true
end