open_ehr 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/History.txt +3 -0
  2. data/README.rdoc +3 -3
  3. data/VERSION +1 -1
  4. data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +61 -34
  5. data/lib/open_ehr/am/openehr_profile/data_types/basic.rb +27 -0
  6. data/lib/open_ehr/am/openehr_profile/data_types/quantity.rb +18 -0
  7. data/lib/open_ehr/am/openehr_profile/data_types/text.rb +22 -0
  8. data/lib/open_ehr/am/openehr_profile/data_types.rb +12 -0
  9. data/lib/open_ehr/am/openehr_profile.rb +10 -0
  10. data/lib/open_ehr/am.rb +2 -0
  11. data/lib/open_ehr/assumed_library_types.rb +30 -25
  12. data/lib/open_ehr/parser/cadl_grammar.tt +479 -163
  13. data/lib/open_ehr/parser/shared_token_grammar.tt +63 -43
  14. data/lib/open_ehr/rm/data_types/quantity/date_time.rb +27 -14
  15. data/lib/open_ehr.rb +1 -1
  16. data/open_ehr.gemspec +17 -6
  17. data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +4 -0
  18. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +20 -48
  19. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +33 -8
  20. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +19 -52
  21. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +2 -3
  22. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +27 -7
  23. data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +0 -1
  24. data/spec/lib/open_ehr/am/openehr_profile/data_types/text/c_code_phrase_spec.rb +35 -0
  25. data/spec/lib/open_ehr/parser/adl14/adl-test-SOME_TYPE.generic_type_basic.draft.adl +1 -1
  26. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test.adl +1 -1
  27. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test2.adl +1 -1
  28. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.basic_types.test.adl +3 -3
  29. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_code_phrase.test.adl +1 -1
  30. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.datetime.test.adl +1 -1
  31. data/spec/lib/open_ehr/parser/adl14/adl-test-entry.durations.test.adl +2 -4
  32. data/spec/lib/open_ehr/parser/adl_archetype_internal_ref_with_generics_spec.rb +6 -6
  33. data/spec/lib/open_ehr/parser/adl_archetype_slot_cluster_spec.rb +101 -0
  34. data/spec/lib/open_ehr/parser/adl_archetype_slot_spec.rb +193 -0
  35. data/spec/lib/open_ehr/parser/adl_archetype_uncommon_term_keys_spec.rb +25 -0
  36. data/spec/lib/open_ehr/parser/adl_parser_spec.rb +6 -6
  37. data/spec/lib/open_ehr/parser/basic_generic_type_spec.rb +18 -0
  38. data/spec/lib/open_ehr/parser/basic_type_spec.rb +2922 -0
  39. data/spec/lib/open_ehr/parser/code_phrase_spec.rb +91 -0
  40. data/spec/lib/open_ehr/parser/date_time_spec.rb +1953 -0
  41. data/spec/lib/open_ehr/parser/duration_spec.rb +475 -0
  42. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_duration_spec.rb +44 -0
  43. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +6 -2
  44. data/spec/spec_helper.rb +3 -2
  45. metadata +52 -41
  46. data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +0 -21
  47. data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +0 -29
  48. data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +0 -19
  49. data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +0 -15
