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

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

fixed #45 capability, role, party_relationship

File size: 6.7 KB
RevLine 
[86]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
[361]4include OpenEHR::RM::Common::Archetyped
5
[6]6module OpenEHR
7 module RM
[361]8 module Demographic
9 class Party < Locatable
10 attr_reader :uid, :identities, :contacts, :relationships,
11 :reverse_relationships
12 attr_accessor :details
13 alias :type :name
14
15 def initialize(args = { })
16 super(args)
17 self.uid = args[:uid]
18 self.identities = args[:identities]
19 self.contacts = args[:contacts]
20 self.relationships = args[:relationships]
21 self.reverse_relationships =
22 args[:reverse_relationships]
23 self.details = args[:details]
[8]24 end
[361]25
[9]26 def uid=(uid)
[361]27 raise ArgumentError, 'uid is mandatory' if uid.nil?
[9]28 @uid = uid
29 end
[361]30
[9]31 def identities=(identities)
[361]32 if identities.nil? || identities.empty?
33 raise ArgumentError, 'identities are mandatory'
34 end
[9]35 @identities = identities
[361]36 end
37
[9]38 def contacts=(contacts)
[361]39 if !contacts.nil? && contacts.empty?
40 raise ArgumentError, 'contacts should not be empty'
41 end
[9]42 @contacts = contacts
43 end
[361]44
[8]45 def parent=(parent)
46 @parent = nil
47 end
[361]48
49 def relationships=(relationships)
50 unless relationships.nil?
51 if relationships.empty?
52 raise ArgumentError, 'relationships should not be empty?'
53 else
54 relationships.each do |rel|
55 if rel.source.id.value != @uid.value
56 raise ArgumentError, 'invalid source of relationships'
57 end
58 end
59 end
60 end
61 @relationships = relationships
[8]62 end
[361]63
64 def reverse_relationships=(reverse_relationships)
65 if !reverse_relationships.nil? && reverse_relationships.empty?
66 raise ArgumentError, 'reverse_relationships should not be empty'
[9]67 end
[361]68 @reverse_relationships = reverse_relationships
[9]69 end
[7]70 end
[87]71
[361]72 class PartyIdentity < Locatable
[87]73 attr_reader :details
74
[362]75 def initialize(args = { })
76 super(args)
77 self.details = args[:details]
78 end
79
80 def details=(details)
81 if details.nil?
82 raise ArgumentError, 'details are mandatory'
83 end
84 @details = details
85 end
86
87 def purpose
88 return @name
89 end
[87]90 end
91
[363]92 class Contact < Locatable
93 attr_accessor :time_validity
94 attr_reader :addresses
[87]95
[363]96 def initialize(args = { })
97 super(args)
98 self.addresses = args[:addresses]
99 self.time_validity = args[:time_validity]
100 end
[87]101
[363]102 def purpose
103 return @name
104 end
[87]105
[363]106 def addresses=(addresses)
107 if addresses.nil? || addresses.empty?
108 raise ArgumentError, 'address is mandatory'
109 end
110 @addresses = addresses
111 end
[87]112 end
113
[363]114 class Address < Locatable
115 attr_reader :details
[87]116
[363]117 def initialize(args = { })
118 super(args)
119 self.details = args[:details]
120 end
121
122 def details=(details)
123 if details.nil?
124 raise ArgumentError, 'details are mandatory'
125 end
126 @details = details
127 end
128
129 def type
130 return @name
131 end
[87]132 end
133
[86]134 class Actor < Party
[363]135 LEAGAL_IDENTITY = 'legal identity'
136 attr_reader :languages, :roles
[361]137
[363]138 def initialize(args = { })
139 super(args)
140 self.roles = args[:roles]
141 self.languages = args[:languages]
[51]142 end
[361]143
[363]144 def roles=(roles)
145 if !roles.nil? && roles.empty?
146 raise ArgumentError, 'roles should not be empty'
147 end
148 @roles = roles
149 end
150
[51]151 def has_legal_identity?
[363]152 @identities.each do |identity|
153 if identity.purpose.value == LEAGAL_IDENTITY
[51]154 return true
155 end
[363]156 end
157 return false
[51]158 end
[361]159
[51]160 def languages=(languages)
[363]161 if !languages.nil? && languages.empty?
162 raise ArgumentError, 'languages should not be empty.'
[51]163 end
164 @languages = languages
165 end
[363]166 end
[361]167
[363]168 class Person < Actor
169
[10]170 end
[361]171
[363]172 class Organisation < Actor
[362]173
[363]174 end
[361]175
[363]176 class Group < Actor
[361]177
[51]178 end
[86]179
180 class Agent < Actor
181
182 end
183
[363]184 class Role < Party
[364]185 attr_reader :performer, :capabilities
186 attr_accessor :time_validity
[86]187
[364]188 def initialize(args = { })
189 super(args)
190 self.performer = args[:performer]
191 self.capabilities = args[:capabilities]
192 self.time_validity = args[:time_validity]
193 end
194
195 def performer=(performer)
196 if performer.nil?
197 raise ArgumentError, 'performer is mandatory'
198 end
199 @performer = performer
200 end
201
202 def capabilities=(capabilities)
203 if !capabilities.nil? && capabilities.empty?
204 raise ArgumentError, 'capability should not be empty'
205 end
206 @capabilities = capabilities
207 end
[86]208 end
209
[363]210 class Capability < Locatable
[364]211 attr_reader :credentials
212 attr_accessor :time_validity
[86]213
[364]214 def initialize(args = { })
215 super(args)
216 self.credentials = args[:credentials]
217 self.time_validity = args[:time_validity]
218 end
219
220 def credentials=(credentials)
221 if credentials.nil?
222 raise ArgumentError, 'credentials are mandatory'
223 end
224 @credentials = credentials
225 end
[86]226 end
227
[363]228 class PartyRelationship < Locatable
[364]229 attr_accessor :details, :time_validity
230 attr_reader :source, :target
231 alias :type :name
[86]232
[364]233 def initialize(args = { })
234 super(args)
235 self.uid = args[:uid]
236 self.details = args[:details]
237 self.time_validity = args[:time_validity]
238 self.source = args[:source]
239 self.target = args[:target]
240 end
241
242 def uid=(uid)
243 if uid.nil?
244 raise ArgumentError, 'uid is mandatory'
245 end
246 @uid = uid
247 end
248
249 def source=(source)
250 if source.nil? or source.id.value != @uid.value
251 raise ArgumentError, 'source is invalid'
252 end
253 @source = source
254 end
255
256 def target=(target)
257 if target.nil?
258 raise ArgumentError, 'taraget is invalid'
259 end
260 @target = target
261 end
[86]262 end
[363]263
264 class VersionedParty < Locatable
265
266 end
[6]267 end # of Demographic
268 end # of RM
269end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.