Class: Stupidedi::Schema::SegmentDef
Overview
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Inspect
#inspect
Methods inherited from AbstractDef
#component?, #composite?, #definition?, #element?, #functional_group?, #interchange?, #loop?, #repeated?, #required?, #simple?, #table?, #transaction_set?, #usage?
Constructor Details
#initialize(id, name, purpose, element_uses, syntax_notes, parent) ⇒ SegmentDef
Returns a new instance of SegmentDef.
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/stupidedi/schema/segment_def.rb', line 30
def initialize(id, name, purpose, element_uses, syntax_notes, parent)
@id, @name, @purpose, @element_uses, @syntax_notes, @parent =
id, name, purpose.join, element_uses, syntax_notes, parent
unless parent.nil?
@element_uses = @element_uses.map{|x| x.copy(:parent => self) }
end
end
|
Instance Attribute Details
22
23
24
|
# File 'lib/stupidedi/schema/segment_def.rb', line 22
def element_uses
@element_uses
end
|
#id ⇒ Symbol
13
14
15
|
# File 'lib/stupidedi/schema/segment_def.rb', line 13
def id
@id
end
|
#name ⇒ String
16
17
18
|
# File 'lib/stupidedi/schema/segment_def.rb', line 16
def name
@name
end
|
28
29
30
|
# File 'lib/stupidedi/schema/segment_def.rb', line 28
def parent
@parent
end
|
#purpose ⇒ String
19
20
21
|
# File 'lib/stupidedi/schema/segment_def.rb', line 19
def purpose
@purpose
end
|
#syntax_notes ⇒ Array<SyntaxNote>
25
26
27
|
# File 'lib/stupidedi/schema/segment_def.rb', line 25
def syntax_notes
@syntax_notes
end
|
Class Method Details
.build(id, name, purpose, *args) ⇒ SegmentDef
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/stupidedi/schema/segment_def.rb', line 102
def build(id, name, purpose, *args)
element_uses = args.take_while{|x| x.is_a?(AbstractElementUse) }
syntax_notes = args.drop(element_uses.length)
syntax_notes.each do |sn|
unless sn.indexes.max - 1 <= element_uses.length
raise Exceptions::InvalidSchemaError,
"Syntax note for #{id} (#{element_uses.length} elements) " +
"refers to non-existent element #{sn.indexes.max}"
end
end
new(id, name, purpose, element_uses, syntax_notes, nil)
end
|
Instance Method Details
#code_lists ⇒ AbstractSet<CodeList>
76
77
78
|
# File 'lib/stupidedi/schema/segment_def.rb', line 76
def code_lists
@element_uses.map(&:code_lists).inject(&:|)
end
|
#copy(changes = {}) ⇒ SegmentDef
42
43
44
45
46
47
48
49
50
|
# File 'lib/stupidedi/schema/segment_def.rb', line 42
def copy(changes = {})
SegmentDef.new \
changes.fetch(:id, @id),
changes.fetch(:name, @name),
changes.fetch(:purpose, @purpose),
changes.fetch(:element_uses, @element_uses),
changes.fetch(:syntax_notes, @syntax_notes),
changes.fetch(:parent, @parent)
end
|
#descriptor ⇒ String
53
54
55
|
# File 'lib/stupidedi/schema/segment_def.rb', line 53
def descriptor
"segment #{id} #{name}"
end
|
63
64
65
|
# File 'lib/stupidedi/schema/segment_def.rb', line 63
def empty(usage)
Values::SegmentVal.new([], usage)
end
|
#pretty_print(q)
This method returns an undefined value.
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
# File 'lib/stupidedi/schema/segment_def.rb', line 81
def pretty_print(q)
q.text "SegmentDef[#{@id}]"
q.group(2, "(", ")") do
q.breakable ""
@element_uses.each do |e|
unless q.current_group.first?
q.text ","
q.breakable
end
q.pp e
end
end
end
|
#segment? ⇒ Boolean
71
72
73
|
# File 'lib/stupidedi/schema/segment_def.rb', line 71
def segment?
true
end
|
#use(position, requirement, repeat_count) ⇒ SegmentUse
58
59
60
|
# File 'lib/stupidedi/schema/segment_def.rb', line 58
def use(position, requirement, repeat_count)
SegmentUse.new(self, position, requirement, repeat_count, nil)
end
|
#value(element_vals, usage, position)
67
68
69
|
# File 'lib/stupidedi/schema/segment_def.rb', line 67
def value(element_vals, usage, position)
Values::SegmentVal.new(element_vals, usage, position)
end
|