@@ -0,0 +1,475 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require File.dirname(__FILE__) + '/parser_spec_helper'
3
+
4
+ # ticket 172
5
+
6
+ describe ADLParser do
7
+ context 'CDuration type' do
8
+ before(:all) do
9
+ archetype = adl14_archetype('adl-test-entry.durations.test.adl')
10
+ @attributes = archetype.definition.attributes
11
+ end
12
+
13
+ def attr(index)
14
+ return @const.children[index-1].attributes[0].children[0]
15
+ end
16
+
17
+ context 'Duration without assumed value' do
18
+ before(:all) do
19
+ @const = @attributes[0].children[0].attributes[0]
20
+ end
21
+
22
+ context '1st attribute PT0s' do
23
+ before(:all) do
24
+ @at = attr(1)
25
+ end
26
+
27
+ it '1st item of the list is PT0s' do
28
+ @at.list[0].value.should == 'PT0s'
29
+ end
30
+
31
+ it 'does not have assumed_value' do
32
+ @at.should_not have_assumed_value
33
+ end
34
+ end
35
+
36
+ context '2nd attribute P1d' do
37
+ before(:all) do
38
+ @at = attr(2)
39
+ end
40
+
41
+ it '1st item of the list is P1d' do
42
+ @at.list[0].value.should == 'P1d'
43
+ end
44
+
45
+ it 'day is 1' do
46
+ @at.list[0].days.should == 1
47
+ end
48
+
49
+ it 'months is 0' do
50
+ @at.list[0].months.should be 0
51
+ end
52
+
53
+ it 'does not have assumed_value' do
54
+ @at.should_not have_assumed_value
55
+ end
56
+ end
57
+
58
+ context '3rd attribute PT2h5m0s' do
59
+ before(:all) do
60
+ @at = attr(3)
61
+ end
62
+
63
+ it '1st item of the list is PT2h5m0s' do
64
+ @at.list[0].value.should == 'PT2h5m0s'
65
+ end
66
+
67
+ it 'hours should 2' do
68
+ @at.list[0].hours.should be 2
69
+ end
70
+ end
71
+
72
+ context '4th attribute |PT1h55m0s..PT2h5m0s|' do
73
+ before(:all) do
74
+ @at = attr(4)
75
+ end
76
+
77
+ it 'lower range is PT1h55m0s' do
78
+ @at.range.lower.value.should == 'PT1h55m0s'
79
+ end
80
+
81
+ it 'upper range is PT2h5m0s' do
82
+ @at.range.upper.value.should == 'PT2h5m0s'
83
+ end
84
+
85
+ it 'is upper included' do
86
+ @at.range.should be_upper_included
87
+ end
88
+
89
+ it 'is lower included' do
90
+ @at.range.should be_lower_included
91
+ end
92
+ end
93
+
94
+ context '5th attribute |<=PT1h|' do
95
+ before(:all) do
96
+ @at = attr(5)
97
+ end
98
+
99
+ it 'upper range is PT1h' do
100
+ @at.range.upper.value.should == 'PT1h'
101
+ end
102
+
103
+ it 'is upper included' do
104
+ @at.range.should be_upper_included
105
+ end
106
+
107
+ it 'is lower unbounded' do
108
+ @at.range.should be_lower_unbounded
109
+ end
110
+ end
111
+
112
+ context '6th attribute P1DT1H2M3S' do
113
+ before(:all) do
114
+ @at = attr(6)
115
+ end
116
+
117
+ it '1st item of the list is P1DT1H2M3S' do
118
+ @at.list[0].value.should == 'P1DT1H2M3S'
119
+ end
120
+
121
+ it 'day is 1' do
122
+ @at.list[0].days.should == 1
123
+ end
124
+
125
+ it 'seconds is 3' do
126
+ @at.list[0].seconds.should be 3
127
+ end
128
+ end
129
+
130
+ context '7th attribute P1W2DT1H2M3S' do
131
+ before(:all) do
132
+ @at = attr(7)
133
+ end
134
+
135
+ it '1st item of the list is P1W2DT1H2M3S' do
136
+ @at.list[0].value.should == 'P1W2DT1H2M3S'
137
+ end
138
+
139
+ it 'weeks is 1' do
140
+ @at.list[0].weeks.should be 1
141
+ end
142
+
143
+ it 'minutes is 2' do
144
+ @at.list[0].minutes.should be 2
145
+ end
146
+ end
147
+
148
+ context '8th attribute P3M1W2DT1H2M3S' do
149
+ before(:all) do
150
+ @at = attr(8)
151
+ end
152
+
153
+ it '1st item of the list is P3M1W2DT1H2M3S' do
154
+ @at.list[0].value.should == 'P3M1W2DT1H2M3S'
155
+ end
156
+
157
+ it 'months are 3' do
158
+ @at.list[0].months.should be 3
159
+ end
160
+
161
+ it 'hours are 1' do
162
+ @at.list[0].hours.should be 1
163
+ end
164
+ end
165
+
166
+ context '9th attribute PDTH' do
167
+ before(:all) do
168
+ @at = attr(9)
169
+ end
170
+
171
+ it 'pattern is PDTH' do
172
+ @at.pattern.should == 'PDTH'
173
+ end
174
+ end
175
+
176
+ context '10th attribute |PT10M|' do
177
+ before(:all) do
178
+ @at = attr(10)
179
+ end
180
+
181
+ it 'upper range is PT10M' do
182
+ @at.range.upper.value.should == 'PT10M'
183
+ end
184
+
185
+ it 'lower range is PT10M' do
186
+ @at.range.lower.value.should == 'PT10M'
187
+ end
188
+
189
+ it 'lower range minutes are 10' do
190
+ @at.range.lower.minutes.should be 10
191
+ end
192
+
193
+ it 'lower range months are 0' do
194
+ @at.range.lower.months.should be 0
195
+ end
196
+
197
+ it 'is upper included' do
198
+ @at.range.should be_upper_included
199
+ end
200
+
201
+ it 'is lower included' do
202
+ @at.range.should be_lower_included
203
+ end
204
+ end
205
+
206
+ context '11th attribute PYMWDTHMS' do
207
+ before(:all) do
208
+ @at = attr(11)
209
+ end
210
+
211
+ it 'pattern is PYMWDTHMS' do
212
+ @at.pattern.should == 'PYMWDTHMS'
213
+ end
214
+ end
215
+
216
+ # at1011 is duplicated
217
+
218
+ context '12th attribute |PT0.004s|' do
219
+ before(:all) do
220
+ @at = attr(12)
221
+ end
222
+
223
+ it 'upper range is PT0.004s' do
224
+ @at.range.upper.value.should == 'PT0.004s'
225
+ end
226
+
227
+ it 'lower range is PT0.004s' do
228
+ @at.range.lower.value.should == 'PT0.004s'
229
+ end
230
+
231
+ it 'lower range fractional second are 0.004' do
232
+ @at.range.lower.fractional_second.should == 0.004
233
+ end
234
+
235
+ it 'lower range fractional second are 0.004' do
236
+ @at.range.lower.fractional_second.should == 0.004
237
+ end
238
+
239
+ it 'is upper included' do
240
+ @at.range.should be_upper_included
241
+ end
242
+
243
+ it 'is lower included' do
244
+ @at.range.should be_lower_included
245
+ end
246
+ end
247
+
248
+ context '13th attribute |PT10.01s|' do
249
+ before(:all) do
250
+ @at = attr(13)
251
+ end
252
+
253
+ it 'upper range is PT10.01s' do
254
+ @at.range.upper.value.should == 'PT10.01s'
255
+ end
256
+
257
+ it 'lower range is PT10.01s' do
258
+ @at.range.lower.value.should == 'PT10.01s'
259
+ end
260
+
261
+ it 'lower range seconds are 10' do
262
+ @at.range.lower.seconds.should == 10
263
+ end
264
+
265
+ it 'lower range fractionsl second are 0.01' do
266
+ @at.range.lower.fractional_second.should == 0.01
267
+ end
268
+
269
+ it 'is upper included' do
270
+ @at.range.should be_upper_included
271
+ end
272
+
273
+ it 'is lower included' do
274
+ @at.range.should be_lower_included
275
+ end
276
+ end
277
+
278
+ context '14th attribute |PT1.1s|' do
279
+ before(:all) do
280
+ @at = attr(14)
281
+ end
282
+
283
+ it 'upper range is PT1.1s' do
284
+ @at.range.upper.value.should == 'PT1.1s'
285
+ end
286
+
287
+ it 'lower range is PT1.1s' do
288
+ @at.range.lower.value.should == 'PT1.1s'
289
+ end
290
+
291
+ it 'upper range seconds are 1' do
292
+ @at.range.upper.seconds.should == 1
293
+ end
294
+
295
+ it 'upper range fractional second are 0.1' do
296
+ @at.range.upper.fractional_second.should == 0.1
297
+ end
298
+
299
+ it 'is upper included' do
300
+ @at.range.should be_upper_included
301
+ end
302
+
303
+ it 'is lower included' do
304
+ @at.range.should be_lower_included
305
+ end
306
+ end
307
+ end
308
+
309
+ context 'Duration with assumed value' do
310
+ before(:all) do
311
+ @const = @attributes[0].children[1].attributes[0]
312
+ end
313
+
314
+ context '1st attribute PT0s; P1d' do
315
+ before(:all) do
316
+ @at = attr(1)
317
+ end
318
+
319
+ it '1st item of the list is PT0s' do
320
+ @at.list[0].value.should == 'PT0s'
321
+ end
322
+
323
+ it 'has assumed_value' do
324
+ @at.should have_assumed_value
325
+ end
326
+
327
+ it 'assumed value is P1d' do
328
+ @at.assumed_value.value.should == 'P1d'
329
+ end
330
+ end
331
+
332
+ context '2nd attribute P1d; P1d' do
333
+ before(:all) do
334
+ @at = attr(2)
335
+ end
336
+
337
+ it '1st item of the list is P1d' do
338
+ @at.list[0].value.should == 'P1d'
339
+ end
340
+
341
+ it 'day is 1' do
342
+ @at.list[0].days.should == 1
343
+ end
344
+
345
+ it 'months is 0' do
346
+ @at.list[0].months.should be 0
347
+ end
348
+
349
+ it 'assumed value is P1d' do
350
+ @at.assumed_value.value.should == 'P1d'
351
+ end
352
+ end
353
+
354
+ context '3rd attribute PT2h5m0s; P1d' do
355
+ before(:all) do
356
+ @at = attr(3)
357
+ end
358
+
359
+ it '1st item of the list is PT2h5m0s' do
360
+ @at.list[0].value.should == 'PT2h5m0s'
361
+ end
362
+
363
+ it 'hours should 2' do
364
+ @at.list[0].hours.should be 2
365
+ end
366
+
367
+ it 'assumed value is P1d' do
368
+ @at.assumed_value.value.should == 'P1d'
369
+ end
370
+ end
371
+
372
+ context '4th attribute |PT1h55m0s..PT2h5m0s|; P1d' do
373
+ before(:all) do
374
+ @at = attr(4)
375
+ end
376
+
377
+ it 'lower range is PT1h55m0s' do
378
+ @at.range.lower.value.should == 'PT1h55m0s'
379
+ end
380
+
381
+ it 'upper range is PT2h5m0s' do
382
+ @at.range.upper.value.should == 'PT2h5m0s'
383
+ end
384
+
385
+ it 'is upper included' do
386
+ @at.range.should be_upper_included
387
+ end
388
+
389
+ it 'is lower included' do
390
+ @at.range.should be_lower_included
391
+ end
392
+
393
+ it 'assumed value is P1d' do
394
+ @at.assumed_value.value.should == 'P1d'
395
+ end
396
+ end
397
+
398
+ context '5th attribute |<=PT1h|; P1d' do
399
+ before(:all) do
400
+ @at = attr(5)
401
+ end
402
+
403
+ it 'upper range is PT1h' do
404
+ @at.range.upper.value.should == 'PT1h'
405
+ end
406
+
407
+ it 'is upper included' do
408
+ @at.range.should be_upper_included
409
+ end
410
+
411
+ it 'is lower unbounded' do
412
+ @at.range.should be_lower_unbounded
413
+ end
414
+
415
+ it 'assumed value is P1d' do
416
+ @at.assumed_value.value.should == 'P1d'
417
+ end
418
+ end
419
+
420
+ context '6th attribute PDTH; P1d' do
421
+ before(:all) do
422
+ @at = attr(6)
423
+ end
424
+
425
+ it 'pattern is PDTH' do
426
+ @at.pattern.should == 'PDTH'
427
+ end
428
+
429
+ it 'assumed value is P1d' do
430
+ @at.assumed_value.value.should == 'P1d'
431
+ end
432
+ end
433
+
434
+ # at1007 - at1009 was skiped
435
+
436
+ context '7th attribute |PT10M|; PT12M' do
437
+ before(:all) do
438
+ @at = attr(7)
439
+ end
440
+
441
+ it 'upper range is PT10M' do
442
+ @at.range.upper.value.should == 'PT10M'
443
+ end
444
+
445
+ it 'lower range is PT10M' do
446
+ @at.range.lower.value.should == 'PT10M'
447
+ end
448
+
449
+ it 'lower range minutes are 10' do
450
+ @at.range.lower.minutes.should be 10
451
+ end
452
+
453
+ it 'lower range months are 0' do
454
+ @at.range.lower.months.should be 0
455
+ end
456
+
457
+ it 'is upper included' do
458
+ @at.range.should be_upper_included
459
+ end
460
+
461
+ it 'is lower included' do
462
+ @at.range.should be_lower_included
463
+ end
464
+
465
+ it 'assumed value is PT12M' do
466
+ @at.assumed_value.value.should == 'PT12M'
467
+ end
468
+
469
+ it 'assumed value minutes is 12' do
470
+ @at.assumed_value.minutes.should be 12
471
+ end
472
+ end
473
+ end
474
+ end
475
+ end
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + '/../../../../../../spec_helper'
2
+ include OpenEHR::RM::DataTypes::Quantity::DateTime
3
+
4
+ describe DvDate do
5
+ before(:each) do
6
+ @dv_duration = DvDuration.new(:value => 'P1Y2M3W4DT5H6M7.7S')
7
+ end
8
+
9
+ it 'is an instance of DvDuration' do
10
+ @dv_duration.should be_an_instance_of DvDuration
11
+ end
12
+
13
+ it 'year is 1' do
14
+ @dv_duration.years.should be 1
15
+ end
16
+
17
+ it 'months is 2' do
18
+ @dv_duration.months.should be 2
19
+ end
20
+
21
+ it 'weeks is 3' do
22
+ @dv_duration.weeks.should be 3
23
+ end
24
+
25
+ it 'days is 4' do
26
+ @dv_duration.days.should be 4
27
+ end
28
+
29
+ it 'hours should be 5' do
30
+ @dv_duration.hours.should be 5
31
+ end
32
+
33
+ it 'minutes should be 6' do
34
+ @dv_duration.minutes.should be 6
35
+ end
36
+
37
+ it 'seconds should be 7' do
38
+ @dv_duration.seconds.should be 7
39
+ end
40
+
41
+ it 'fractional_second should be 0.7' do
42
+ @dv_duration.fractional_second.should == 0.7
43
+ end
44
+ end
@@ -3,7 +3,7 @@ include OpenEHR::RM::DataTypes::Quantity::DateTime
3
3
 
