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.



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

#header_segment_usesArray<SegmentUse> (readonly)

Returns:



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

def header_segment_uses
  @header_segment_uses
end

#idString (readonly)

Returns:



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

def id
  @id
end

#loop_defsArray<LoopDef> (readonly)

Returns:



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

def loop_defs
  @loop_defs
end

#parentTransactionSetDef (readonly)

Returns:



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

def parent
  @parent
end

#positionInteger (readonly)

Returns:



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

def position
  @position
end

#trailer_segment_usesArray<SegmentUse> (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

.detail(id, *children) ⇒ TableDef

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

.header(id, *children) ⇒ TableDef

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

.summary(id, *children) ⇒ TableDef

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

#childrenArray<SegmentUse, LoopDef>

Returns:



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

def children
  @header_segment_uses + @loop_defs + @trailer_segment_uses
end

#code_listsAbstractSet<CodeList>

Returns:



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

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

#copy(changes = {}) ⇒ TableDef

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

#emptyValues::TableVal

Returns:



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

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

#entry_segment_usesArray<SegmentUse>

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

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

#repeatable?Boolean

Returns:

  • (Boolean)


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

def repeatable?
  @repeatable
end

#table?Boolean

Returns:

  • (Boolean)


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

def table?
  true
end