1 class OrvosModel < ActiveRecord::Base
2 self.abstract_class = true
4 include CurrentApiClient # current_user, current_api_client, etc.
6 attr_protected :created_at
7 attr_protected :modified_by_user
8 attr_protected :modified_by_client
9 attr_protected :modified_at
10 before_update :permission_to_update
11 before_create :update_modified_by_fields
12 before_update :update_modified_by_fields
14 def self.kind_class(kind)
15 kind.match(/^orvos\#(.+?)(_list|List)?$/)[1].pluralize.classify.constantize rescue nil
18 def eager_load_associations
19 self.class.columns.each do |col|
20 re = col.name.match /^(.*)_kind$/
22 self.respond_to? re[1].to_sym and
23 (auuid = self.send(re[1].to_sym)) and
24 (aclass = self.class.kind_class(self.send(col.name.to_sym))) and
25 (aobject = aclass.where('uuid=?', auuid).first))
26 self.send((re[1]+'=').to_sym, aobject)
33 def permission_to_update
34 return false unless current_user
35 if self.owner_changed? and self.owner_was != self.uuid
36 return Metadatum.where(metadata_class: 'permission',
39 head: current_user.uuid).count > 0
41 self.owner == current_user.uuid or
42 current_user.is_admin or
43 current_user.uuid == self.uuid or
44 Metadatum.where(metadata_class: 'permission',
47 head: current_user.uuid).count > 0
50 def update_modified_by_fields
52 self.created_at ||= Time.now
53 self.owner ||= current_user.uuid
54 self.modified_at = Time.now
55 self.modified_by_user = current_user.uuid
56 self.modified_by_client = current_api_client.uuid