4
4
  describe DvTime do
5
5
  before(:each) do
6
- @dv_time = DvTime.new(:value => '11:17:30.2')
6
+ @dv_time = DvTime.new(:value => '11:17:30.2-0900')
7
7
  end
8
8
 
9
9
  it 'should be an instance of DvTime' do
@@ -26,10 +26,14 @@ describe DvTime do
26
26
  @dv_time.fractional_second.should == 0.2
27
27
  end
28
28
 
29
+ it 'timezone should be -0900' do
30
+ @dv_time.timezone.should == '-0900'
31
+ end
32
+
29
33
  it 'magnitude should 40650.2' do
30
34
  @dv_time.magnitude.should == 40650.2
31
35
  end
32
-
36
+
33
37
  it 'should be ' do
34
38
  diff_time = DvTime.new(:value => '15:36:48.05')
35
39
  @dv_time.diff(diff_time).value.should =='P0Y0M0W0DT4H19M17.85S'
data/spec/spec_helper.rb CHANGED
@@ -53,5 +53,6 @@ rescue LoadError
53
53
  require 'rspec'
54
54
  end
55
55
 
56
- $:.unshift(File.dirname(__FILE__) + '/../lib')
57
- require 'open_ehr'
56
+ #$:.unshift(File.dirname(__FILE__) + '/../lib')
57
+ $:.unshift(File.dirname(__FILE__) + '/..')
58
+ require 'lib/open_ehr'