open_ehr 0.6.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.
Files changed (253) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +43 -0
  4. data/Guardfile +9 -0
  5. data/History.txt +4 -0
  6. data/Manifest.txt +16 -0
  7. data/PostInstall.txt +9 -0
  8. data/README.rdoc +66 -0
  9. data/Rakefile +49 -0
  10. data/VERSION +1 -0
  11. data/doc/README_rdoc.html +148 -0
  12. data/doc/created.rid +2 -0
  13. data/doc/images/brick.png +0 -0
  14. data/doc/images/brick_link.png +0 -0
  15. data/doc/images/bug.png +0 -0
  16. data/doc/images/bullet_black.png +0 -0
  17. data/doc/images/bullet_toggle_minus.png +0 -0
  18. data/doc/images/bullet_toggle_plus.png +0 -0
  19. data/doc/images/date.png +0 -0
  20. data/doc/images/find.png +0 -0
  21. data/doc/images/loadingAnimation.gif +0 -0
  22. data/doc/images/macFFBgHack.png +0 -0
  23. data/doc/images/package.png +0 -0
  24. data/doc/images/page_green.png +0 -0
  25. data/doc/images/page_white_text.png +0 -0
  26. data/doc/images/page_white_width.png +0 -0
  27. data/doc/images/plugin.png +0 -0
  28. data/doc/images/ruby.png +0 -0
  29. data/doc/images/tag_green.png +0 -0
  30. data/doc/images/wrench.png +0 -0
  31. data/doc/images/wrench_orange.png +0 -0
  32. data/doc/images/zoom.png +0 -0
  33. data/doc/index.html +54 -0
  34. data/doc/js/darkfish.js +116 -0
  35. data/doc/js/jquery.js +32 -0
  36. data/doc/js/quicksearch.js +114 -0
  37. data/doc/js/thickbox-compressed.js +10 -0
  38. data/doc/openehr_terminology.xml +2700 -0
  39. data/doc/rdoc.css +706 -0
  40. data/lib/#open_ehr.rb# +11 -0
  41. data/lib/open_ehr/am/archetype/archetype_description/archetype_description.rb +21 -0
  42. data/lib/open_ehr/am/archetype/assertion.rb +190 -0
  43. data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +296 -0
  44. data/lib/open_ehr/am/archetype/constraint_model.rb +340 -0
  45. data/lib/open_ehr/am/archetype/ontology.rb +97 -0
  46. data/lib/open_ehr/am/archetype.rb +134 -0
  47. data/lib/open_ehr/am/open_ehr_profile/data_types/basic.rb +29 -0
  48. data/lib/open_ehr/am/open_ehr_profile/data_types/quantity.rb +19 -0
  49. data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +12 -0
  50. data/lib/open_ehr/am.rb +8 -0
  51. data/lib/open_ehr/assumed_library_types.rb +627 -0
  52. data/lib/open_ehr/parser/xml_perser.rb +13 -0
  53. data/lib/open_ehr/parser.rb +19 -0
  54. data/lib/open_ehr/rm/common/archetyped.rb +182 -0
  55. data/lib/open_ehr/rm/common/change_control.rb +332 -0
  56. data/lib/open_ehr/rm/common/directory.rb +29 -0
  57. data/lib/open_ehr/rm/common/generic.rb +216 -0
  58. data/lib/open_ehr/rm/common/resource.rb +154 -0
  59. data/lib/open_ehr/rm/common.rb +14 -0
  60. data/lib/open_ehr/rm/composition/content/entry.rb +246 -0
  61. data/lib/open_ehr/rm/composition/content/navigation.rb +31 -0
  62. data/lib/open_ehr/rm/composition/content.rb +22 -0
  63. data/lib/open_ehr/rm/composition.rb +103 -0
  64. data/lib/open_ehr/rm/data_structures/history.rb +117 -0
  65. data/lib/open_ehr/rm/data_structures/item_structure/representation.rb +63 -0
  66. data/lib/open_ehr/rm/data_structures/item_structure.rb +216 -0
  67. data/lib/open_ehr/rm/data_structures.rb +25 -0
  68. data/lib/open_ehr/rm/data_types/basic.rb +108 -0
  69. data/lib/open_ehr/rm/data_types/charset.lst +818 -0
  70. data/lib/open_ehr/rm/data_types/charset_extract.rb +24 -0
  71. data/lib/open_ehr/rm/data_types/encapsulated.rb +98 -0
  72. data/lib/open_ehr/rm/data_types/quantity/date_time.rb +229 -0
  73. data/lib/open_ehr/rm/data_types/quantity.rb +403 -0
  74. data/lib/open_ehr/rm/data_types/text.rb +168 -0
  75. data/lib/open_ehr/rm/data_types/time_specification.rb +75 -0
  76. data/lib/open_ehr/rm/data_types/uri.rb +82 -0
  77. data/lib/open_ehr/rm/data_types.rb +14 -0
  78. data/lib/open_ehr/rm/demographic.rb +269 -0
  79. data/lib/open_ehr/rm/ehr.rb +162 -0
  80. data/lib/open_ehr/rm/integration.rb +27 -0
  81. data/lib/open_ehr/rm/security.rb +12 -0
  82. data/lib/open_ehr/rm/support/assumed_types.rb +81 -0
  83. data/lib/open_ehr/rm/support/definition.rb +15 -0
  84. data/lib/open_ehr/rm/support/identification.rb +408 -0
  85. data/lib/open_ehr/rm/support/measurement.rb +17 -0
  86. data/lib/open_ehr/rm/support/terminology.rb +135 -0
  87. data/lib/open_ehr/rm/support.rb +14 -0
  88. data/lib/open_ehr/rm.rb +16 -0
  89. data/lib/open_ehr/serializer.rb +272 -0
  90. data/lib/open_ehr/terminology/open_ehr_terminology.rb +41 -0
  91. data/lib/open_ehr/terminology.rb +7 -0
  92. data/lib/open_ehr/writer.rb +12 -0
  93. data/lib/open_ehr.rb +11 -0
  94. data/spec/lib/open_ehr/am/archetype/archetype_spec.rb +98 -0
  95. data/spec/lib/open_ehr/am/archetype/assertion/assertion_spec.rb +60 -0
  96. data/spec/lib/open_ehr/am/archetype/assertion/assertion_variable_spec.rb +30 -0
  97. data/spec/lib/open_ehr/am/archetype/assertion/expr_binary_operator.rb +40 -0
  98. data/spec/lib/open_ehr/am/archetype/assertion/expr_item_spec.rb +28 -0
  99. data/spec/lib/open_ehr/am/archetype/assertion/expr_leaf_spec.rb +34 -0
  100. data/spec/lib/open_ehr/am/archetype/assertion/expr_operator_spec.rb +25 -0
  101. data/spec/lib/open_ehr/am/archetype/assertion/expr_unary_operator_spec.rb +26 -0
  102. data/spec/lib/open_ehr/am/archetype/assertion/operator_kind_spec.rb +110 -0
  103. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_constraint_spec.rb +56 -0
  104. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_internal_ref_spec.rb +36 -0
  105. data/spec/lib/open_ehr/am/archetype/constraint_model/archetype_slot_spec.rb +61 -0
  106. data/spec/lib/open_ehr/am/archetype/constraint_model/c_attribute_spec.rb +59 -0
  107. data/spec/lib/open_ehr/am/archetype/constraint_model/c_complex_object_spec.rb +39 -0
  108. data/spec/lib/open_ehr/am/archetype/constraint_model/c_defined_object_spec.rb +53 -0
  109. data/spec/lib/open_ehr/am/archetype/constraint_model/c_domain_type_spec.rb +25 -0
  110. data/spec/lib/open_ehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +29 -0
  111. data/spec/lib/open_ehr/am/archetype/constraint_model/c_object_spec.rb +61 -0
  112. data/spec/lib/open_ehr/am/archetype/constraint_model/c_primitive_object_spec.rb +33 -0
  113. data/spec/lib/open_ehr/am/archetype/constraint_model/c_reference_object_spec.rb +17 -0
  114. data/spec/lib/open_ehr/am/archetype/constraint_model/c_single_attribute_spec.rb +28 -0
  115. data/spec/lib/open_ehr/am/archetype/constraint_model/cardinality_spec.rb +68 -0
  116. data/spec/lib/open_ehr/am/archetype/constraint_model/constraint_ref_spec.rb +29 -0
  117. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +52 -0
  118. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_spec.rb +80 -0
  119. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +106 -0
  120. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +69 -0
  121. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +62 -0
  122. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +39 -0
  123. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_real_spec.rb +14 -0
  124. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +69 -0
  125. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +79 -0
  126. data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +59 -0
  127. data/spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb +43 -0
  128. data/spec/lib/open_ehr/am/archetype/validity_kind_spec.rb +42 -0
  129. data/spec/lib/open_ehr/assumed_library_types/interval_spec.rb +140 -0
  130. data/spec/lib/open_ehr/assumed_library_types/iso8601_date_spec.rb +236 -0
  131. data/spec/lib/open_ehr/assumed_library_types/iso8601_date_time_spec.rb +47 -0
  132. data/spec/lib/open_ehr/assumed_library_types/iso8601_duration_spec.rb +150 -0
  133. data/spec/lib/open_ehr/assumed_library_types/iso8601_time_spec.rb +234 -0
  134. data/spec/lib/open_ehr/assumed_library_types/iso8601_timezone_spec.rb +57 -0
  135. data/spec/lib/open_ehr/assumed_library_types/time_definitions_spec.rb +136 -0
  136. data/spec/lib/open_ehr/rm/common/archetyped/archetyped_spec.rb +50 -0
  137. data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_details_spec.rb +60 -0
  138. data/spec/lib/open_ehr/rm/common/archetyped/feeder_audit_spec.rb +51 -0
  139. data/spec/lib/open_ehr/rm/common/archetyped/link_spec.rb +42 -0
  140. data/spec/lib/open_ehr/rm/common/archetyped/locatable_spec.rb +89 -0
  141. data/spec/lib/open_ehr/rm/common/archetyped/pathable_spec.rb +42 -0
  142. data/spec/lib/open_ehr/rm/common/change_control/contribution_spec.rb +56 -0
  143. data/spec/lib/open_ehr/rm/common/change_control/imported_version_spec.rb +63 -0
  144. data/spec/lib/open_ehr/rm/common/change_control/original_version_spec.rb +71 -0
  145. data/spec/lib/open_ehr/rm/common/change_control/version_spec.rb +92 -0
  146. data/spec/lib/open_ehr/rm/common/change_control/versioned_object_spec.rb +285 -0
  147. data/spec/lib/open_ehr/rm/common/directory/folder_spec.rb +26 -0
  148. data/spec/lib/open_ehr/rm/common/generic/attestation_spec.rb +62 -0
  149. data/spec/lib/open_ehr/rm/common/generic/audit_details_spec.rb +51 -0
  150. data/spec/lib/open_ehr/rm/common/generic/participation_spec.rb +36 -0
  151. data/spec/lib/open_ehr/rm/common/generic/party_identified_spec.rb +64 -0
  152. data/spec/lib/open_ehr/rm/common/generic/party_proxy_spec.rb +18 -0
  153. data/spec/lib/open_ehr/rm/common/generic/party_related_spec.rb +24 -0
  154. data/spec/lib/open_ehr/rm/common/generic/revision_history_item_spec.rb +43 -0
  155. data/spec/lib/open_ehr/rm/common/generic/revision_history_spec.rb +45 -0
  156. data/spec/lib/open_ehr/rm/common/resource/authored_resource_spec.rb +68 -0
  157. data/spec/lib/open_ehr/rm/common/resource/resource_description_item_spec.rb +105 -0
  158. data/spec/lib/open_ehr/rm/common/resource/resource_description_spec.rb +74 -0
  159. data/spec/lib/open_ehr/rm/common/resource/translation_details_spec.rb +35 -0
  160. data/spec/lib/open_ehr/rm/composition/composition_spec.rb +92 -0
  161. data/spec/lib/open_ehr/rm/composition/content/content_item_spec.rb +14 -0
  162. data/spec/lib/open_ehr/rm/composition/content/entry/action_spec.rb +69 -0
  163. data/spec/lib/open_ehr/rm/composition/content/entry/activity_spec.rb +61 -0
  164. data/spec/lib/open_ehr/rm/composition/content/entry/admin_entry_spec.rb +38 -0
  165. data/spec/lib/open_ehr/rm/composition/content/entry/care_entry_spec.rb +37 -0
  166. data/spec/lib/open_ehr/rm/composition/content/entry/entry_spec.rb +88 -0
  167. data/spec/lib/open_ehr/rm/composition/content/entry/evaluation_spec.rb +37 -0
  168. data/spec/lib/open_ehr/rm/composition/content/entry/instruction_details_spec.rb +51 -0
  169. data/spec/lib/open_ehr/rm/composition/content/entry/instruction_spec.rb +62 -0
  170. data/spec/lib/open_ehr/rm/composition/content/entry/ism_transition_spec.rb +46 -0
  171. data/spec/lib/open_ehr/rm/composition/content/entry/observation_spec.rb +45 -0
  172. data/spec/lib/open_ehr/rm/composition/content/navigation/section_spec.rb +32 -0
  173. data/spec/lib/open_ehr/rm/composition/event_context_spec.rb +88 -0
  174. data/spec/lib/open_ehr/rm/data_structures/data_structure_spec.rb +21 -0
  175. data/spec/lib/open_ehr/rm/data_structures/history/event_spec.rb +44 -0
  176. data/spec/lib/open_ehr/rm/data_structures/history/history_spec.rb +67 -0
  177. data/spec/lib/open_ehr/rm/data_structures/history/interval_event_spec.rb +43 -0
  178. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_list_spec.rb +53 -0
  179. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_single_spec.rb +29 -0
  180. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_table_spec.rb +147 -0
  181. data/spec/lib/open_ehr/rm/data_structures/item_structure/item_tree_spec.rb +48 -0
  182. data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/cluster_spec.rb +26 -0
  183. data/spec/lib/open_ehr/rm/data_structures/item_structure/representation/element_spec.rb +22 -0
  184. data/spec/lib/open_ehr/rm/data_types/basic/data_value_spec.rb +17 -0
  185. data/spec/lib/open_ehr/rm/data_types/basic/dv_boolean_spec.rb +29 -0
  186. data/spec/lib/open_ehr/rm/data_types/basic/dv_identifier_spec.rb +108 -0
  187. data/spec/lib/open_ehr/rm/data_types/basic/dv_state_spec.rb +44 -0
  188. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_encapsulated_spec.rb +42 -0
  189. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_multimedia_spec.rb +79 -0
  190. data/spec/lib/open_ehr/rm/data_types/encapsulated/dv_parsable_spec.rb +34 -0
  191. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_spec.rb +64 -0
  192. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_date_time_spec.rb +25 -0
  193. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_tempral_spec.rb +24 -0
  194. data/spec/lib/open_ehr/rm/data_types/quantity/date_time/dv_time_spec.rb +37 -0
  195. data/spec/lib/open_ehr/rm/data_types/quantity/dv_absolute_quantity_spec.rb +35 -0
  196. data/spec/lib/open_ehr/rm/data_types/quantity/dv_amount_spec.rb +105 -0
  197. data/spec/lib/open_ehr/rm/data_types/quantity/dv_count_spec.rb +12 -0
  198. data/spec/lib/open_ehr/rm/data_types/quantity/dv_interval_spec.rb +17 -0
  199. data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordered_spec.rb +60 -0
  200. data/spec/lib/open_ehr/rm/data_types/quantity/dv_ordinal_spec.rb +74 -0
  201. data/spec/lib/open_ehr/rm/data_types/quantity/dv_proportion_spec.rb +162 -0
  202. data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantified_spec.rb +36 -0
  203. data/spec/lib/open_ehr/rm/data_types/quantity/dv_quantity_spec.rb +78 -0
  204. data/spec/lib/open_ehr/rm/data_types/quantity/proportion_kind_spec.rb +24 -0
  205. data/spec/lib/open_ehr/rm/data_types/quantity/reference_range_spec.rb +43 -0
  206. data/spec/lib/open_ehr/rm/data_types/text/code_phrase_spec.rb +23 -0
  207. data/spec/lib/open_ehr/rm/data_types/text/dv_paragraph_spec.rb +13 -0
  208. data/spec/lib/open_ehr/rm/data_types/text/dv_text_spec.rb +57 -0
  209. data/spec/lib/open_ehr/rm/data_types/text/term_mapping_spec.rb +59 -0
  210. data/spec/lib/open_ehr/rm/data_types/uri/dv_ehr_uri_spec.rb +21 -0
  211. data/spec/lib/open_ehr/rm/data_types/uri/dv_uri_spec.rb +36 -0
  212. data/spec/lib/open_ehr/rm/demographic/actor_spec.rb +79 -0
  213. data/spec/lib/open_ehr/rm/demographic/address_spec.rb +33 -0
  214. data/spec/lib/open_ehr/rm/demographic/capability_spec.rb +37 -0
  215. data/spec/lib/open_ehr/rm/demographic/contact_spec.rb +45 -0
  216. data/spec/lib/open_ehr/rm/demographic/party_identity_spec.rb +32 -0
  217. data/spec/lib/open_ehr/rm/demographic/party_relationship_spec.rb +84 -0
  218. data/spec/lib/open_ehr/rm/demographic/party_spec.rb +133 -0
  219. data/spec/lib/open_ehr/rm/demographic/role_spec.rb +58 -0
  220. data/spec/lib/open_ehr/rm/ehr/ehr_access_spec.rb +33 -0
  221. data/spec/lib/open_ehr/rm/ehr/ehr_spec.rb +139 -0
  222. data/spec/lib/open_ehr/rm/ehr/ehr_status_spec.rb +52 -0
  223. data/spec/lib/open_ehr/rm/ehr/versioned_composition_spec.rb +33 -0
  224. data/spec/lib/open_ehr/rm/integration/generic_entry_spec.rb +31 -0
  225. data/spec/lib/open_ehr/rm/support/identification/access_group_ref_spec.rb +19 -0
  226. data/spec/lib/open_ehr/rm/support/identification/archetype_id_spec.rb +152 -0
  227. data/spec/lib/open_ehr/rm/support/identification/generic_id_spec.rb +33 -0
  228. data/spec/lib/open_ehr/rm/support/identification/hier_object_id_spec.rb +12 -0
  229. data/spec/lib/open_ehr/rm/support/identification/internet_id_spec.rb +12 -0
  230. data/spec/lib/open_ehr/rm/support/identification/iso_oid_spec.rb +12 -0
  231. data/spec/lib/open_ehr/rm/support/identification/locatable_ref_spec.rb +34 -0
  232. data/spec/lib/open_ehr/rm/support/identification/object_id_spec.rb +24 -0
  233. data/spec/lib/open_ehr/rm/support/identification/object_ref_spec.rb +33 -0
  234. data/spec/lib/open_ehr/rm/support/identification/object_version_id_spec.rb +60 -0
  235. data/spec/lib/open_ehr/rm/support/identification/party_ref_spec.rb +29 -0
  236. data/spec/lib/open_ehr/rm/support/identification/template_id_spec.rb +12 -0
  237. data/spec/lib/open_ehr/rm/support/identification/terminology_id_spec.rb +33 -0
  238. data/spec/lib/open_ehr/rm/support/identification/uid_based_id_spec.rb +50 -0
  239. data/spec/lib/open_ehr/rm/support/identification/uid_spec.rb +29 -0
  240. data/spec/lib/open_ehr/rm/support/identification/version_tree_id_spec.rb +104 -0
  241. data/spec/lib/open_ehr/rm/support/measurement_service_spec.rb +7 -0
  242. data/spec/lib/open_ehr/rm/support/terminology_service_spec.rb +24 -0
  243. data/spec/lib/open_ehr/serializer/adl-test-entry.most_minimal.test.adl +20 -0
  244. data/spec/lib/open_ehr/serializer/adl_serializer_spec.rb +47 -0
  245. data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.adl +38 -0
  246. data/spec/lib/open_ehr/serializer/openEHR-EHR-SECTION.test.v1.xml +58 -0
  247. data/spec/lib/open_ehr/serializer/sample_archetype_spec.rb +44 -0
  248. data/spec/lib/open_ehr/serializer/xml_serializer_spec.rb +49 -0
  249. data/spec/lib/open_ehr/terminology/open_ehr_terminology_spec.rb +40 -0
  250. data/spec/rcov.opts +1 -0
  251. data/spec/spec.opts +5 -0
  252. data/spec/spec_helper.rb +54 -0
  253. metadata +401 -0
