openehr 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require File.dirname(__FILE__) + '/parser_spec_helper'
3
+ require 'openehr/am/openehr_profile/data_types/quantity'
4
+ include OpenEHR::AM::OpenEHRProfile::DataTypes::Quantity
5
+
6
+ describe ADLParser do
7
+ describe CDvOrdinal do
8
+ before(:all) do
9
+ @archetype = adl14_archetype('adl-test-entry.c_dv_ordinal.test.adl')
10
+ end
11
+
12
+ it 'archetype should be parsed' do
13
+ @archetype.should_not be_nil
14
+ end
15
+ end
16
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openehr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-04 00:00:00.000000000 Z
13
+ date: 2012-05-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: xml-simple
17
- requirement: &17203798920 !ruby/object:Gem::Requirement
17
+ requirement: &17203595880 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *17203798920
25
+ version_requirements: *17203595880
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &17203810260 !ruby/object:Gem::Requirement
28
+ requirement: &17203593680 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *17203810260
36
+ version_requirements: *17203593680
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: locale
39
- requirement: &17203805440 !ruby/object:Gem::Requirement
39
+ requirement: &17203591680 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *17203805440
47
+ version_requirements: *17203591680
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: builder
50
- requirement: &17203803000 !ruby/object:Gem::Requirement
50
+ requirement: &17203605880 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *17203803000
58
+ version_requirements: *17203605880
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: jeweler
61
- requirement: &17203817360 !ruby/object:Gem::Requirement
61
+ requirement: &17203603980 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *17203817360
69
+ version_requirements: *17203603980
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: i18n
72
- requirement: &17203815600 !ruby/object:Gem::Requirement
72
+ requirement: &17203601940 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *17203815600
80
+ version_requirements: *17203601940
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: treetop
83
- requirement: &17203812920 !ruby/object:Gem::Requirement
83
+ requirement: &17203600140 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *17203812920
91
+ version_requirements: *17203600140
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: polyglot
94
- requirement: &17203810380 !ruby/object:Gem::Requirement
94
+ requirement: &17203615140 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *17203810380
102
+ version_requirements: *17203615140
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rdoc
105
- requirement: &17203824780 !ruby/object:Gem::Requirement
105
+ requirement: &17203614020 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *17203824780
113
+ version_requirements: *17203614020
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: sqlite3
116
- requirement: &17203821920 !ruby/object:Gem::Requirement
116
+ requirement: &17203612360 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :runtime
123
123
  prerelease: false
124
- version_requirements: *17203821920
124
+ version_requirements: *17203612360
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: activerecord
127
- requirement: &17203832800 !ruby/object:Gem::Requirement
127
+ requirement: &17203608580 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :runtime
134
134
  prerelease: false
135
- version_requirements: *17203832800
135
+ version_requirements: *17203608580
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rspec
138
- requirement: &17203829160 !ruby/object:Gem::Requirement
138
+ requirement: &17203622500 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *17203829160
146
+ version_requirements: *17203622500
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: guard-rspec
149
- requirement: &17203836960 !ruby/object:Gem::Requirement
149
+ requirement: &17203620620 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *17203836960
157
+ version_requirements: *17203620620
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: ruby-debug19
160
- requirement: &17203844280 !ruby/object:Gem::Requirement
160
+ requirement: &17203619200 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,10 +165,10 @@ dependencies:
165
165
  version: '0'
166
166
  type: :development
167
167
  prerelease: false
168
- version_requirements: *17203844280
168
+ version_requirements: *17203619200
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: spork
171
- requirement: &17203858260 !ruby/object:Gem::Requirement
171
+ requirement: &17203617260 !ruby/object:Gem::Requirement
172
172
  none: false
173
173
  requirements:
174
174
  - - ~>
@@ -176,10 +176,10 @@ dependencies:
176
176
  version: 1.0rc
177
177
  type: :development
178
178
  prerelease: false
179
- version_requirements: *17203858260
179
+ version_requirements: *17203617260
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: guard-spork
182
- requirement: &17203856740 !ruby/object:Gem::Requirement
182
+ requirement: &17203631140 !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
185
185
  - - ! '>='
@@ -187,10 +187,10 @@ dependencies:
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
- version_requirements: *17203856740
190
+ version_requirements: *17203631140
191
191
  - !ruby/object:Gem::Dependency
192
192
  name: simplecov
193
- requirement: &17203855880 !ruby/object:Gem::Requirement
193
+ requirement: &17203630200 !ruby/object:Gem::Requirement
194
194
  none: false
195
195
  requirements:
196
196
  - - ! '>='
@@ -198,10 +198,10 @@ dependencies:
198
198
  version: '0'
199
199
  type: :development
200
200
  prerelease: false
201
- version_requirements: *17203855880
201
+ version_requirements: *17203630200
202
202
  - !ruby/object:Gem::Dependency
203
203
  name: libnotify
204
- requirement: &17203854240 !ruby/object:Gem::Requirement
204
+ requirement: &17203628700 !ruby/object:Gem::Requirement
205
205
  none: false
206
206
  requirements:
207
207
  - - ! '>='
@@ -209,7 +209,7 @@ dependencies:
209
209
  version: '0'
210
210
  type: :development
211
211
  prerelease: false
212
- version_requirements: *17203854240
212
+ version_requirements: *17203628700
213
213
  description: This project is an implementation of the openEHR specification on Ruby.
214
214
  email: skoba@moss.gr.jp
215
215
  executables: []
@@ -242,15 +242,10 @@ files:
242
242
  - lib/openehr/am/openehr_profile/data_types/text.rb
243
243
  - lib/openehr/assumed_library_types.rb
244
244
  - lib/openehr/parser.rb
245
- - lib/openehr/parser/adl.rb
246
245
  - lib/openehr/parser/adl_grammar.tt
246
+ - lib/openehr/parser/adl_helper.rb
247
247
  - lib/openehr/parser/adl_parser.rb
248
- - lib/openehr/parser/cadl_grammar.tt
249
- - lib/openehr/parser/cadl_node.rb
250
- - lib/openehr/parser/dadl.rb
251
- - lib/openehr/parser/dadl_grammar.tt
252
248
  - lib/openehr/parser/exception.rb
253
- - lib/openehr/parser/shared_token_grammar.tt
254
249
  - lib/openehr/parser/validator.rb
255
250
  - lib/openehr/parser/xml_perser.rb
256
251
  - lib/openehr/rm.rb
@@ -474,6 +469,7 @@ files:
474
469
  - spec/lib/openehr/parser/mixed_node_types_spec.rb
475
470
  - spec/lib/openehr/parser/most_minimal_adl_spec.rb
