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

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

refs #45 Actor, Person, Organisation, Group, Agent

File size: 4.8 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
[86]185
186 end
187
[363]188 class Capability < Locatable
189 attr_reader :credentials, :time_validity
[86]190
191 end
192
[363]193 class PartyRelationship < Locatable
[86]194
195 end
[363]196
197 class VersionedParty < Locatable
198
199 end
[6]200 end # of Demographic
201 end # of RM
202end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.