source: ruby/branches/0.5/lib/open_ehr/rm/demographic.rb@ 361

Last change on this file since 361 was 361, checked in by KOBAYASHI, Shinji, 14 years ago

refs #45 Party

File size: 5.3 KB
Line 
1# This module is based on the UML,
2# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_5_76d0249_1118674798473_6021_0Report.html
3# Ticket refs #45
4include OpenEHR::RM::Common::Archetyped
5
6module OpenEHR
7 module RM
8 module Demographic
9 class Address < Locatable
10 attr_reader :details
11
12 def as_string
13
14 end
15
16 def type
17
18 end
19 end
20
21 class Capability < Locatable
22 attr_reader :credentials, :time_validity
23
24 end
25
26 class Party < Locatable
27 attr_reader :uid, :identities, :contacts, :relationships,
28 :reverse_relationships
29 attr_accessor :details
30 alias :type :name
31
32 def initialize(args = { })
33 super(args)
34 self.uid = args[:uid]
35 self.identities = args[:identities]
36 self.contacts = args[:contacts]
37 self.relationships = args[:relationships]
38 self.reverse_relationships =
39 args[:reverse_relationships]
40 self.details = args[:details]
41 end
42
43 def uid=(uid)
44 raise ArgumentError, 'uid is mandatory' if uid.nil?
45 @uid = uid
46 end
47
48 def identities=(identities)
49 if identities.nil? || identities.empty?
50 raise ArgumentError, 'identities are mandatory'
51 end
52 @identities = identities
53 end
54
55 def contacts=(contacts)
56 if !contacts.nil? && contacts.empty?
57 raise ArgumentError, 'contacts should not be empty'
58 end
59 @contacts = contacts
60 end
61
62 def parent=(parent)
63 @parent = nil
64 end
65
66 def relationships=(relationships)
67 unless relationships.nil?
68 if relationships.empty?
69 raise ArgumentError, 'relationships should not be empty?'
70 else
71 relationships.each do |rel|
72 if rel.source.id.value != @uid.value
73 raise ArgumentError, 'invalid source of relationships'
74 end
75 end
76 end
77 end
78 @relationships = relationships
79 end
80
81 def reverse_relationships=(reverse_relationships)
82 if !reverse_relationships.nil? && reverse_relationships.empty?
83 raise ArgumentError, 'reverse_relationships should not be empty'
84 end
85 @reverse_relationships = reverse_relationships
86 end
87 end
88
89 class PartyIdentity < Locatable
90 attr_reader :details
91
92 end
93
94 class PartyRelationship < Locatable
95
96 end
97
98 class VersionedParty < Locatable
99
100 end
101
102 class Role < Party
103
104 end
105
106 class Actor < Party
107 LEAGAL_IDENTITY = 'leagal identity'
108 attr_reader :languages, :rules
109
110 def initialize(uid, archetype_node_id, name, archetype_details,
111 feeder_audit, links, identities, contacts,
112 relationships, reverse_relationships, details,
113 languages, rules)
114 super(uid, archetype_node_id, name, archetype_details,
115 feeder_audit, links, relationships, reverse_relationships,
116 details)
117 has_legal_identity?
118 set_languages(languages)
119 set_rules(rules)
120 end
121
122 def has_legal_identity?
123 @identities.each {|identity|
124 if (identity.purpose.value == LEAGAL_IDENTITY)
125 return true
126 end
127 }
128 false
129 end
130
131 def languages=(languages)
132 set_languages(languages)
133 end
134
135 def values=(values)
136 set_values(values)
137 end
138 private
139 def set_languages(languages)
140 if languages.nil?
141 raise ArgumentError, "languages should not be nil."
142 elsif languages.empty?
143 raise ArgumentError, "languages shouldnot be empty."
144 end
145 @languages = languages
146 end
147
148 def set_values(values)
149 if values.nil?
150 raise ArgumentError, "values should not be nil."
151 elsif values.empty?
152 raise ArgumentError, "values should not be nil."
153 end
154 @values = values
155 end
156 end
157
158 class Contact < Locatable
159 attr_accessor :time_validity
160 attr_reader :addresses
161 def initialize(uid, archetype_node_id, name, archetype_details,
162 feeder_audit, links, parent, time_validity, addresses)
163 super(uid, archetype_node_id, name, archetype_details,
164 feeder_audit, links, parent)
165 address_exists?(addresses)
166 @addresses = addresses
167 @time_validity = time_validity
168 end
169
170 def purpose
171 @name
172 end
173
174 def purpose=(purpose)
175 @name = purpose
176 end
177
178 def addresses=(addresses)
179 address_exists?(addresses)
180 @addresses = addresses
181 end
182 private
183
184 def address_exists?(addresses)
185 if addresses.nil?
186 raise ArgumentError, "address must not be nil"
187 elsif addresses.empty?
188 raise ArgumentError, "address must not be empty"
189 end
190 end
191 end
192
193 class Agent < Actor
194
195 end
196
197 class Organisation < Actor
198
199 end
200
201 class Person < Actor
202
203 end
204
205 class Group < Actor
206
207 end
208 end # of Demographic
209 end # of RM
210end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.