open_ehr 0.9.4 → 0.9.5
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.
- data/History.txt +3 -0
- data/README.rdoc +3 -3
- data/VERSION +1 -1
- data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +61 -34
- data/lib/open_ehr/am/openehr_profile/data_types/basic.rb +27 -0
- data/lib/open_ehr/am/openehr_profile/data_types/quantity.rb +18 -0
- data/lib/open_ehr/am/openehr_profile/data_types/text.rb +22 -0
- data/lib/open_ehr/am/openehr_profile/data_types.rb +12 -0
- data/lib/open_ehr/am/openehr_profile.rb +10 -0
- data/lib/open_ehr/am.rb +2 -0
- data/lib/open_ehr/assumed_library_types.rb +30 -25
- data/lib/open_ehr/parser/cadl_grammar.tt +479 -163
- data/lib/open_ehr/parser/shared_token_grammar.tt +63 -43
- data/lib/open_ehr/rm/data_types/quantity/date_time.rb +27 -14
- data/lib/open_ehr.rb +1 -1
- data/open_ehr.gemspec +17 -6
- data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +4 -0
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +20 -48
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +33 -8
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +19 -52
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +2 -3
- data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +27 -7
- data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +0 -1
- data/spec/lib/open_ehr/am/openehr_profile/data_types/text/c_code_phrase_spec.rb +35 -0
- data/spec/lib/open_ehr/parser/adl14/adl-test-SOME_TYPE.generic_type_basic.draft.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.archetype_slot.test2.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.basic_types.test.adl +3 -3
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.c_code_phrase.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.datetime.test.adl +1 -1
- data/spec/lib/open_ehr/parser/adl14/adl-test-entry.durations.test.adl +2 -4
- data/spec/lib/open_ehr/parser/adl_archetype_internal_ref_with_generics_spec.rb +6 -6
- data/spec/lib/open_ehr/parser/adl_archetype_slot_cluster_spec.rb +101 -0
- data/spec/lib/open_ehr/parser/adl_archetype_slot_spec.rb +193 -0
- data/spec/lib/open_ehr/parser/adl_archetype_uncommon_term_keys_spec.rb +25 -0
- data/spec/lib/open_ehr/parser/adl_parser_spec.rb +6 -6
- data/spec/lib/open_ehr/parser/basic_generic_type_spec.rb +18 -0
- data/spec/lib/open_ehr/parser/basic_type_spec.rb +2922 -0
- data/spec/lib/open_ehr/parser/code_phrase_spec.rb +91 -0
- data/spec/lib/open_ehr/parser/date_time_spec.rb +1953 -0
- data/spec/lib/open_ehr/parser/duration_spec.rb +475 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_duration_spec.rb +44 -0
- data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +6 -2
- data/spec/spec_helper.rb +3 -2
- metadata +52 -41
- data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +0 -21
- data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +0 -29
- data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +0 -19
- data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +0 -15
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'open_ehr/assumed_library_types'
|
|
2
|
+
require 'open_ehr/rm/data_types/quantity'
|
|
2
3
|
|
|
3
4
|
module OpenEHR
|
|
4
5
|
module Parser
|
|
@@ -45,7 +46,7 @@ module OpenEHR
|
|
|
45
46
|
def value
|
|
46
47
|
true
|
|
47
48
|
end
|
|
48
|
-
|
|
49
|
+
}
|
|
49
50
|
/ SYM_FALSE {
|
|
50
51
|
def value
|
|
51
52
|
false
|
|
@@ -71,7 +72,7 @@ module OpenEHR
|
|
|
71
72
|
end
|
|
72
73
|
|
|
73
74
|
rule integer_value
|
|
74
|
-
|
|
75
|
+
[+-]? V_INTEGER '' {
|
|
75
76
|
def value
|
|
76
77
|
text_value.to_i
|
|
77
78
|
end
|
|
@@ -79,7 +80,7 @@ module OpenEHR
|
|
|
79
80
|
end
|
|
80
81
|
|
|
81
82
|
rule integer_list_value
|
|
82
|
-
integer_value (',' white_space
|
|
83
|
+
integer_value more_i:(',' white_space integer_value)+ {
|
|
83
84
|
def value
|
|
84
85
|
integers.map { |i| i.value }
|
|
85
86
|
end
|
|
@@ -152,10 +153,10 @@ module OpenEHR
|
|
|
152
153
|
:lower_included => false)
|
|
153
154
|
end
|
|
154
155
|
}
|
|
155
|
-
/ SYM_INTERVAL_DELIM SYM_GE integer_value SYM_INTERVAL_DELIM {
|
|
156
|
+
/ SYM_INTERVAL_DELIM SYM_GE iv:integer_value SYM_INTERVAL_DELIM {
|
|
156
157
|
def value
|
|
157
158
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
158
|
-
:lower =>
|
|
159
|
+
:lower => iv.value,
|
|
159
160
|
:upper_unbounded => true,
|
|
160
161
|
:lower_included => true)
|
|
161
162
|
end
|
|
@@ -164,7 +165,7 @@ module OpenEHR
|
|
|
164
165
|
def value
|
|
165
166
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
166
167
|
:lower => val.value,
|
|
167
|
-
:
|
|
168
|
+
:upper => val.value,
|
|
168
169
|
:upper_included => true,
|
|
169
170
|
:lower_included => true)
|
|
170
171
|
end
|
|
@@ -180,7 +181,7 @@ module OpenEHR
|
|
|
180
181
|
end
|
|
181
182
|
|
|
182
183
|
rule real_list_value
|
|
183
|
-
real_value
|
|
184
|
+
real_value more_i:(',' white_space real_value)* {
|
|
184
185
|
def value
|
|
185
186
|
reals.map { |i| i.value }
|
|
186
187
|
end
|
|
@@ -265,7 +266,7 @@ module OpenEHR
|
|
|
265
266
|
def value
|
|
266
267
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
267
268
|
:lower => val.value,
|
|
268
|
-
:
|
|
269
|
+
:upper => val.value,
|
|
269
270
|
:upper_included => true,
|
|
270
271
|
:lower_included => true)
|
|
271
272
|
end
|
|
@@ -323,9 +324,10 @@ module OpenEHR
|
|
|
323
324
|
end
|
|
324
325
|
|
|
325
326
|
rule date_value
|
|
326
|
-
V_ISO8601_EXTENDED_DATE '' {
|
|
327
|
+
ed:V_ISO8601_EXTENDED_DATE '' {
|
|
327
328
|
def value
|
|
328
|
-
OpenEHR::
|
|
329
|
+
::OpenEHR::RM::DataTypes::Quantity::DateTime::DvDate.new(
|
|
330
|
+
:value => ed.text_value)
|
|
329
331
|
end
|
|
330
332
|
}
|
|
331
333
|
end
|
|
@@ -340,7 +342,7 @@ module OpenEHR
|
|
|
340
342
|
[date_value] + more_dates.elements.map {|d| d.date_value}
|
|
341
343
|
end
|
|
342
344
|
}
|
|
343
|
-
/ date_value ',' SYM_LIST_CONTINUE {
|
|
345
|
+
/ date_value ',' white_space SYM_LIST_CONTINUE {
|
|
344
346
|
def value
|
|
345
347
|
[date_value.value]
|
|
346
348
|
end
|
|
@@ -404,10 +406,10 @@ module OpenEHR
|
|
|
404
406
|
:lower_included => false)
|
|
405
407
|
end
|
|
406
408
|
}
|
|
407
|
-
/ SYM_INTERVAL_DELIM SYM_GE date_value SYM_INTERVAL_DELIM {
|
|
409
|
+
/ SYM_INTERVAL_DELIM SYM_GE val:date_value SYM_INTERVAL_DELIM {
|
|
408
410
|
def value
|
|
409
411
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
410
|
-
:lower =>
|
|
412
|
+
:lower => val.value,
|
|
411
413
|
:upper_unbounded => true,
|
|
412
414
|
:lower_included => true)
|
|
413
415
|
end
|
|
@@ -416,7 +418,7 @@ module OpenEHR
|
|
|
416
418
|
def value
|
|
417
419
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
418
420
|
:lower => val.value,
|
|
419
|
-
:
|
|
421
|
+
:upper => val.value,
|
|
420
422
|
:upper_included => true,
|
|
421
423
|
:lower_included => true)
|
|
422
424
|
end
|
|
@@ -424,15 +426,16 @@ module OpenEHR
|
|
|
424
426
|
end
|
|
425
427
|
|
|
426
428
|
rule time_value
|
|
427
|
-
V_ISO8601_EXTENDED_TIME '' {
|
|
429
|
+
ti:V_ISO8601_EXTENDED_TIME '' {
|
|
428
430
|
def value
|
|
429
|
-
OpenEHR::
|
|
431
|
+
::OpenEHR::RM::DataTypes::Quantity::DateTime::DvTime.new(
|
|
432
|
+
:value => ti.text_value)
|
|
430
433
|
end
|
|
431
434
|
}
|
|
432
435
|
end
|
|
433
436
|
|
|
434
437
|
rule time_list_value
|
|
435
|
-
time_value more_t:(',' time_value)+ {
|
|
438
|
+
time_value more_t:(',' white_space time_value)+ {
|
|
436
439
|
def value
|
|
437
440
|
times.map {|t| t.value}
|
|
438
441
|
end
|
|
@@ -441,7 +444,7 @@ module OpenEHR
|
|
|
441
444
|
[time_value] + more_t.elements.map {|t| t.time_value}
|
|
442
445
|
end
|
|
443
446
|
}
|
|
444
|
-
/ time_value ',' SYM_LIST_CONTINUE {
|
|
447
|
+
/ time_value ',' white_space SYM_LIST_CONTINUE {
|
|
445
448
|
def value
|
|
446
449
|
[time_value.value]
|
|
447
450
|
end
|
|
@@ -505,10 +508,10 @@ module OpenEHR
|
|
|
505
508
|
:lower_included => false)
|
|
506
509
|
end
|
|
507
510
|
}
|
|
508
|
-
/ SYM_INTERVAL_DELIM SYM_GE time_value SYM_INTERVAL_DELIM {
|
|
511
|
+
/ SYM_INTERVAL_DELIM SYM_GE tv:time_value SYM_INTERVAL_DELIM {
|
|
509
512
|
def value
|
|
510
513
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
511
|
-
:lower =>
|
|
514
|
+
:lower => tv.value,
|
|
512
515
|
:upper_unbounded => true,
|
|
513
516
|
:lower_included => true)
|
|
514
517
|
end
|
|
@@ -517,7 +520,7 @@ module OpenEHR
|
|
|
517
520
|
def value
|
|
518
521
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
519
522
|
:lower => val.value,
|
|
520
|
-
:
|
|
523
|
+
:upper => val.value,
|
|
521
524
|
:upper_included => true,
|
|
522
525
|
:lower_included => true)
|
|
523
526
|
end
|
|
@@ -527,13 +530,14 @@ module OpenEHR
|
|
|
527
530
|
rule date_time_value
|
|
528
531
|
dt:V_ISO8601_EXTENDED_DATE_TIME '' {
|
|
529
532
|
def value
|
|
530
|
-
OpenEHR::
|
|
533
|
+
::OpenEHR::RM::DataTypes::Quantity::DateTime::DvDateTime.new(
|
|
534
|
+
:value => dt.text_value)
|
|
531
535
|
end
|
|
532
536
|
}
|
|
533
537
|
end
|
|
534
538
|
|
|
535
539
|
rule date_time_list_value
|
|
536
|
-
date_time_value
|
|
540
|
+
date_time_value (',' more_dt:date_time_value)+ {
|
|
537
541
|
def value
|
|
538
542
|
date_times.map {|t| t.value}
|
|
539
543
|
end
|
|
@@ -606,10 +610,10 @@ module OpenEHR
|
|
|
606
610
|
:lower_included => false)
|
|
607
611
|
end
|
|
608
612
|
}
|
|
609
|
-
/ SYM_INTERVAL_DELIM SYM_GE date_time_value SYM_INTERVAL_DELIM {
|
|
613
|
+
/ SYM_INTERVAL_DELIM SYM_GE dt:date_time_value SYM_INTERVAL_DELIM {
|
|
610
614
|
def value
|
|
611
615
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
612
|
-
:lower =>
|
|
616
|
+
:lower => dt.value,
|
|
613
617
|
:upper_unbounded => true,
|
|
614
618
|
:lower_included => true)
|
|
615
619
|
end
|
|
@@ -618,7 +622,7 @@ module OpenEHR
|
|
|
618
622
|
def value
|
|
619
623
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
620
624
|
:lower => val.value,
|
|
621
|
-
:
|
|
625
|
+
:upper => val.value,
|
|
622
626
|
:upper_included => true,
|
|
623
627
|
:lower_included => true)
|
|
624
628
|
end
|
|
@@ -626,9 +630,10 @@ module OpenEHR
|
|
|
626
630
|
end
|
|
627
631
|
|
|
628
632
|
rule duration_value
|
|
629
|
-
V_ISO8601_DURATION '' {
|
|
633
|
+
du:V_ISO8601_DURATION '' {
|
|
630
634
|
def value
|
|
631
|
-
OpenEHR::
|
|
635
|
+
::OpenEHR::RM::DataTypes::Quantity::DateTime::DvDuration.new(
|
|
636
|
+
:value => du.text_value)
|
|
632
637
|
end
|
|
633
638
|
}
|
|
634
639
|
end
|
|
@@ -645,7 +650,7 @@ module OpenEHR
|
|
|
645
650
|
}
|
|
646
651
|
/ duration_value ',' SYM_LIST_CONTINUE {
|
|
647
652
|
def value
|
|
648
|
-
[
|
|
653
|
+
[duration_value.value]
|
|
649
654
|
end
|
|
650
655
|
}
|
|
651
656
|
end
|
|
@@ -707,10 +712,10 @@ module OpenEHR
|
|
|
707
712
|
:lower_included => false)
|
|
708
713
|
end
|
|
709
714
|
}
|
|
710
|
-
/ SYM_INTERVAL_DELIM SYM_GE duration_value SYM_INTERVAL_DELIM {
|
|
715
|
+
/ SYM_INTERVAL_DELIM SYM_GE val:duration_value SYM_INTERVAL_DELIM {
|
|
711
716
|
def value
|
|
712
717
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
713
|
-
:lower =>
|
|
718
|
+
:lower => val.value,
|
|
714
719
|
:upper_unbounded => true,
|
|
715
720
|
:lower_included => true)
|
|
716
721
|
end
|
|
@@ -718,7 +723,7 @@ module OpenEHR
|
|
|
718
723
|
/ SYM_INTERVAL_DELIM val:duration_value SYM_INTERVAL_DELIM {
|
|
719
724
|
def value
|
|
720
725
|
OpenEHR::AssumedLibraryTypes::Interval.new(
|
|
721
|
-
:
|
|
726
|
+
:upper => val.value,
|
|
722
727
|
:lower => val.value,
|
|
723
728
|
:upper_included => true,
|
|
724
729
|
:lower_included => true)
|
|
@@ -839,11 +844,11 @@ module OpenEHR
|
|
|
839
844
|
end
|
|
840
845
|
|
|
841
846
|
rule SYM_GE
|
|
842
|
-
'=>' / '>=' white_space
|
|
847
|
+
('=>' / '>=') white_space
|
|
843
848
|
end
|
|
844
849
|
|
|
845
850
|
rule SYM_LE
|
|
846
|
-
'<=' / '=>' white_space
|
|
851
|
+
('<=' / '=>') white_space
|
|
847
852
|
end
|
|
848
853
|
|
|
849
854
|
rule SYM_LT
|
|
@@ -867,7 +872,7 @@ module OpenEHR
|
|
|
867
872
|
end
|
|
868
873
|
|
|
869
874
|
rule SYM_END_CBLOCK
|
|
870
|
-
'}'
|
|
875
|
+
'}'
|
|
871
876
|
end
|
|
872
877
|
|
|
873
878
|
rule SYM_ELLIPSIS
|
|
@@ -955,7 +960,7 @@ module OpenEHR
|
|
|
955
960
|
end
|
|
956
961
|
|
|
957
962
|
rule SYM_UNIQUE
|
|
958
|
-
[Uu] [Nn] [Ii] [Qq] [Uu] [Ee]
|
|
963
|
+
[Uu] [Nn] [Ii] [Qq] [Uu] [Ee] space
|
|
959
964
|
end
|
|
960
965
|
|
|
961
966
|
rule SYM_INFINITY
|
|
@@ -1098,12 +1103,21 @@ module OpenEHR
|
|
|
1098
1103
|
}
|
|
1099
1104
|
end
|
|
1100
1105
|
|
|
1106
|
+
rule V_TERM_CODE
|
|
1107
|
+
'[' code:([a-zA-Z0-9()._\-]+) '::' white_space {
|
|
1108
|
+
def value
|
|
1109
|
+
::OpenEHR::RM::Support::Identification::TerminologyID.new(
|
|
1110
|
+
:value => code.text_value)
|
|
1111
|
+
end
|
|
1112
|
+
}
|
|
1113
|
+
end
|
|
1114
|
+
|
|
1101
1115
|
rule V_ISO8601_EXTENDED_DATE_TIME
|
|
1102
1116
|
([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ':' [0-6] [0-9] ':' [0-6] [0-9] (',' [0-9]+)? ('Z' / [+-] [0-9] 4..4)? ) / ([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ':' [0-6] [0-9] ('Z' / [+-] [0-9] 4..4)?) / ([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ('Z' / [+-] [0-9] 4..4)?)
|
|
1103
1117
|
end
|
|
1104
1118
|
|
|
1105
1119
|
rule V_ISO8601_EXTENDED_TIME
|
|
1106
|
-
[0-2] [0-9] ':' [0-6] [0-9] ':' [0-6] [0-9] (',' [0-9]+)? ('Z' / [+-] [0-9] 4..4)? / [0-2] [0-9] ':' [0-6] [0-9] (Z / [+-] [0-9] 4..4)?
|
|
1120
|
+
[0-2] [0-9] ':' [0-6] [0-9] ':' [0-6] [0-9] (',' [0-9]+)? ('Z' / [+-] [0-9] 4..4)? / [0-2] [0-9] ':' [0-6] [0-9] ('Z' / [+-] [0-9] 4..4)?
|
|
1107
1121
|
end
|
|
1108
1122
|
|
|
1109
1123
|
rule V_ISO8601_EXTENDED_DATE
|
|
@@ -1111,7 +1125,7 @@ module OpenEHR
|
|
|
1111
1125
|
end
|
|
1112
1126
|
|
|
1113
1127
|
rule V_ISO8601_DURATION
|
|
1114
|
-
'P' ([0-9]+ [yY])? ([0-9]+ [mM])? ([0-9]+ [wW])? ([0-9]+ [dD])? 'T' ([0-9]+ [hH])? ([0-9]+ [mM])? ([0-9]+ [sS])?
|
|
1128
|
+
'P' ([0-9]+ [yY])? ([0-9]+ [mM])? ([0-9]+ [wW])? ([0-9]+ [dD])? ('T' ([0-9]+ [hH])? ([0-9]+ [mM])? ([0-9]+ ('.' [0-9]+)? [sS])?)?
|
|
1115
1129
|
end
|
|
1116
1130
|
|
|
1117
1131
|
rule V_ISO8601_DATE_CONSTRAINT_PATTERN
|
|
@@ -1123,11 +1137,17 @@ module OpenEHR
|
|
|
1123
1137
|
end
|
|
1124
1138
|
|
|
1125
1139
|
rule V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN
|
|
1126
|
-
[yY] [yY] [yY] [yY] '-' [mM?X] [mM?X] '-' [dD?X] [dD?X] [Tt] [hH?X] [hH?X] ':' [mM?X] [mM?X] ':' [sS?X] [sS?X]
|
|
1140
|
+
[yY] [yY] [yY] [yY] '-' [mM?X] [mM?X] '-' [dD?X] [dD?X] [Tt ] [hH?X] [hH?X] ':' [mM?X] [mM?X] ':' [sS?X] [sS?X]
|
|
1127
1141
|
end
|
|
1128
1142
|
|
|
1129
1143
|
rule V_ISO8601_DURATION_CONSTRAINT_PATTERN
|
|
1130
|
-
'P' [yY]? [mM]? [wW]? [dD]? 'T' [hH]
|
|
1144
|
+
'P' [yY]? [mM]? [wW]? [dD]? 'T' [hH] [mM]? [sS]?
|
|
1145
|
+
/ 'P' [yY]? [mM]? [wW]? [dD]? 'T' [hH]? [mM] [sS]?
|
|
1146
|
+
/ 'P' [yY]? [mM]? [wW]? [dD]? 'T' [hH]? [mM]? [sS]
|
|
1147
|
+
/ 'P' [yY] [mM]? [wW]? [dD]?
|
|
1148
|
+
/ 'P' [yY]? [mM] [wW]? [dD]?
|
|
1149
|
+
/ 'P' [yY]? [mM]? [wW] [dD]?
|
|
1150
|
+
/ 'P' [yY]? [mM]? [wW]? [dD]
|
|
1131
1151
|
end
|
|
1132
1152
|
|
|
1133
1153
|
rule V_TYPE_IDENTIFIER
|
|
@@ -1155,7 +1175,7 @@ module OpenEHR
|
|
|
1155
1175
|
end
|
|
1156
1176
|
|
|
1157
1177
|
rule V_INTEGER
|
|
1158
|
-
[0-9] {
|
|
1178
|
+
[0-9]+ [eE] [+-]? [0-9] {
|
|
1159
1179
|
def value
|
|
1160
1180
|
text_value.to_i
|
|
1161
1181
|
end
|
|
@@ -1165,7 +1185,7 @@ module OpenEHR
|
|
|
1165
1185
|
text_value.to_i
|
|
1166
1186
|
end
|
|
1167
1187
|
}
|
|
1168
|
-
/ [0-9]
|
|
1188
|
+
/ [0-9] {
|
|
1169
1189
|
def value
|
|
1170
1190
|
text_value.to_i
|
|
1171
1191
|
end
|
|
@@ -1173,7 +1193,7 @@ module OpenEHR
|
|
|
1173
1193
|
end
|
|
1174
1194
|
|
|
1175
1195
|
rule V_REAL
|
|
1176
|
-
[0-9] '.' [0-9]+
|
|
1196
|
+
[0-9]+ '.' [0-9]+ [eE] [+-]? [0-9]+ / [1-9] [0-9]+ '.' [0-9]+ / [0-9] '.' [0-9]+ {
|
|
1177
1197
|
def value
|
|
1178
1198
|
text_value.to_f
|
|
1179
1199
|
end
|
|
@@ -96,13 +96,18 @@ module OpenEHR
|
|
|
96
96
|
@minute = iso8601_time.minute
|
|
97
97
|
@second = iso8601_time.second
|
|
98
98
|
@fractional_second = iso8601_time.fractional_second
|
|
99
|
+
@timezone = iso8601_time.timezone
|
|
99
100
|
end
|
|
100
101
|
|
|
101
102
|
def magnitude
|
|
102
|
-
if @fractional_second.nil?
|
|
103
|
+
if @fractional_second.nil? && @second.nil? && @minute.nil?
|
|
104
|
+
return @hour * 60 * 60
|
|
105
|
+
elsif @fractional_second.nil? && @second.nil?
|
|
106
|
+
return @hour * 60 * 60 + @minute * 60
|
|
107
|
+
elsif @fractional_second.nil?
|
|
103
108
|
return @hour * 60 * 60 + @minute * 60 + @second
|
|
104
109
|
else
|
|
105
|
-
return @hour
|
|
110
|
+
return @hour*60*60+@minute* 60 + @second + @fractional_second
|
|
106
111
|
end
|
|
107
112
|
end
|
|
108
113
|
|
|
@@ -187,16 +192,12 @@ module OpenEHR
|
|
|
187
192
|
end
|
|
188
193
|
end
|
|
189
194
|
|
|
190
|
-
class DvDuration <
|
|
195
|
+
class DvDuration < DvTemporal
|
|
191
196
|
include AssumedLibraryTypes::ISO8601DurationModule
|
|
192
197
|
attr_reader :value
|
|
193
198
|
|
|
194
199
|
def initialize(args = { })
|
|
195
|
-
|
|
196
|
-
self.magnitude_status = args[:magnitude_status]
|
|
197
|
-
self.normal_range = args[:normal_range]
|
|
198
|
-
self.normal_status = args[:normal_status]
|
|
199
|
-
self.other_reference_ranges = args[:other_reference_ranges]
|
|
200
|
+
super
|
|
200
201
|
end
|
|
201
202
|
|
|
202
203
|
def value=(value)
|
|
@@ -214,13 +215,25 @@ module OpenEHR
|
|
|
214
215
|
end
|
|
215
216
|
|
|
216
217
|
def magnitude
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
months = 0
|
|
219
|
+
months += @months if @months
|
|
220
|
+
months += @years * MONTH_IN_YEAR if @years
|
|
221
|
+
days = 0
|
|
222
|
+
days += months * NOMINAL_DAYS_IN_MONTH if months
|
|
223
|
+
days += @weeks * DAYS_IN_WEEK if @weeks
|
|
224
|
+
days += @days if @days
|
|
225
|
+
hours = 0
|
|
226
|
+
hours += days * HOURS_IN_DAY if days
|
|
227
|
+
hours += @hours if @hours
|
|
228
|
+
minutes = 0
|
|
229
|
+
minutes += hours * MINUTES_IN_HOUR if hours
|
|
230
|
+
minutes += @minutes if @minutes
|
|
231
|
+
seconds = 0
|
|
232
|
+
seconds += @seconds if @seconds
|
|
233
|
+
seconds += @fractional_second if @fractional_second
|
|
234
|
+
seconds += minutes * SECONDS_IN_MINUTE if minutes
|
|
235
|
+
return seconds
|
|
220
236
|
end
|
|
221
|
-
|
|
222
|
-
undef magnitude=
|
|
223
|
-
|
|
224
237
|
end
|
|
225
238
|
end # of DateTime
|
|
226
239
|
end # of Quantity
|
data/lib/open_ehr.rb
CHANGED
|
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
3
3
|
|
|
4
4
|
module OpenEHR
|
|
5
|
-
VERSION = '0.
|
|
5
|
+
VERSION = '0.9.5'
|
|
6
6
|
autoload :AssumedLibraryTypes, 'open_ehr/assumed_library_types'
|
|
7
7
|
autoload :RM, 'open_ehr/rm'
|
|
8
8
|
autoload :AM, 'open_ehr/am'
|
data/open_ehr.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "open_ehr"
|
|
8
|
-
s.version = "0.9.
|
|
8
|
+
s.version = "0.9.5"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["Shinji KOBAYASHI", "Akimichi Tatsukawa"]
|
|
12
|
-
s.date = "2011-
|
|
12
|
+
s.date = "2011-12-02"
|
|
13
13
|
s.description = "This project is an implementation of the openEHR specification on Ruby."
|
|
14
14
|
s.email = "skoba@moss.gr.jp"
|
|
15
15
|
s.extra_rdoc_files = [
|
|
@@ -28,14 +28,15 @@ Gem::Specification.new do |s|
|
|
|
28
28
|
"lib/open_ehr.rb",
|
|
29
29
|
"lib/open_ehr/am.rb",
|
|
30
30
|
"lib/open_ehr/am/archetype.rb",
|
|
31
|
-
"lib/open_ehr/am/archetype/archetype_description/archetype_description.rb",
|
|
32
31
|
"lib/open_ehr/am/archetype/assertion.rb",
|
|
33
32
|
"lib/open_ehr/am/archetype/constraint_model.rb",
|
|
34
33
|
"lib/open_ehr/am/archetype/constraint_model/primitive.rb",
|
|
35
34
|
"lib/open_ehr/am/archetype/ontology.rb",
|
|
36
|
-
"lib/open_ehr/am/
|
|
37
|
-
"lib/open_ehr/am/
|
|
38
|
-
"lib/open_ehr/am/
|
|
35
|
+
"lib/open_ehr/am/openehr_profile.rb",
|
|
36
|
+
"lib/open_ehr/am/openehr_profile/data_types.rb",
|
|
37
|
+
"lib/open_ehr/am/openehr_profile/data_types/basic.rb",
|
|
38
|
+
"lib/open_ehr/am/openehr_profile/data_types/quantity.rb",
|
|
39
|
+
"lib/open_ehr/am/openehr_profile/data_types/text.rb",
|
|
39
40
|
"lib/open_ehr/assumed_library_types.rb",
|
|
40
41
|
"lib/open_ehr/parser.rb",
|
|
41
42
|
"lib/open_ehr/parser/adl.rb",
|
|
@@ -124,6 +125,7 @@ Gem::Specification.new do |s|
|
|
|
124
125
|
"spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb",
|
|
125
126
|
"spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb",
|
|
126
127
|
"spec/lib/open_ehr/am/archetype/validity_kind_spec.rb",
|
|
128
|
+
"spec/lib/open_ehr/am/openehr_profile/data_types/text/c_code_phrase_spec.rb",
|
|
127
129
|
"spec/lib/open_ehr/assumed_library_types/interval_spec.rb",
|
|
128
130
|
"spec/lib/open_ehr/assumed_library_types/iso8601_date_spec.rb",
|
|
129
131
|
"spec/lib/open_ehr/assumed_library_types/iso8601_date_time_spec.rb",
|
|
@@ -227,6 +229,9 @@ Gem::Specification.new do |s|
|
|
|
227
229
|
"spec/lib/open_ehr/parser/adl_archetype_internal_ref_with_generics_spec.rb",
|
|
228
230
|
"spec/lib/open_ehr/parser/adl_archetype_ontology_binding_spec.rb",
|
|
229
231
|
"spec/lib/open_ehr/parser/adl_archetype_ontology_spec.rb",
|
|
232
|
+
"spec/lib/open_ehr/parser/adl_archetype_slot_cluster_spec.rb",
|
|
233
|
+
"spec/lib/open_ehr/parser/adl_archetype_slot_spec.rb",
|
|
234
|
+
"spec/lib/open_ehr/parser/adl_archetype_uncommon_term_keys_spec.rb",
|
|
230
235
|
"spec/lib/open_ehr/parser/adl_description_spec.rb",
|
|
231
236
|
"spec/lib/open_ehr/parser/adl_identification_spec.rb",
|
|
232
237
|
"spec/lib/open_ehr/parser/adl_language_no_accreditation_spec.rb",
|
|
@@ -237,6 +242,11 @@ Gem::Specification.new do |s|
|
|
|
237
242
|
"spec/lib/open_ehr/parser/adl_parser_spec.rb",
|
|
238
243
|
"spec/lib/open_ehr/parser/adl_path_spec.rb",
|
|
239
244
|
"spec/lib/open_ehr/parser/base_spec.rb",
|
|
245
|
+
"spec/lib/open_ehr/parser/basic_generic_type_spec.rb",
|
|
246
|
+
"spec/lib/open_ehr/parser/basic_type_spec.rb",
|
|
247
|
+
"spec/lib/open_ehr/parser/code_phrase_spec.rb",
|
|
248
|
+
"spec/lib/open_ehr/parser/date_time_spec.rb",
|
|
249
|
+
"spec/lib/open_ehr/parser/duration_spec.rb",
|
|
240
250
|
"spec/lib/open_ehr/parser/parser_spec_helper.rb",
|
|
241
251
|
"spec/lib/open_ehr/rm/common/archetyped/archetyped_spec.rb",
|
|
242
252
|
"spec/lib/open_ehr/rm/common/archetyped/feeder_audit_details_spec.rb",
|
|
@@ -295,6 +305,7 @@ Gem::Specification.new do |s|
|
|
|
295
305
|
"spec/lib/open_ehr/rm/data_types/encapsulated/dv_parsable_spec.rb",
|
|
296
306
|
"spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_spec.rb",
|
|
297
307
|
"spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb",
|
|
308
|
+
"spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_duration_spec.rb",
|
|
298
309
|
"spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_tempral_spec.rb",
|
|
299
310
|
"spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb",
|
|
300
311
|
"spec/lib/open_ehr/rm/data_types/quantity/dv_absolute_quantity_spec.rb",
|
|
@@ -26,6 +26,10 @@ describe OperatorKind do
|
|
|
26
26
|
OperatorKind::OP_GT.should be_equal 2006
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
it 'op_matches should be equal 2007' do
|
|
30
|
+
OperatorKind::OP_MATCHES.should be_equal 2007
|
|
31
|
+
end
|
|
32
|
+
|
|
29
33
|
it 'op_not should be equal 2010' do
|
|
30
34
|
OperatorKind::OP_NOT.should be_equal 2010
|
|
31
35
|
end
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
require File.dirname(__FILE__) + '/../../../../../../spec_helper'
|
|
2
2
|
include OpenEHR::AM::Archetype
|
|
3
3
|
include OpenEHR::AM::Archetype::ConstraintModel::Primitive
|
|
4
|
-
include OpenEHR::
|
|
4
|
+
include OpenEHR::RM::DataTypes::Quantity::DateTime
|
|
5
5
|
|
|
6
6
|
describe CDate do
|
|
7
|
-
before(:
|
|
8
|
-
default_value =
|
|
9
|
-
assumed_value =
|
|
10
|
-
range = Interval.new(:lower =>
|
|
11
|
-
:upper =>
|
|
7
|
+
before(:all) do
|
|
8
|
+
default_value = DvDate.new(:value => '2010-01-18')
|
|
9
|
+
assumed_value = DvDate.new(:value => '2007-02-19')
|
|
10
|
+
range = Interval.new(:lower => DvDate.new(:value => '2001-01-01'),
|
|
11
|
+
:upper => DvDate.new(:value => '2010-12-31'))
|
|
12
12
|
@c_date = CDate.new(:default_value => default_value,
|
|
13
13
|
:assumed_value => assumed_value,
|
|
14
|
-
:range => range
|
|
15
|
-
:month_validity => ValidityKind::MANDATORY,
|
|
16
|
-
:day_validity => ValidityKind::OPTIONAL,
|
|
17
|
-
:timezone_validity => ValidityKind::DISALLOWED)
|
|
14
|
+
:range => range)
|
|
18
15
|
end
|
|
19
16
|
|
|
20
17
|
it 'should be an instance of CDate' do
|
|
@@ -25,56 +22,31 @@ describe CDate do
|
|
|
25
22
|
@c_date.range.upper.month.should be_equal 12
|
|
26
23
|
end
|
|
27
24
|
|
|
28
|
-
it 'month_validity should be assigned properly by constructor' do
|
|
29
|
-
@c_date.month_validity.should be_equal ValidityKind::MANDATORY
|
|
30
|
-
end
|
|
31
|
-
|
|
32
25
|
it 'validity_is_range should be true if range is assigned' do
|
|
33
26
|
@c_date.should be_validity_is_range
|
|
34
27
|
end
|
|
35
28
|
|
|
36
|
-
it '
|
|
37
|
-
@c_date.range
|
|
38
|
-
@c_date.should_not be_validity_is_range
|
|
29
|
+
it 'raise ArgumentError unless range xor pattern' do
|
|
30
|
+
@c_date.range.should raise_error
|
|
39
31
|
end
|
|
40
32
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
it 'timezone should be assigned properly' do
|
|
46
|
-
@c_date.timezone_validity.should be_equal ValidityKind::DISALLOWED
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
describe 'method' do
|
|
50
|
-
it 'month_validity should be assigned by method properly' do
|
|
51
|
-
@c_date.month_validity = ValidityKind::OPTIONAL
|
|
52
|
-
@c_date.month_validity.should be_equal ValidityKind::OPTIONAL
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it 'day_validity should be assigned by method properly' do
|
|
56
|
-
@c_date.day_validity = ValidityKind::MANDATORY
|
|
57
|
-
@c_date.day_validity.should be_equal ValidityKind::MANDATORY
|
|
33
|
+
describe 'pattern attribute' do
|
|
34
|
+
before(:all) do
|
|
35
|
+
@c_date = CDate.new(:pattern => 'yyyy-mm-dd')
|
|
58
36
|
end
|
|
59
37
|
|
|
60
|
-
it 'should
|
|
61
|
-
@c_date.
|
|
62
|
-
lambda {
|
|
63
|
-
@c_date.month_validity = ValidityKind::OPTIONAL
|
|
64
|
-
}.should raise_error ArgumentError
|
|
38
|
+
it 'pattern should be yyyy-mm-dd' do
|
|
39
|
+
@c_date.pattern.should == 'yyyy-mm-dd'
|
|
65
40
|
end
|
|
41
|
+
end
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
@c_date.month_validity = ValidityKind::DISALLOWED
|
|
71
|
-
}.should raise_error ArgumentError
|
|
43
|
+
describe 'list attribute' do
|
|
44
|
+
before(:all) do
|
|
45
|
+
@c_date = CDate.new(:list => [DvDate.new(:value => '2011-11-28')])
|
|
72
46
|
end
|
|
73
47
|
|
|
74
|
-
it '
|
|
75
|
-
|
|
76
|
-
@c_date.month_validity = ValidityKind::DISALLOWED
|
|
77
|
-
}.should raise_error ArgumentError
|
|
48
|
+
it 'head of list is 2011-11-28' do
|
|
49
|
+
@c_date.list[0].value.should == '2011-11-28'
|
|
78
50
|
end
|
|
79
51
|
end
|
|
80
52
|
end
|