476
471
  - spec/lib/openehr/parser/multi_language_spec.rb
472
+ - spec/lib/openehr/parser/openehr_apgar_spec.rb
477
473
  - spec/lib/openehr/parser/parser_spec_helper.rb
478
474
  - spec/lib/openehr/parser/path_based_terminology_binding_spec.rb
479
475
  - spec/lib/openehr/parser/special_string_spec.rb
@@ -615,7 +611,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
615
611
  version: '0'
616
612
  segments:
617
613
  - 0
618
- hash: 3056108121012002221
614
+ hash: 4317873807425963811
619
615
  required_rubygems_version: !ruby/object:Gem::Requirement
620
616
  none: false
621
617
  requirements:
@@ -1,1527 +0,0 @@
1
- require 'shared_token_grammar'
2
- require 'openehr/assumed_library_types'
3
- require 'openehr/am/archetype/constraint_model'
4
- require 'openehr/am/openehr_profile/data_types/text'
5
- require 'cadl_node'
6
-
7
- module OpenEHR
8
- module Parser
9
- grammar CADL
10
- # include OpenEHR::Parser::CADL
11
-
12
- rule V_CADL_TEXT
13
- c_complex_object '' {
14
- def value
15
- c_complex_object.value
16
- end
17
- }
18
- / assertions '' {
19
- def value
20
- assertions.value
21
- end
22
- }
23
- end
24
-
25
- rule c_complex_object
26
- head:c_complex_object_head SYM_MATCHES SYM_START_CBLOCK body:c_complex_object_body SYM_END_CBLOCK space {
27
- def value(node = ArchetypeNode.new)
28
- args = head.value
29
- args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
30
- :lower => 1, :upper => 1)
31
- node.id = args[:node_id]
32
- if node.root? or node.id.nil?
33
- args[:path] = node.path
34
- else
35
- args[:path] = node.path + '[' + node.id + ']'
36
- end
37
- args.update body.value(node)
38
- OpenEHR::AM::Archetype::ConstraintModel::CComplexObject.new(args)
39
- end
40
- }
41
- / c_complex_object_head '' {
42
- def value(node = ArchetypeNode.new)
43
- args = c_complex_object_head.value
44
- args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
45
- :lower => 1, :upper => 1)
46
- node.id = args[:node_id]
47
- args[:path] = node.path
48
- OpenEHR::AM::Archetype::ConstraintModel::CComplexObject.new(args)
49
- end
50
- }
51
- end
52
-
53
- rule c_complex_object_head
54
- c_complex_object_id c_occurrences {
55
- def value
56
- args = c_complex_object_id.value
57
- args[:occurrences] = c_occurrences.value
58
- args
59
- end
60
- }
61
- / c_complex_object_id '' {
62
- def value
63
- c_complex_object_id.value
64
- end
65
- }
66
- end
67
-
68
- rule c_complex_object_id
69
- ti:type_identifier lo:V_LOCAL_TERM_CODE_REF space {
70
- def value
71
- {:rm_type_name => ti.value,
72
- :node_id => lo.value}
73
- end
74
- }
75
- / ti:type_identifier space {
76
- def value
77
- {:rm_type_name => ti.value}
78
- end
79
- }
80
- end
81
-
82
- rule c_complex_object_body
83
- c_any '' {
84
- def value(node)
85
- Hash[:attributes => [c_any.value(node)]]
86
- end
87
- }
88
- / c_attributes '' {
89
- def value(node)
90
- Hash[:attributes => c_attributes.value(node)]
91
- end
92
- }
93
- end
94
-
95
- rule c_object
96
- c_dv_quantity '' {
97
- def value(node)
98
- c_dv_quantity.value(node)
99
- end
100
- }
101
- / c_ordinal '' {
102
- def value(node)
103
- args = c_ordinal.value
104
- args[:path] = node.path
105
- args[:rm_type_name] = 'DvOrdinal'
106
- args[:occurrences] ||= OpenEHR::AssumedLibraryTypes::Interval.new(
107
- :upper => 1, :lower => 1)
108
- OpenEHR::AM::OpenEHRProfile::DataTypes::Quantity::CDvOrdinal.new(
109
- args)
110
- end
111
- }
112
- / c_primitive_object '' {
113
- def value(node)
114
- c_primitive_object.value
115
- end
116
- }
117
- / c_complex_object '' {
118
- def value(node)
119
- c_complex_object.value(node)
120
- end
121
- }
122
- / c_code_phrase '' {
123
- def value(node)
124
- c_code_phrase.value(node)
125
- end
126
- }
127
- / constraint_ref '' {
128
- def value(node)
129
- constraint_ref.value(node)
130
- end
131
- }
132
- / archetype_slot '' {
133
- def value(node)
134
- archetype_slot.value(node)
135
- end
136
- }
137
- / archetype_internal_ref '' {
138
- def value(node = nil)
139
- archetype_internal_ref.value(node)
140
- end
141
- }
142
- / V_C_DOMAIN_TYPE '' {
143
- def value(node = nil)
144
- p elemetns
145
- end
146
- }
147
- # / ERR_V_C_DOMAIN_TYPE
148
- end
149
-
150
- rule archetype_internal_ref
151
- SYM_USE_NODE type_identifier c_occurrences object_path space {
152
- def value(node)
153
- OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef.new(
154
- :rm_type_name => type_identifier.value,
155
- :occurrences => c_occurrences.value,
156
- :path => node.path,
157
- :target_path => object_path.value)
158
- end
159
- }
160
- / SYM_USE_NODE type_identifier object_path space {
161
- def value(node = nil)
162
- OpenEHR::AM::Archetype::ConstraintModel::ArchetypeInternalRef.new(
163
- :rm_type_name => type_identifier.value,
164
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
165
- :lower => 1, :upper => 1),
166
- :path => node.path,
167
- :target_path => object_path.value)
168
- end
169
- }
170
- end
171
-
172
- rule archetype_slot
173
- c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK space {
174
- def value(node)
175
- args = c_archetype_slot_head.value(node)
176
- args[:includes] = c_includes.value
177
- args[:excludes] = c_excludes.value
178
- OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
179
- end
180
- }
181
- / c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes SYM_END_CBLOCK space {
182
- def value(node)
183
- args = c_archetype_slot_head.value(node)
184
- args[:includes] = c_includes.value
185
- OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
186
- end
187
- }
188
- / c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_excludes SYM_END_CBLOCK space {
189
- def value(node)
190
- args = c_archetype_slot_head.value(node)
191
- args[:excludes] = c_excludes.value
192
- OpenEHR::AM::Archetype::ConstraintModel::ArchetypeSlot.new(args)
193
- end
194
- }
195
- end
196
-
197
- rule c_archetype_slot_head
198
- c_archetype_slot_id white_space c_occurrences {
199
- def value(node)
200
- args = c_archetype_slot_id.value(node)
201
- args[:occurrences] = c_occurrences.value
202
- args
203
- end
204
- }
205
- / c_archetype_slot_id white_space {
206
- def value(node)
207
- args = c_archetype_slot_id.value(node)
208
- args[:occurrences] = OpenEHR::AssumedLibraryTypes::Interval.new(
209
- :upper => 1, :lower => 1)
210
- args
211
- end
212
- }
213
- end
214
-
215
- rule c_archetype_slot_id
216
- SYM_ALLOW_ARCHETYPE type_identifier lt:V_LOCAL_TERM_CODE_REF {
217
- def value(node)
218
- {:rm_type_name => type_identifier.value,
219
- :node_id => lt.value,
220
- :path => node.path + "[#{lt.value}]"}
221
- end
222
- }
223
- / SYM_ALLOW_ARCHETYPE type_identifier {
224
- def value(node)
225
- {:rm_type_name => type_identifier.value,
226
- :path => node.path}
227
- end
228
- }
229
- end
230
-
231
- rule c_primitive_object
232
- c_primitive '' {
233
- def value
234
- c_primitive.value
235
- end
236
- }
237
- end
238
-
239
- rule c_primitive
240
- c_boolean '' {
241
- def value
242
- c_boolean.value
243
- end
244
- }
245
- / c_date_time '' {
246
- def value
247
- c_date_time.value
248
- end
249
- }
250
- / c_time '' {
251
- def value
252
- c_time.value
253
- end
254
- }
255
- / c_date '' {
256
- def value
257
- c_date.value
258
- end
259
- }
260
- / c_duration '' {
261
- def value
262
- c_duration.value
263
- end
264
- }
265
- / c_real '' {
266
- def value
267
- c_real.value
268
- end
269
- }
270
- / c_integer '' {
271
- def value
272
- c_integer.value
273
- end
274
- }
275
- / c_string '' {
276
- def value
277
- c_string.value
278
- end
279
- }
280
- end
281
-
282
- rule c_any
283
- '*' space {
284
- def value(node)
285
- OpenEHR::AM::Archetype::ConstraintModel::CAttribute.new(
286
- :path => node.path, :rm_attribute_name => 'ANY',
287
- :exsitence => OpenEHR::AssumedLibraryTypes::Interval.new(
288
- :lower => 1, :upper => 1))
289
- end
290
- }
291
- end
292
-
293
- rule c_attributes
294
- c_attribute more_attr:(c_attribute white_space)* {
295
- def value(node)
296
- attributes.map {|c| c.value(node)}
297
- end
298
-
299
- def attributes
300
- [c_attribute] + more_attr.elements.map {|e| e.c_attribute}
301
- end
302
- }
303
- end
304
-
305
- rule c_attribute
306
- c_attr_head c_attr_body {
307
- def value(node)
308
- val = c_attr_head.value(node)
309
- child_node = ArchetypeNode.new(node)
310
- child_node.path = val.path
311
- val.children = c_attr_body.value(child_node)
312
- val
313
- end
314
- }
315
- end
316
-
317
- rule c_attr_head
318
- id:(V_ATTRIBUTE_IDENTIFIER) white_space c_existence c_cardinality {
319
- def value(node)
320
- if node.root?
321
- path = node.path + id.value
322
- elsif node.id
323
- path = node.path + "[#{node.id}]/" + id.value
324
- elsif
325
- path = node.path + '/' + id.value
326
- end
327
- OpenEHR::AM::Archetype::ConstraintModel::CMultipleAttribute.new(
328
- :rm_attribute_name => id.value,
329
- :path => path,
330
- :existence => c_existence.value,
331
- :cardinality => c_cardinality.value)
332
- end
333
- }
334
- / id:V_ATTRIBUTE_IDENTIFIER white_space c_existence {
335
- def value(node)
336
- if node.root?
337
- path = node.path + id.value
338
- elsif node.id
339
- path = node.path + "[#{node.id}]/" + id.value
340
- elsif
341
- path = node.path + '/' + id.value
342
- end
343
- OpenEHR::AM::Archetype::ConstraintModel::CSingleAttribute.new(
344
- :rm_attribute_name => id.value,
345
- :path => path,
346
- :existence => c_existence.value)
347
- end
348
- }
349
- / id:(V_ATTRIBUTE_IDENTIFIER) white_space c_cardinality {
350
- def value(node)
351
- if node.root?
352
- path = node.path + id.value
353
- elsif node.id
354
- path = node.path + "[#{node.id}]/" + id.value
355
- elsif
356
- path = node.path + '/' + id.value
357
- end
358
- OpenEHR::AM::Archetype::ConstraintModel::CMultipleAttribute.new(
359
- :rm_attribute_name => id.value,
360
- :path => path,
361
- :cardinality => c_cardinality.value)
362
- end
363
- }
364
- / id:(V_ATTRIBUTE_IDENTIFIER) white_space {
365
- def value(node)
366
- if node.root?
367
- path = node.path + id.value
368
- elsif node.id
369
- path = node.path + "[#{node.id}]/" + id.value
370
- elsif
371
- path = node.path + '/' + id.value
372
- end
373
- OpenEHR::AM::Archetype::ConstraintModel::CSingleAttribute.new(
374
- :rm_attribute_name => id.value, :path => path)
375
- end
376
- }
377
- end
378
-
379
- rule c_attr_body
380
- SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK space {
381
- def value(node)
382
- c_attr_values.value(node)
383
- end
384
- }
385
- end
386
-
387
- rule c_attr_values
388
- c_any '' {
389
- def value(node)
390
- [c_any.value(node)]
391
- end
392
- }
393
- / c_object more_co:(c_object '')* {
394
- def value(node)
395
- c_objects.map {|c| c.value(node)}
396
- end
397
-
398
- def c_objects
399
- [c_object] + more_co.elements.map {|e| e.c_object }
400
- end
401
- }
402
- end
403
-
404
- rule c_includes
405
- SYM_INCLUDE assertions {
406
- def value
407
- assertions.value
408
- end
409
- }
410
- end
411
-
412
- rule c_excludes
413
- SYM_EXCLUDE assertions {
414
- def value
415
- assertions.value
416
- end
417
- }
418
- end
419
-
420
- rule c_existence
421
- SYM_EXISTENCE SYM_MATCHES SYM_START_CBLOCK existence_spec SYM_END_CBLOCK space {
422
- def value
423
- existence_spec.value
424
- end
425
- }
426
- end
427
-
428
- rule existence_spec
429
- lo:V_INTEGER SYM_ELLIPSIS up:V_INTEGER {
430
- def value
431
- OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value, :upper => up.value)
432
- end
433
- }
434
- / V_INTEGER '' {
435
- def value
436
- OpenEHR::AssumedLibraryTypes::Interval.new(:lower => V_INTEGER.value, :upper => V_INTEGER.value)
437
- end
438
- }
439
- end
440
-
441
- rule c_cardinality
442
- SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK space {
443
- def value
444
- cardinality_spec.value
445
- end
446
- }
447
- end
448
-
449
- rule cardinality_spec
450
- occurrence_spec ';' white_space SYM_ORDERED ';' white_space SYM_UNIQUE {
451
- def value
452
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
453
- :interval => occurrence_spec.value,
454
- :is_unique => true,
455
- :is_orderd => true)
456
- end
457
- }
458
- / occurrence_spec ';' white_space SYM_ORDERED {
459
- def value
460
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
461
- :interval => occurrence_spec.value,
462
- :is_orderd => true)
463
- end
464
- }
465
- / occurrence_spec ';' white_space SYM_UNORDERD ';' white_space SYM_UNIQUE {
466
- def value
467
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
468
- :interval => occurrence_spec.value,
469
- :is_unique => true,
470
- :is_orderd => false)
471
- end
472
- }
473
- / occurrence_spec ';' white_space SYM_UNORDERD {
474
- def value
475
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
476
- :interval => occurrence_spec.value,
477
- :is_orderd => false)
478
- end
479
- }
480
- / occurrence_spec SYM_UNIQUE ';' white_space SYM_ORDERED {
481
- def value
482
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
483
- :interval => occurrence_spec.value,
484
- :is_unique => true,
485
- :is_orderd => true)
486
- end
487
- }
488
- / occurrence_spec SYM_UNIQUE ';' white_space SYM_UNORDERD {
489
- def value
490
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
491
- :interval => occurrence_spec.value,
492
- :is_unique => true,
493
- :is_ordered => false)
494
- end
495
- }
496
- / occurrence_spec SYM_UNIQUE {
497
- def value
498
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
499
- :interval => occurrence_spec.value,
500
- :is_unique => true)
501
- end
502
- }
503
- / occurrence_spec space {
504
- def value
505
- OpenEHR::AM::Archetype::ConstraintModel::Cardinality.new(
506
- :interval => occurrence_spec.value)
507
- end
508
- }
509
- end
510
-
511
- rule c_occurrences
512
- SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK space {
513
- def value
514
- occurrence_spec.value
515
- end
516
- }
517
- end
518
-
519
- rule occurrence_spec
520
- st:integer_value SYM_ELLIPSIS ed:cardinality_limit_value {
521
- def value
522
- if ed.value == '*'
523
- OpenEHR::AssumedLibraryTypes::Interval.new(
524
- :lower => st.value)
525
- else
526
- OpenEHR::AssumedLibraryTypes::Interval.new(
527
- :lower => st.value,
528
- :upper => ed.value)
529
- end
530
- end
531
- }
532
- / cardinality_limit_value '' {
533
- def value
534
- OpenEHR::AssumedLibraryTypes::Interval.new(
535
- :lower => cardinality_limit_value.value,
536
- :upper => cardinality_limit_value.value)
537
- end
538
- }
539
- end
540
-
541
- rule cardinality_limit_value
542
- integer_value '' {
543
- def value
544
- text_value.to_i
545
- end
546
- }
547
- / '*' {
548
- def value
549
- '*'
550
- end
551
- }
552
- end
553
-
554
- rule c_integer
555
- c_integer_spec ';' white_space integer_value {
556
- def value
557
- args = c_integer_spec.value
558
- args[:assumed_value] = integer_value.value
559
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CInteger.new(args)
560
- end
561
- }
562
- / c_integer_spec '' {
563
- def value
564
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CInteger.new(
565
- c_integer_spec.value)
566
- end
567
- }
568
- end
569
-
570
- rule c_integer_spec
571
- integer_list_value '' {
572
- def value
573
- {:list => integer_list_value.value}
574
- end
575
- }
576
- / integer_interval_value '' {
577
- def value
578
- {:range => integer_interval_value.value}
579
- end
580
- }
581
- / integer_value !'..' '' {
582
- def value
583
- {:list => [integer_value.value]}
584
- end
585
- }
586
- / occurrence_spec '' {
587
- def value
588
- {:range => occurrence_spec.value}
589
- end
590
- }
591
- end
592
-
593
- rule c_real_spec
594
- real_list_value '' {
595
- def value
596
- {:list => real_list_value.value}
597
- end
598
- }
599
- / real_interval_value '' {
600
- def value
601
- {:range => real_interval_value.value}
602
- end
603
- }
604
- / real_value '' {
605
- def value
606
- {:list => [real_value.value]}
607
- end
608
- }
609
- end
610
-
611
- rule c_real
612
- c_real_spec ';' white_space real_value {
613
- def value
614
- args = c_real_spec.value
615
- args[:assumed_value] = real_value.value
616
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CReal.new(args)
617
- end
618
- }
619
- / c_real_spec '' {
620
- def value
621
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CReal.new(
622
- c_real_spec.value)
623
- end
624
- }
625
- end
626
-
627
- rule c_date_constraint
628
- date_interval_value '' {
629
- def value
630
- {:range => date_interval_value.value}
631
- end
632
- }
633
- / date_list_value '' {
634
- def value
635
- {:list => date_list_value.value}
636
- end
637
- }
638
- / date_value '' {
639
- def value
640
- {:list => [date_value.value]}
641
- end
642
- }
643
- / con:V_ISO8601_DATE_CONSTRAINT_PATTERN '' {
644
- def value
645
- {:pattern => con.text_value}
646
- end
647
- }
648
- end
649
-
650
- rule c_date
651
- c_date_constraint ';' white_space date_value {
652
- def value
653
- args = c_date_constraint.value
654
- args[:assumed_value] = date_value.value
655
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDate.new(
656
- args)
657
- end
658
- }
659
- / c_date_constraint '' {
660
- def value
661
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDate.new(
662
- c_date_constraint.value)
663
- end
664
- }
665
- end
666
-
667
- rule c_time_constraint
668
- time_interval_value '' {
669
- def value
670
- {:range => time_interval_value.value}
671
- end
672
- }
673
- / time_list_value '' {
674
- def value
675
- {:list => time_list_value.value}
676
- end
677
- }
678
- / time_value '' {
679
- def value
680
- {:list => [time_value.value]}
681
- end
682
- }
683
- / tc:V_ISO8601_TIME_CONSTRAINT_PATTERN '' {
684
- def value
685
- {:pattern => tc.text_value}
686
- end
687
- }
688
- end
689
-
690
- rule c_time
691
- c_time_constraint ';' white_space time_value {
692
- def value
693
- args = c_time_constraint.value
694
- args[:assumed_value] = time_value.value
695
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CTime.new(
696
- args)
697
- end
698
- }
699
- / c_time_constraint '' {
700
- def value
701
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CTime.new(
702
- c_time_constraint.value)
703
- end
704
- }
705
- end
706
-
707
- rule c_date_time_constraint
708
- date_time_interval_value '' {
709
- def value
710
- {:range => date_time_interval_value.value}
711
- end
712
- }
713
- / date_time_value '' {
714
- def value
715
- {:list => [date_time_value.value]}
716
- end
717
- }
718
- / dtc:V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN '' {
719
- def value
720
- {:pattern => dtc.text_value}
721
- end
722
- }
723
- end
724
-
725
- rule c_date_time
726
- c_date_time_constraint ';' white_space date_time_value {
727
- def value
728
- args = c_date_time_constraint.value
729
- args[:assumed_value] = date_time_value.value
730
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDateTime.new(
731
- args)
732
- end
733
- }
734
- / c_date_time_constraint '' {
735
- def value
736
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDateTime.new(
737
- c_date_time_constraint.value)
738
- end
739
- }
740
- end
741
-
742
- rule c_duration_constraint
743
- duration_pattern '/' duration_interval_value '' {
744
- def value
745
- {:pattern => duration_pattern.value}
746
- end
747
- }
748
- / duration_pattern '' {
749
- def value
750
- {:pattern => duration_pattern.value}
751
- end
752
- }
753
- / duration_interval_value '' {
754
- def value
755
- {:range => duration_interval_value.value}
756
- end
757
- }
758
- / duration_value '' {
759
- def value
760
- {:list => [duration_value.value]}
761
- end
762
- }
763
- end
764
-
765
- rule duration_pattern
766
- dp:V_ISO8601_DURATION_CONSTRAINT_PATTERN '' {
767
- def value
768
- dp.text_value
769
- end
770
- }
771
- end
772
-
773
- rule c_duration
774
- c_duration_constraint ';' white_space duration_value '' {
775
- def value
776
- args = c_duration_constraint.value
777
- args[:assumed_value] = duration_value.value
778
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDuration.new(
779
- args)
780
- end
781
- }
782
- / c_duration_constraint '' {
783
- def value
784
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CDuration.new(
785
- c_duration_constraint.value)
786
- end
787
- }
788
- end
789
-
790
- rule c_string_spec
791
- string_list_value ',' white_space SYM_LIST_CONTINUE {
792
- def value
793
- {:list => string_list_value.value}
794
- end
795
- }
796
- / string_list_value '' {
797
- def value
798
- {:list => string_list_value.value}
799
- end
800
- }
801
- / pat:V_REGEXP '' {
802
- def value
803
- {:pattern => pat.value}
804
- end
805
- }
806
- / str:V_STRING '' {
807
- def value
808
- {:list => [str.value]}
809
- end
810
- }
811
- end
812
-
813
- rule c_string
814
- c_string_spec white_space ';' white_space string_value {
815
- def value
816
- args = c_string_spec.value
817
- args[:assumed_value] = string_value.value
818
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CString.new(
819
- args)
820
- end
821
- }
822
- / c_string_spec '' {
823
- def value
824
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CString.new(
825
- c_string_spec.value)
826
- end
827
- }
828
- end
829
-
830
- rule c_boolean_spec
831
- SYM_TRUE ',' white_space SYM_FALSE {
832
- def value
833
- {:true_valid => true, :false_valid => true}
834
- end
835
- }
836
- / SYM_TRUE white_space '' {
837
- def value
838
- {:true_valid => true, :false_valid => false}
839
- end
840
- }
841
- / SYM_FALSE white_space ',' white_space SYM_TRUE {
842
- def value
843
- {:true_valid => true, :false_valid => true}
844
- end
845
- }
846
- / SYM_FALSE white_space '' {
847
- def value
848
- {:false_valid => true, :true_valid => false}
849
- end
850
- }
851
- end
852
-
853
- rule c_boolean
854
- c_boolean_spec ';' white_space boolean_value {
855
- def value
856
- args = c_boolean_spec.value
857
- args[:assumed_value] = boolean_value.value
858
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CBoolean.new(
859
- args)
860
- end
861
- }
862
- / c_boolean_spec '' {
863
- def value
864
- OpenEHR::AM::Archetype::ConstraintModel::Primitive::CBoolean.new(
865
- c_boolean_spec.value)
866
- end
867
- }
868
- end
869
-
870
- rule constraint_ref
871
- vltcr:V_LOCAL_TERM_CODE_REF '' {
872
- def value(node)
873
- OpenEHR::AM::Archetype::ConstraintModel::ConstraintRef.new(
874
- :path => node.path,
875
- :rm_type_name => 'ConstraintRef',
876
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(:upper => 1, :lower => 1),
877
- :reference => vltcr.value)
878
- end
879
- }
880
- end
881
-
882
- rule V_REGEXP
883
- (('=' / '!') '~')? (('/' ('\/' / !'/' .)* '/') / ('^' (!'^' .)* '^') ) {
884
- def value
885
- text_value
886
- end
887
- }
888
- end
889
-
890
- rule code_string
891
- NAMECHAR+ '' {
892
- def value
893
- text_value
894
- end
895
- }
896
- end
897
-
898
- rule code_string_list
899
- first:code_string more:(',' space code_string)+ space {
900
- def value
901
- codes.map {|c| c.value}
902
- end
903
-
904
- def codes
905
- [first] + more.elements.map {|e| e.code_string}
906
- end
907
- }
908
- end
909
-
910
- rule code_string_spec
911
- code_string_list '' {
912
- def value
913
- code_string_list.value
914
- end
915
- }
916
- / code_string '' {
917
- def value
918
- [code_string.value]
919
- end
920
- }
921
- end
922
-
923
- rule c_code_phrase
924
- ti:V_TERM_CODE code_string_spec ';' space code_string ']' space {
925
- def value(node)
926
- ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
927
- :rm_type_name => 'CodePhrase',
928
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
929
- :upper => 1, :lower => 1),
930
- :terminology_id => ti.value, :code_list => code_string_spec.value,
931
- :assumed_value => code_string.value,
932
- :path => node.path)
933
- end
934
- }
935
- / ti:V_TERM_CODE code_string_spec ']' space {
936
- def value(node)
937
- ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
938
- :rm_type_name => 'CodePhrase',
939
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
940
- :upper => 1, :lower => 1),
941
- :terminology_id => ti.value, :code_list => code_string_spec.value,
942
- :path => node.path)
943
- end
944
- }
945
- / ti:V_TERM_CODE ']' space {
946
- def value(node)
947
- ::OpenEHR::AM::OpenEHRProfile::DataTypes::Text::CCodePhrase.new(
948
- :rm_type_name => 'CodePhrase',
949
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
950
- :upper => 1, :lower => 1),
951
- :terminology_id => ti.value, :code_list => [], :path => node.path)
952
- end
953
- }
954
- end
955
-
956
- rule SYM_C_DV_ORDINAL
957
- 'C_DV_ORDINAL' space
958
- end
959
-
960
- rule c_ordinal
961
- c_ordinal_spec ';' space integer_value space {
962
- def value
963
- args = c_ordinal_spec.value
964
- args[:assumed_value] = integer_value.value
965
- args
966
- end
967
- }
968
- / c_ordinal_spec space '' {
969
- def value
970
- c_ordinal_spec.value
971
- end
972
- }
973
- / SYM_C_DV_ORDINAL SYM_LT white_space SYM_GT space {
974
- def value
975
- {:list => nil}
976
- end
977
- }
978
- end
979
-
980
- rule c_ordinal_spec
981
- ordinal_list '' {
982
- def value
983
- {:list => ordinal_list.value}
984
- end
985
- }
986
- / ordinal '' {
987
- def value
988
- {:list => [ordinal.value]}
989
- end
990
- }
991
- end
992
-
993
- rule ordinal_list
994
- first:ordinal more:(',' space ordinal)+ {
995
- def value
996
- ordinals.map {|o| o.value}
997
- end
998
-
999
- def ordinals
1000
- [first] + more.elements.map {|e| e.ordinal}
1001
- end
1002
- }
1003
- end
1004
-
1005
- rule ordinal
1006
- integer_value SYM_INTERVAL_DELIM vqtc:V_QUALIFIED_TERM_CODE_REF !SYM_INTERVAL_DELIM '' {
1007
- def value
1008
- symbol = ::OpenEHR::RM::DataTypes::Text::DvCodedText.new(
1009
- :value => vqtc.text_value, :defining_code => vqtc.value)
1010
- ::OpenEHR::RM::DataTypes::Quantity::DvOrdinal.new(
1011
- :value => integer_value.value,
1012
- :symbol => symbol)
1013
- end
1014
- }
1015
- end
1016
-
1017
- rule c_dv_quantity
1018
- SYM_C_DV_QUANTITY SYM_START_DBLOCK
1019
- prop:property? ql:quantity_list? aqv:assumed_quantity_value?
1020
- SYM_END_DBLOCK <CDvQuantityItems>
1021
- / SYM_C_DV_QUANTITY SYM_START_DBLOCK
1022
- prop:property? aqv:assumed_quantity_value? ql:quantity_list?
1023
- SYM_END_DBLOCK <CDvQuantityItems>
1024
- / SYM_C_DV_QUANTITY SYM_START_DBLOCK
1025
- aqv:assumed_quantity_value? prop:property? ql:quantity_list?
1026
- SYM_END_DBLOCK <CDvQuantityItems>
1027
- / SYM_C_DV_QUANTITY SYM_START_DBLOCK
1028
- aqv:assumed_quantity_value? ql:quantity_list? prop:property?
1029
- SYM_END_DBLOCK <CDvQuantityItems>
1030
- / SYM_C_DV_QUANTITY SYM_START_DBLOCK
1031
- ql:quantity_list? aqv:assumed_quantity_value? prop:property?
1032
- SYM_END_DBLOCK <CDvQuantityItems>
1033
- / SYM_C_DV_QUANTITY SYM_START_DBLOCK
1034
- ql:quantity_list? prop:property? aqv:assumed_quantity_value?
1035
- SYM_END_DBLOCK <CDvQuantityItems>
1036
- end
1037
-
1038
- rule SYM_C_DV_QUANTITY
1039
- 'C_DV_QUANTITY' space
1040
- end
1041
-
1042
- rule property
1043
- SYM_PROPERTY SYM_EQ SYM_START_DBLOCK
1044
- prop:V_QUALIFIED_TERM_CODE_REF SYM_END_DBLOCK {
1045
- def value
1046
- prop.value
1047
- end
1048
- }
1049
- end
1050
-
1051
- rule SYM_PROPERTY
1052
- 'property' space
1053
- end
1054
-
1055
- rule quantity_list
1056
- SYM_QUANTITY_LIST SYM_EQ SYM_START_DBLOCK
1057
- c_quantity_items SYM_END_DBLOCK {
1058
- def value(node)
1059
- c_quantity_items.value(node)
1060
- end
1061
- }
1062
- end
1063
-
1064
- rule assumed_quantity_value
1065
- SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1066
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1067
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1068
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1069
- SYM_END_DBLOCK <AssumedValueItems>
1070
- / SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1071
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1072
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1073
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1074
- SYM_END_DBLOCK <AssumedValueItems>
1075
- / SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1076
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1077
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1078
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1079
- SYM_END_DBLOCK <AssumedValueItems>
1080
- / SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1081
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1082
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1083
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1084
- SYM_END_DBLOCK <AssumedValueItems>
1085
- / SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1086
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1087
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1088
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1089
- SYM_END_DBLOCK <AssumedValueItems>
1090
- / SYM_ASSUMED_VALUE SYM_EQ SYM_START_DBLOCK
1091
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK val:real_value SYM_END_DBLOCK)?
1092
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1093
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK val:integer_value SYM_END_DBLOCK)?
1094
- SYM_END_DBLOCK <AssumedValueItems>
1095
- end
1096
-
1097
- rule SYM_QUANTITY_LIST
1098
- 'list' space
1099
- end
1100
-
1101
- rule c_quantity_items
1102
- c_quantity_item more_cdv:(c_quantity_item white_space)* {
1103
- def value(node)
1104
- quantities.map {|q| q.value(node)}
1105
- end
1106
-
1107
- def quantities
1108
- [c_quantity_item] + more_cdv.elements.map {|e| e.c_quantity_item}
1109
- end
1110
- }
1111
- end
1112
-
1113
- rule c_quantity_item
1114
- '[' V_STRING ']' white_space SYM_EQ SYM_START_DBLOCK
1115
- SYM_UNITS SYM_EQ SYM_START_DBLOCK units:V_STRING SYM_END_DBLOCK
1116
- mag:(SYM_MAGNITUDE SYM_EQ SYM_START_DBLOCK int:real_interval_value SYM_END_DBLOCK)?
1117
- prec:(SYM_PRECISION SYM_EQ SYM_START_DBLOCK int:integer_interval_value SYM_END_DBLOCK)?
1118
- SYM_END_DBLOCK {
1119
- def value(node)
1120
- magnitude, precision = nil
1121
- magnitude = mag.int.value unless mag.empty?
1122
- precision = prec.int.value unless prec.empty?
1123
- OpenEHR::AM::OpenEHRProfile::DataTypes::Quantity::CQuantityItem.new(
1124
- :path => node.path, :rm_type_name => 'DvQuantity',
1125
- :occurrences => OpenEHR::AssumedLibraryTypes::Interval.new(
1126
- :upper => 1, :lower => 1),
1127
- :units => units.value,
1128
- :magnitude => magnitude, :precision => precision)
1129
- end
1130
- }
1131
- end
1132
-
1133
- rule SYM_UNITS
1134
- 'units' space
1135
- end
1136
-
1137
- rule SYM_MAGNITUDE
1138
- 'magnitude' space
1139
- end
1140
-
1141
- rule SYM_PRECISION
1142
- 'precision' space
1143
- end
1144
-
1145
- rule SYM_ASSUMED_VALUE
1146
- 'assumed_value' space
1147
- end
1148
-
1149
- rule V_C_DOMAIN_TYPE
1150
- '('? [A-Z] IDCHAR* ')'? [ \n]* '<' [^>]* '>'
1151
- end
1152
-
1153
- # assertion block
1154
-
1155
- rule V_ASSERTION_TEXT
1156
- assertions '' {
1157
- def value
1158
- assertions.value
1159
- end
1160
- }
1161
- end
1162
-
1163
- rule assertions
1164
- assertion more_a:(assertion '')* {
1165
- def value
1166
- assertions.map {|a| a.value}
1167
- end
1168
-
1169
- def assertions
1170
- [assertion] + more_a.elements.map {|a| a.assertion}
1171
- end
1172
- }
1173
- end
1174
-
1175
- rule assertion
1176
- id:(any_identifier ':')? boolean_expression space {
1177
- def value
1178
- if (id && !id.empty?)
1179
- OpenEHR::AM::Archetype::Assertion::Assertion.new(
1180
- :tag => id.value, :expression => boolean_expression.value,
1181
- :string_expression => id.text_value + boolean_expression.text_value)
1182
- else
1183
- OpenEHR::AM::Archetype::Assertion::Assertion.new(
1184
- :expression => boolean_expression.value,
1185
- :string_expression => boolean_expression.text_value)
1186
- end
1187
- end
1188
- }
1189
- end
1190
-
1191
- rule boolean_expression
1192
- boolean_node '' {
1193
- def value
1194
- boolean_node.value
1195
- end
1196
- }
1197
- / boolean_leaf '' {
1198
- def value
1199
- boolean_leaf.value
1200
- end
1201
- }
1202
- end
1203
-
1204
- rule boolean_node
1205
- SYM_EXISTS absolute_path {
1206
- def value
1207
- item = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
1208
- :type => 'String',
1209
- :item => absolute_path.value,
1210
- :reference_type => 'CONSTANT')
1211
- OpenEHR::AM::Archetype::Assertion::ExprUnaryOperator.new(
1212
- :type => 'Boolean',
1213
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EXISTS,
1214
- :operand => item,
1215
- :precedence_overridden => false)
1216
- end
1217
- }
1218
- / relative_path white_space SYM_MATCHES SYM_START_CBLOCK c_primitive SYM_END_CBLOCK {
1219
- def value
1220
- left_op = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
1221
- :type => 'String',
1222
- :item => relative_path.value,
1223
- :reference_type => 'Constant')
1224
- right_op = OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
1225
- :item => c_primitive.value,
1226
- :type => c_primitive.value.type,
1227
- :reference_type => 'Constant')
1228
- op = OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MATCHES
1229
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1230
- :type => 'Boolean',
1231
- :operator => op,
1232
- :right_operand => right_op,
1233
- :left_operand => left_op,
1234
- :reference_type => 'Constraint')
1235
- end
1236
- }
1237
- / SYM_NOT boolean_leaf '' {
1238
- def value
1239
- OpenEHR::AM::Archetype::Assertion::ExprUnaryOperator.new(
1240
- :type => 'Boolean',
1241
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_NOT,
1242
- :operand => boolean_leaf.value,
1243
- :precedence_overridden => false)
1244
- end
1245
- }
1246
- / arithmetic_leaf SYM_EQ arithmetic_expression {
1247
- def value
1248
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1249
- :type => 'Boolean',
1250
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EQ,
1251
- :left_operand => arithmetic_leaf.value,
1252
- :right_operand => arithmetic_expression.value,
1253
- :reference_type => 'Constraint')
1254
- end
1255
- }
1256
- / arithmetic_leaf SYM_NE arithmetic_expression {
1257
- def value
1258
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1259
- :type => 'Boolean',
1260
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_NE,
1261
- :left_operand => arithmetic_leaf.value,
1262
- :right_operand => arithmetic_expression.value,
1263
- :reference_type => 'Constraint')
1264
- end
1265
- }
1266
- / arithmetic_leaf SYM_LT arithmetic_expression {
1267
- def value
1268
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1269
- :type => 'Boolean',
1270
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_LT,
1271
- :left_operand => arithmetic_leaf.value,
1272
- :right_operand => arithmetic_expression.value,
1273
- :reference_type => 'Constraint')
1274
- end
1275
- }
1276
- / arithmetic_leaf SYM_GT arithmetic_expression {
1277
- def value
1278
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1279
- :type => 'Boolean',
1280
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_GT,
1281
- :left_operand => arithmetic_leaf.value,
1282
- :right_operand => arithmetic_expression.value,
1283
- :reference_type => 'Constraint')
1284
- end
1285
- }
1286
- / arithmetic_leaf SYM_LE arithmetic_expression {
1287
- def value
1288
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1289
- :type => 'Boolean',
1290
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_LE,
1291
- :left_operand => arithmetic_leaf.value,
1292
- :right_operand => arithmetic_expression.value,
1293
- :reference_type => 'Constraint')
1294
- end
1295
- }
1296
- / arithmetic_leaf SYM_GE arithmetic_expression {
1297
- def value
1298
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1299
- :type => 'Boolean',
1300
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_GE,
1301
- :left_operand => arithmetic_leaf.value,
1302
- :right_operand => arithmetic_expression.value,
1303
- :reference_type => 'Constraint')
1304
- end
1305
- }
1306
- / boolean_leaf SYM_AND boolean_expression {
1307
- def value
1308
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1309
- :type => 'Boolean',
1310
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_AND,
1311
- :left_operand => boolean_leaf.value,
1312
- :right_operand => boolean_expression.value,
1313
- :reference_type => 'Constraint')
1314
- end
1315
- }
1316
- / boolean_leaf SYM_OR boolean_expression {
1317
- def value
1318
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1319
- :type => 'Boolean',
1320
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_OR,
1321
- :left_operand => boolean_leaf.value,
1322
- :right_operand => boolean_expression.value,
1323
- :reference_type => 'Constraint')
1324
- end
1325
- }
1326
- / boolean_leaf SYM_XOR boolean_expression {
1327
- def value
1328
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1329
- :type => 'Boolean',
1330
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_XOR,
1331
- :left_operand => boolean_leaf.value,
1332
- :right_operand => boolean_expression.value,
1333
- :reference_type => 'Constraint')
1334
- end
1335
- }
1336
- / boolean_leaf SYM_IMPLIES boolean_expression {
1337
- def value
1338
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1339
- :type => 'Boolean',
1340
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_IMPLIES,
1341
- :left_operand => boolean_leaf.value,
1342
- :right_operand => boolean_expression.value,
1343
- :reference_type => 'Constraint')
1344
- end
1345
- }
1346
- end
1347
-
1348
- rule boolean_leaf
1349
- '(' boolean_expression ')' {
1350
- def value
1351
- boolean_expression.value
1352
- end
1353
- }
1354
- / SYM_TRUE '' {
1355
- def value
1356
- OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
1357
- :type => 'Boolean',
1358
- :item => true,
1359
- :reference_type => 'CONSTANT')
1360
- end
1361
- }
1362
- / SYM_FALSE '' {
1363
- def value
1364
- OpenEHR::AM::Archetype::Assertion::ExprLeaf.new(
1365
- :type => 'Boolean',
1366
- :item => false,
1367
- :reference_type => 'CONSTANT')
1368
- end
1369
- }
1370
- end
1371
-
1372
- rule arithmetic_expression
1373
- arithmetic_node '' {
1374
- def value
1375
- arithmetic_node.value
1376
- end
1377
- }
1378
- / arithmetic_leaf '' {
1379
- def value
1380
- arithmetic_leaf.value
1381
- end
1382
- }
1383
- end
1384
-
1385
- rule arithmetic_node
1386
- arithmetic_leaf '+' arithmetic_expression {
1387
- def value
1388
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1389
- :type => 'Boolean',
1390
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_PLUS,
1391
- :left_operand => arithmetic_leaf.value,
1392
- :right_operand => arithmetic_expression.value,
1393
- :reference_type => 'Constraint')
1394
- end
1395
- }
1396
- / arithmetic_leaf '-' arithmetic_expression {
1397
- def value
1398
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1399
- :type => 'Boolean',
1400
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MINUS,
1401
- :left_operand => arithmetic_leaf.value,
1402
- :right_operand => arithmetic_expression.value,
1403
- :reference_type => 'Constraint')
1404
- end
1405
- }
1406
- / arithmetic_leaf '*' arithmetic_expression {
1407
- def value
1408
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1409
- :type => 'Boolean',
1410
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_MULTIPLY,
1411
- :left_operand => arithmetic_leaf.value,
1412
- :right_operand => arithmetic_expression.value,
1413
- :reference_type => 'Constraint')
1414
- end
1415
- }
1416
- / arithmetic_leaf '/' arithmetic_expression {
1417
- def value
1418
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1419
- :type => 'Boolean',
1420
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_DIVIDE,
1421
- :left_operand => arithmetic_leaf.value,
1422
- :right_operand => arithmetic_expression.value,
1423
- :reference_type => 'Constraint')
1424
- end
1425
- }
1426
- / arithmetic_leaf '^' arithmetic_expression {
1427
- def value
1428
- OpenEHR::AM::Archetype::Assertion::ExprBinaryOperator.new(
1429
- :type => 'Boolean',
1430
- :operator => OpenEHR::AM::Archetype::Assertion::OperatorKind::OP_EXP,
1431
- :left_operand => arithmetic_leaf.value,
1432
- :right_operand => arithmetic_expression.value,
1433
- :reference_type => 'Constraint')
1434
- end
1435
- }
1436
- end
1437
-
1438
- rule arithmetic_leaf
1439
- '(' arithmetic_expression ')' space {
1440
- def value
1441
- arithmetic_expression.value
1442
- end
1443
- }
1444
- / integer_value '' {
1445
- def value
1446
- OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
1447
- :type => 'Integer',
1448
- :item => integer_value.value,
1449
- :reference_type => 'CONSTANT')
1450
- end
1451
- }
1452
- / real_value '' {
1453
- def value
1454
- OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
1455
- :type => 'Real',
1456
- :item => real_value.value,
1457
- :reference_type => 'CONSTANT')
1458
- end
1459
- }
1460
- / absolute_path space {
1461
- def value
1462
- OpenEHR::AM::Archetype::ConstraintModel::ExprLeaf.new(
1463
- :type => 'String',
1464
- :item => absolute_path.value,
1465
- :reference_type => 'CONSTANT')
1466
-
1467
- end
1468
- }
1469
- end
1470
-
1471
- # path block
1472
- rule object_path
1473
- movable_path '' {
1474
- def value
1475
- movable_path.value
1476
- end
1477
- }
1478
- / absolute_path '' {
1479
- def value
1480
- absolute_path.value
1481
- end
1482
- }
1483
- / relative_path '' {
1484
- def value
1485
- relative_path.value
1486
- end
1487
- }
1488
- end
1489
-
1490
- rule movable_path
1491
- SYM_MOVABLE_LEADER relative_path '' {
1492
- def value
1493
- text_value
1494
- end
1495
- }
1496
- end
1497
-
1498
- rule absolute_path
1499
- '/' relative_path? '' {
1500
- def value
1501
- text_value
1502
- end
1503
- }
1504
- end
1505
-
1506
- rule relative_path
1507
- path_segment ('/' path_segment)* '' {
1508
- def value
1509
- text_value
1510
- end
1511
- }
1512
- end
1513
-
1514
- rule path_segment
1515
- V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF? '' {
1516
- def value
1517
- text_value
1518
- end
1519
- }
1520
- end
1521
-
1522
- rule SYM_MOVABLE_LEADER
1523
- '//'
1524
- end
1525
- end
1526
- end
1527
- end