Class: Stupidedi::Schema::CompositeElementDef

Inherits:
AbstractElementDef show all
Defined in:
lib/stupidedi/schema/element_def.rb

Overview

See Also:

  • B.1.1.3.3 Composite Data Structure

Instance Attribute Summary collapse

Attributes inherited from AbstractElementDef

#description, #id, #name

Constructors collapse

Instance Method Summary collapse

Methods inherited from AbstractElementDef

#element?

Methods included from Inspect

#inspect

Methods inherited from AbstractDef

#component?, #definition?, #element?, #functional_group?, #interchange?, #loop?, #repeated?, #segment?, #table?, #transaction_set?, #usage?

Constructor Details

#initialize(id, name, description, component_uses, syntax_notes, parent) ⇒ CompositeElementDef



92
93
94
95
96
97
98
99
100
101
# File 'lib/stupidedi/schema/element_def.rb', line 92

def initialize(id, name, description, component_uses, syntax_notes, parent)
  @id, @name, @description, @component_uses, @syntax_notes, @parent =
    id, name, description, component_uses, syntax_notes, parent

  # Delay re-parenting until the entire definition tree has a root
  # to prevent unnecessarily copying objects
  unless parent.nil?
    @component_uses = @component_uses.map{|x| x.copy(:parent => self) }
  end
end

Instance Attribute Details

#component_usesArray<ComponentElementUse> (readonly)



84
85
86
# File 'lib/stupidedi/schema/element_def.rb', line 84

def component_uses
  @component_uses
end

#parentCompositeElementUse (readonly)



90
91
92
# File 'lib/stupidedi/schema/element_def.rb', line 90

def parent
  @parent
end

#syntax_notesArray<SyntaxNote> (readonly)



87
88
89
# File 'lib/stupidedi/schema/element_def.rb', line 87

def syntax_notes
  @syntax_notes
end

Class Method Details

.build(id, name, description, *args) ⇒ CompositeElementDef



165
166
167
168
169
170
# File 'lib/stupidedi/schema/element_def.rb', line 165

def build(id, name, description, *args)
  component_uses = args.take_while{|x| x.is_a?(AbstractElementUse) }
  syntax_notes   = args.drop(component_uses.length)

  new(id, name, description, component_uses, syntax_notes, nil)
end

Instance Method Details

#code_listsAbstractSet<CodeList>



140
141
142
# File 'lib/stupidedi/schema/element_def.rb', line 140

def code_lists
  @component_uses.map(&:code_lists).inject(&:|)
end

#composite?Boolean



120
121
122
# File 'lib/stupidedi/schema/element_def.rb', line 120

def composite?
  true
end

#copy(changes = {}) ⇒ CompositeElementDef



104
105
106
107
108
109
110
111
112
# File 'lib/stupidedi/schema/element_def.rb', line 104

def copy(changes = {})
  CompositeElementDef.new \
    changes.fetch(:id, @id),
    changes.fetch(:name, @name),
    changes.fetch(:description, @description),
    changes.fetch(:component_uses, @component_uses),
    changes.fetch(:syntax_notes, @syntax_notes),
    changes.fetch(:parent, @parent)
end

#empty(usage, position) ⇒ CompositeElementVal



135
136
137
# File 'lib/stupidedi/schema/element_def.rb', line 135

def empty(usage, position)
  Values::CompositeElementVal.new([], usage)
end

#pretty_print(q)



145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/stupidedi/schema/element_def.rb', line 145

def pretty_print(q)
  q.text("CompositeElementDef[#{@id}]")
  q.group(2, "(", ")") do
    q.breakable ""
    @component_uses.each do |e|
      unless q.current_group.first?
        q.text ","
        q.breakable
      end
      q.pp e
    end
  end
end

#simple?Boolean



115
116
117
# File 'lib/stupidedi/schema/element_def.rb', line 115

def simple?
  false
end

#simple_use(requirement, repeat_count, parent = nil) ⇒ CompositeElementUse



125
126
127
# File 'lib/stupidedi/schema/element_def.rb', line 125

def simple_use(requirement, repeat_count, parent = nil)
  CompositeElementUse.new(self, requirement, repeat_count, parent)
end

#value(component_vals, usage, position) ⇒ CompositeElementVal



130
131
132
# File 'lib/stupidedi/schema/element_def.rb', line 130

def value(component_vals, usage, position)
  Values::CompositeElementVal.new(component_vals, usage)
end