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

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

refs #45 PartyIdentity, Contact, Address

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