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

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

Returns a new instance of TableDef.



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

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

#header_segment_usesArray<SegmentUse> (readonly)

Returns:



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

def header_segment_uses
  @header_segment_uses
end

#idString (readonly)

Returns:

  • (String)


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

def id
  @id
end

#loop_defsArray<LoopDef> (readonly)

Returns:



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

def loop_defs
  @loop_defs
end

#parentTransactionSetDef (readonly)

Returns:



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

def parent
  @parent
end

#positionInteger (readonly)

Returns:

  • (Integer)


23
24
25
# File 'lib/stupidedi/schema/table_def.rb', line 23

def position
  @position
end

#trailer_segment_usesArray<SegmentUse> (readonly)

Returns:



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

def trailer_segment_uses
  @trailer_segment_uses
end

Class Method Details

.detail(id, *children) ⇒ TableDef

Returns:



127
128
129
130
131
# File 'lib/stupidedi/schema/table_def.rb', line 127

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

.header(id, *children) ⇒ TableDef

Returns:



120
121
122
123
124
# File 'lib/stupidedi/schema/table_def.rb', line 120

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

.summary(id, *children) ⇒ TableDef

Returns:



134
135
136
137
138
# File 'lib/stupidedi/schema/table_def.rb', line 134

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

#childrenArray<SegmentUse, LoopDef>

Returns:



67
68
69
# File 'lib/stupidedi/schema/table_def.rb', line 67

def children
  @header_segment_uses + @loop_defs + @trailer_segment_uses
end

#code_listsAbstractSet<CodeList>

Returns:



81
82
83
# File 'lib/stupidedi/schema/table_def.rb', line 81

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

#copy(changes = {}) ⇒ TableDef

Returns:



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

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

#emptyValues::TableVal

Returns:



72
73
74
# File 'lib/stupidedi/schema/table_def.rb', line 72

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

#entry_segment_usesArray<SegmentUse>

Returns:



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

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) ⇒ void

This method returns an undefined value.



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
111
112
# File 'lib/stupidedi/schema/table_def.rb', line 86

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

#repeatable?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/stupidedi/schema/table_def.rb', line 50

def repeatable?
  @repeatable
end

#table?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/stupidedi/schema/table_def.rb', line 76

def table?
  true
end