forked from smudge/shifts
/
loc_group.rb
executable file
·47 lines (39 loc) · 1.49 KB
/
loc_group.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class LocGroup < ActiveRecord::Base
belongs_to :department
belongs_to :view_permission,
:class_name => "Permission",
:foreign_key => "view_perm_id",
:dependent => :destroy
belongs_to :signup_permission,
:class_name => "Permission",
:foreign_key => "signup_perm_id",
:dependent => :destroy
belongs_to :admin_permission,
:class_name => "Permission",
:foreign_key => "admin_perm_id",
:dependent => :destroy
has_many :locations, :dependent => :destroy
before_validation_on_create :create_permissions
before_validation_on_update :update_permissions
validates_presence_of :department
def permissions
[view_permission, signup_permission, admin_permission]
end
# Conventional has_many :through won't work -Ben
def data_objects
self.locations.map{|loc| loc.data_objects}.flatten.compact
end
private
def create_permissions
self.create_view_permission(:name => name + " view")
self.create_signup_permission(:name => name + " signup")
self.create_admin_permission(:name => name + " admin")
end
# in case loc group name is changed, update permission names accordingly
# note update_attribute does the saving as well
def update_permissions
self.view_permission.update_attribute(:name, name + " view")
self.signup_permission.update_attribute(:name, name + " signup")
self.admin_permission.update_attribute(:name, name + " admin")
end
end