@@ -0,0 +1,272 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+ require 'rexml/document'
3
+ require 'builder'
4
+
5
+ module OpenEHR
6
+ module Serializer
7
+ NL = "\r\n"
8
+ INDENT = ' '
9
+
10
+ class BaseSerializer
11
+ def initialize(archetype)
12
+ @archetype = archetype
13
+ end
14
+
15
+ def serialize
16
+ return self.merge
17
+ end
18
+ end
19
+
20
+ class ADLSerializer < BaseSerializer
21
+ def header
22
+ hd = 'archetype'
23
+ unless @archetype.adl_version.nil?
24
+ hd << " (adl_version = #{@archetype.adl_version})"
25
+ end
26
+ hd << NL+INDENT + "#{@archetype.archetype_id.value}"+NL*2
27
+ hd << 'concept'+NL+ INDENT+"[#{@archetype.concept}]"+NL
28
+ hd << NL+'language'+NL+INDENT+'original_language = <['+
29
+ @archetype.original_language.terminology_id.value+'::'+
30
+ @archetype.original_language.code_string+']>'+NL
31
+ return hd
32
+ end
33
+
34
+ def description
35
+ desc = ''
36
+ if @archetype.description
37
+ ad = @archetype.description
38
+ desc << 'description' + NL
39
+ desc << INDENT + 'original_author = <' + NL
40
+ ad.original_author.each do |k,v|
41
+ desc << INDENT+INDENT+'["'+k+'"] = <"'+v+'">'+NL
42
+ end
43
+ desc << INDENT+'>'+NL
44
+ desc << INDENT+'lifecycle_state = <"'+ad.lifecycle_state+'">'+NL
45
+ desc << INDENT+'details = <'+NL
46
+ ad.details.each do |lang,item|
47
+ desc << INDENT*2+'["'+lang+'"] = <'+NL
48
+ desc << INDENT*3+'language = <['+
49
+ item.language.terminology_id.value+'::'+
50
+ item.language.code_string+']>'+NL
51
+ desc << INDENT*3+'purpose = <"'+item.purpose+'">'+NL
52
+ if item.keywords then
53
+ desc << INDENT*3+'keywords = <'
54
+ item.keywords.each do |word|
55
+ desc << '"'+word+'",'
56
+ end
57
+ desc.chop! << '>'+NL
58
+ end
59
+ desc << INDENT*3+'use = <"'+item.use+'">'+NL if item.use
60
+ desc << INDENT*3+'misuse = <"'+item.misuse+'">'+NL if item.misuse
61
+ desc << INDENT*3+'copyright = <"'+item.copyright+'">'+NL if item.copyright
62
+ if item.original_resource_uri
63
+ desc << INDENT*3 + 'original_resource_uri = <'
64
+ item.original_resource_uri.each do |k,v|
65
+ desc << INDENT*4+'["'+k+'"] = <"'+v+'">'+NL
66
+ end
67
+ desc << INDENT*3+'>'+NL
68
+ end
69
+ if item.other_details
70
+ desc << INDENT*3 + 'other_details = <'
71
+ item.original_resource_uri.each do |k,v|
72
+ desc << INDENT*4+'["'+k+'"] = <"'+v+'">'+NL
73
+ end
74
+ desc << INDENT*3+'>'+NL
75
+ end
76
+ desc << INDENT*2+'>'+NL
77
+ end
78
+ desc << INDENT+'>'+NL
79
+ end
80
+ return desc
81
+ end
82
+
83
+ def definition
84
+ ad = @archetype.definition
85
+ definition = 'definition'+NL
86
+ definition << INDENT+ad.rm_type_name+"[#{ad.node_id}] matches {"
87
+ if ad.any_allowed?
88
+ definition << '*}'+NL
89
+ else
90
+ definition << NL
91
+ if ad.attributes
92
+ attributes = ad.attributes
93
+ indents = 2
94
+ while attributes
95
+ definition << INDENT*indents+attributes.rm_type_name
96
+ definition << "[#{attributes.node_id}] "
97
+ definition << existence(attributes.existence)
98
+ definition << " matches {"
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ def ontology
105
+ ao = @archetype.ontology
106
+ ontology = 'ontology'+NL
107
+ ontology << INDENT + 'term_definitions = <' + NL
108
+ ao.term_definitions.each do |lang, items|
109
+ ontology << INDENT*2 + "[\"#{lang}\"] = <" + NL
110
+ ontology << INDENT*3 + 'items = <' + NL
111
+ items.each do |item|
112
+ ontology << INDENT*4 + "[\"#{item.code}\"] = <" + NL
113
+ item.items.each do |name, desc|
114
+ ontology << INDENT*5 + "#{name} = <\"#{desc}\">" +NL
115
+ end
116
+ ontology << INDENT*4 + '>'+NL
117
+ end
118
+ ontology << INDENT*3 + '>' + NL
119
+ ontology << INDENT*2 + '>' + NL
120
+ end
121
+ ontology << INDENT + '>' + NL
122
+ end
123
+
124
+ def merge
125
+ return header + NL + description + NL + definition + NL + ontology
126
+ end
127
+
128
+ private
129
+ def c_object
130
+ end
131
+
132
+ def existence(existence)
133
+ "existence matches {#{existence.lower}..#{existence.upper}}"
134
+ end
135
+ end
136
+
137
+ class XMLSerializer < BaseSerializer
138
+ def header
139
+ header = ''
140
+ xml = Builder::XmlMarkup.new(:indent => 2, :target => header)
141
+ xml.archetype_id do
142
+ xml.value @archetype.archetype_id.value
143
+ end
144
+ xml.concept @archetype.concept
145
+ xml.original_language do
146
+ xml.terminology_id do
147
+ xml.value @archetype.original_language.terminology_id.value
148
+ end
149
+ xml.code_string @archetype.original_language.code_string
150
+ end
151
+ return header
152
+ end
153
+
154
+ def description
155
+ desc = ''
156
+ xml = Builder::XmlMarkup.new(:indent => 2, :target => desc)
157
+ ad = @archetype.description
158
+ if ad
159
+ xml.description do
160
+ ad.original_author.each do |key,value|
161
+ xml.original_author(value,"id"=>key)
162
+ end
163
+ if ad.other_contributors
164
+ ad.other_contributors.each do |co|
165
+ xml.other_contributors co
166
+ end
167
+ end
168
+ xml.lifecycle_state ad.lifecycle_state
169
+ xml.details do
170
+ ad.details.each do |lang, item|
171
+ xml.language do
172
+ xml.terminology_id do
173
+ xml.value item.language.terminology_id.value
174
+ end
175
+ xml.code_string lang
176
+ end
177
+ xml.purpose item.purpose
178
+ if item.keywords then
179
+ item.keywords.each do |word|
180
+ xml.keywords word
181
+ end
182
+ end
183
+ xml.use item.use if item.use
184
+ xml.misuse item.misuse if item.misuse
185
+ xml.copyright item.copyright if item.copyright
186
+ if ad.other_details
187
+ ad.other_details.each do |key,value|
188
+ xml.other_details(value, "id"=>key)
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+ return desc
196
+ end
197
+
198
+ def definition
199
+ definition = ''
200
+ ad = @archetype.definition
201
+ xml = Builder::XmlMarkup.new(:indent => 2, :target => definition)
202
+ xml.definition do
203
+ xml.rm_type_name ad.rm_type_name
204
+ xml.occurrence do
205
+ oc = ad.occurrences
206
+ xml.lower_included oc.lower_included? unless oc.lower_included?.nil?
207
+ xml.upper_included oc.upper_included? unless oc.upper_included?.nil?
208
+ xml.lower_unbounded oc.lower_unbounded?
209
+ xml.upper_unbounded oc.upper_unbounded?
210
+ xml.lower oc.lower
211
+ xml.upper oc.lower
212
+ end
213
+ xml.node_id ad.node_id
214
+ end
215
+ return definition
216
+ end
217
+
218
+ def ontology
219
+ ontology = ''
220
+ ao = @archetype.ontology
221
+ xml = Builder::XmlMarkup.new(:indent => 2, :target => ontology)
222
+ xml.ontology do
223
+ xml.specialisation_depth ao.specialisation_depth
224
+ xml.term_definitions do
225
+ ao.term_definitions.each do |lang, terms|
226
+ xml.language lang
227
+ xml.terms do
228
+ terms.each do |term|
229
+ xml.code term.code
230
+ xml.items do
231
+ term.items.each do |key, value|
232
+ xml.item do
233
+ xml.key key
234
+ xml.value value
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ def merge
246
+ archetype = "<?xml version='1.0' encoding='UTF-8'?>" + NL +
247
+ "<archetype xmlns=\"http://schemas.openehr.org/v1\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + NL +
248
+ header + description + definition +
249
+ ontology + '</archetype>'
250
+ return archetype
251
+ end
252
+ end
253
+ end
254
+ end
255
+
256
+ class Publisher
257
+ def initialize(serializer)
258
+ @serializer = serializer
259
+ end
260
+
261
+ def publish(writer)
262
+ writer.out(@serializer.serialize)
263
+ end
264
+ end
265
+
266
+ class Writer
267
+ def initialize(target)
268
+ @target = target
269
+ end
270
+ def out
271
+ end
272
+ end
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'xmlsimple'
3
+ #require 'ActiveSupport'
4
+
5
+ module OpenEHR
6
+ module Terminology
7
+ class OpenEHRTerminology
8
+ def initialize
9
+ @terms = XmlSimple.xml_in(File.open('doc/openehr_terminology.xml'))
10
+ end
11
+
12
+ def languages
13
+ @terms['Language']
14
+ end
15
+
16
+ def primary_rubrics
17
+ @terms['PrimaryRubric']
18
+ end
19
+
20
+ def concepts
21
+ @terms['Concept']
22
+ end
23
+
24
+ def groupers
25
+ @terms['Grouper']
26
+ end
27
+
28
+ def grouped_concepts
29
+ @terms['GroupedConcept']
30
+ end
31
+
32
+ def terminology_identifiers
33
+ @terms['TerminologyIdentifiers']
34
+ end
35
+
36
+ def territories
37
+ @terms['Territory']
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,7 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+ module OpenEHR
4
+ module Terminology
5
+ autoload :OpenEHRTerminology, 'terminology/open_ehr_terminology'
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ module OpenEHR
2
+ module Writer
3
+ class BaseWriter
4
+ def initiailze(source, target)
5
+ end
6
+
7
+ def out
8
+ end
9
+ end
10
+ end
11
+ end
12
+
data/lib/open_ehr.rb ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ module OpenEHR
5
+ VERSION = '0.6.0'
6
+ autoload :AssumedLibraryTypes, 'open_ehr/assumed_library_types'
7
+ autoload :RM, 'open_ehr/rm'
8
+ autoload :AM, 'open_ehr/am'
9
+ autoload :Terminology, 'open_ehr/terminology'
10
+ autoload :Serializer, 'open_ehr/serializer'
11
+ end
@@ -0,0 +1,98 @@
1
+ require File.dirname(__FILE__) + '/../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype
3
+ include OpenEHR::AM::Archetype::ConstraintModel
4
+ include OpenEHR::AM::Archetype::Ontology
5
+ include OpenEHR::RM::DataTypes::Text
6
+ include OpenEHR::RM::Common::Resource
7
+ include OpenEHR::RM::Support::Identification
8
+
9
+ describe Archetype do
10
+ before(:each) do
11
+ original_language = stub(CodePhrase, :code_string => 'ja')
12
+ archetype_id = ArchetypeID.new(:value => 'openEHR-EHR-SECTION.physical_examination-prenatal.v2')
13
+ definition = stub(CComplexObject, :rm_type_name => 'SECTION')
14
+ ontology = stub(ArchetypeOntology, :specialisation_depth => 1)
15
+ uid = HierObjectID.new(:value => 'ABCD::1')
16
+ parent_archetype_id = ArchetypeID.new(:value => 'openEHR-EHR-SECTION.physical_examination.v1')
17
+ invariants = stub(Set, :size => 2)
18
+ @archetype = Archetype.new(:original_language => original_language,
19
+ :adl_version => '1.4',
20
+ :archetype_id => archetype_id,
21
+ :concept => 'at0000',
22
+ :definition => definition,
23
+ :ontology => ontology,
24
+ :uid => uid,
25
+ :parent_archetype_id => parent_archetype_id,
26
+ :invariants => invariants)
27
+ end
28
+
29
+ it 'should be an instance of Archetype' do
30
+ @archetype.should be_an_instance_of Archetype
31
+ end
32
+
33
+ it 'adl_version should be assigned properly' do
34
+ @archetype.adl_version.should == '1.4'
35
+ end
36
+
37
+ it 'archetype_id should be assigned prorperly' do
38
+ @archetype.archetype_id.value.should == 'openEHR-EHR-SECTION.physical_examination-prenatal.v2'
39
+ end
40
+
41
+ it 'should raise ArgumentError when archetype_id is nil' do
42
+ lambda {
43
+ @archetype.archetype_id = nil
44
+ }.should raise_error ArgumentError
45
+ end
46
+
47
+ it 'uid should be assigned properly' do
48
+ @archetype.uid.value.should == 'ABCD::1'
49
+ end
50
+
51
+ it 'concept should be assigned properly' do
52
+ @archetype.concept.should == 'at0000'
53
+ end
54
+
55
+ it 'should raise ArgumentError when concept is nil' do
56
+ lambda {
57
+ @archetype.concept = nil
58
+ }.should raise_error ArgumentError
59
+ end
60
+
61
+ it 'parent_archetype_id should be assigned properly' do
62
+ @archetype.parent_archetype_id.value.should == 'openEHR-EHR-SECTION.physical_examination.v1'
63
+ end
64
+
65
+ it 'definition should be assigned properly' do
66
+ @archetype.definition.rm_type_name.should == 'SECTION'
67
+ end
68
+
69
+ it 'should raise ArgumentError when definition is nil' do
70
+ lambda {
71
+ @archetype.definition = nil
72
+ }.should raise_error ArgumentError
73
+ end
74
+
75
+ it 'ontology should be assigned properly' do
76
+ @archetype.ontology.specialisation_depth.should be_equal 1
77
+ end
78
+
79
+ it 'should raise ArgumentError when ontology is nil' do
80
+ lambda {
81
+ @archetype.ontology = nil
82
+ }.should raise_error ArgumentError
83
+ end
84
+
85
+ it 'invariants should be assigned properly' do
86
+ @archetype.invariants.size.should be_equal 2
87
+ end
88
+
89
+ it 'version should be extracted form id' do
90
+ @archetype.version.should == 'v2'
91
+ end
92
+
93
+ it 'short concept name should be extracted from archetype id' do
94
+ @archetype.short_concept_name.should == 'physical_examination'
95
+ end
96
+
97
+ it 'concept name should be extracted from ontology'
98
+ end
@@ -0,0 +1,60 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe Assertion do
5
+ before(:each) do
6
+ expression = stub(ExprItem, :type => 'Boolean')
7
+ $string_expression = "/[at0001]/speed[at0002]/kilometres/magnitude = " +
8
+ "/[at0003]/speed[at0004]/miles/magnitude * 1.6"
9
+ variables = stub(Array, :size => 2)
10
+ @assertion = OpenEHR::AM::Archetype::Assertion::Assertion.new(:tag => 'validity',
11
+ :expression => expression,
12
+ :string_expression => $string_expression,
13
+ :variables => variables)
14
+ end
15
+
16
+ it 'should be an instance of Assertion' do
17
+ @assertion.should be_an_instance_of OpenEHR::AM::Archetype::Assertion::Assertion
18
+ end
19
+
20
+ it 'expression should be assigned properly' do
21
+ @assertion.expression.type.should == 'Boolean'
22
+ end
23
+
24
+ it 'should raise ArgumentError when expression is nil' do
25
+ lambda {
26
+ @assertion.expression = nil
27
+ }.should raise_error ArgumentError
28
+ end
29
+
30
+ it 'should raise ArgumentError when expression type is not Boolean' do
31
+ invalid_expression = stub(ExprItem, :type => 'Real')
32
+ lambda {
33
+ @assertion.expression = invalid_expression
34
+ }.should raise_error ArgumentError
35
+ end
36
+
37
+ it 'tag should be assigned properly' do
38
+ @assertion.tag.should == 'validity'
39
+ end
40
+
41
+ it 'tag should not be empty' do
42
+ lambda {
43
+ @assertion.tag = ''
44
+ }.should raise_error ArgumentError
45
+ end
46
+
47
+ it 'should not raise ArgumentError when tag = nil' do
48
+ lambda {
49
+ @assertion.tag = nil
50
+ }.should_not raise_error ArgumentError
51
+ end
52
+
53
+ it 'string_expression should be assigned properly' do
54
+ @assertion.string_expression.should == $string_expression
55
+ end
56
+
57
+ it 'variables should be assigned properly' do
58
+ @assertion.variables.size.should be_equal 2
59
+ end
60
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe AssertionVariable do
5
+ before(:each) do
6
+ @assertion_variable =
7
+ AssertionVariable.new(:name => 'test',
8
+ :definition => 'examine spec')
9
+ end
10
+
11
+ it 'name should be assigned properly' do
12
+ @assertion_variable.name.should == 'test'
13
+ end
14
+
15
+ it 'should raise ArgumentError when name is nil' do
16
+ lambda {
17
+ @assertion_variable.name = nil
18
+ }.should raise_error ArgumentError
19
+ end
20
+
21
+ it 'definition should be assigned properly' do
22
+ @assertion_variable.definition.should == 'examine spec'
23
+ end
24
+
25
+ it 'should raise ArgumentError if definiton is nil' do
26
+ lambda {
27
+ @assertion_variable.definition = nil
28
+ }.should raise_error ArgumentError
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe ExprBinaryOperator do
5
+ before(:each) do
6
+ operator = OperatorKind.new(:value => 2001)
7
+ right_operand = ExprItem.new(:type => 'Real')
8
+ left_operand = stub(ExprItem, :item => 'ANY')
9
+ @expr_binary_operator =
10
+ ExprBinaryOperator.new(:type => 'Integer',
11
+ :item => 'ANY',
12
+ :reference_type => 'operator',
13
+ :operator => operator,
14
+ :precedence_overridden => true,
15
+ :right_operand => right_operand,
16
+ :left_operand => left_operand)
17
+ end
18
+
19
+
20
+ it 'right_operand should be assigned properly' do
21
+ @expr_binary_operator.right_operand.type.should == 'Real'
22
+ end
23
+
24
+ it 'should raise ArgumentError when right_operand is nil' do
25
+ lambda {
26
+ @expr_binary_operator.right_operand = nil
27
+ }.should raise_error ArgumentError
28
+ end
29
+
30
+ it 'left_operand should be assigned properly' do
31
+ @expr_binary_operator.left_operand.item.should == 'ANY'
32
+ end
33
+
34
+ it 'should raise ArgumentError when left_oprand is nil' do
35
+ lambda {
36
+ @expr_binary_operator.left_operand = nil
37
+ }.should raise_error ArgumentError
38
+ end
39
+ end
40
+
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe ExprItem do
5
+ before(:each) do
6
+ @expr_item = ExprItem.new(:type => 'Real')
7
+ end
8
+
9
+ it 'should be an instance of ExprItem' do
10
+ @expr_item.should be_an_instance_of ExprItem
11
+ end
12
+
13
+ it 'type should be assigned properly' do
14
+ @expr_item.type.should == 'Real'
15
+ end
16
+
17
+ it 'should raise ArgumentError when type is nil' do
18
+ lambda {
19
+ @expr_item.type = nil
20
+ }.should raise_error ArgumentError
21
+ end
22
+
23
+ it 'should raise ArgumentError when type is empty' do
24
+ lambda {
25
+ @expr_item.type = ''
26
+ }.should raise_error ArgumentError
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe ExprLeaf do
5
+ before(:each) do
6
+ @expr_leaf = ExprLeaf.new(:type => 'Boolean',
7
+ :item => 'ANY',
8
+ :reference_type => 'DV_TEXT')
9
+ end
10
+
11
+ it 'should be an instance of ExprLeaf' do
12
+ @expr_leaf.should be_an_instance_of ExprLeaf
13
+ end
14
+
15
+ it 'item should be assigned properly' do
16
+ @expr_leaf.item.should == 'ANY'
17
+ end
18
+
19
+ it 'should raise ArgumentError when item is nil' do
20
+ lambda {
21
+ @expr_leaf.item = nil
22
+ }.should raise_error ArgumentError
23
+ end
24
+
25
+ it 'reference_type should be assigned properly' do
26
+ @expr_leaf.reference_type.should == 'DV_TEXT'
27
+ end
28
+
29
+ it 'should raise ArgumentError when reference_type is nil' do
30
+ lambda {
31
+ @expr_leaf.reference_type = nil
32
+ }.should raise_error ArgumentError
33
+ end
34
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../../../../../spec_helper'
2
+ include OpenEHR::AM::Archetype::Assertion
3
+
4
+ describe ExprOperator do
5
+ before(:each) do
6
+ operator = OperatorKind.new(:value => 2001)
7
+ @expr_operator = ExprOperator.new(:type => 'Integer',
8
+ :item => 'ANY',
9
+ :reference_type => 'operator',
10
+ :operator => operator,
11
+ :precedence_overridden => true)
12
+ end
13
+
14
+ it 'should be an instance of ExprOperator' do
15
+ @expr_operator.should be_an_instance_of ExprOperator
16
+ end
17
+
18
+ it 'operator should be assigned properly' do
19
+ @expr_operator.operator.value.should be_equal 2001
20
+ end
21
+
22
+ it 'precedence_overridden should be assigned properly' do
23
+ @expr_operator.precedence_overridden.should be_true
24
+ end
25
+ end