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:



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

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:



114
115
116
117
118
# File 'lib/stupidedi/schema/table_def.rb', line 114

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:



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

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:



61
62
63
# File 'lib/stupidedi/schema/table_def.rb', line 61

def children
  @header_segment_uses + @loop_defs + @trailer_segment_uses
end

#code_listsAbstractSet<CodeList>

Returns:



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

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:



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

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

#entry_segment_usesArray<SegmentUse>

Returns:



53
54
55
56
57
58
# 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)
end

#pretty_print(q) ⇒ void

This method returns an undefined value.



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

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)


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

def table?
  true
end