OSDN Git Service

Merge branch 'v05' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v05
[pettanr/pettanr.git] / lib / ar_helper.rb
1
2 module ActiveRecord
3   class Base
4     module ActiveRecordHelper
5       def self.included(base)
6         base.extend(ClassMethods)
7         base.__send__ :include, InstanceMethods
8       end
9       
10       module ClassMethods
11         def get_author_from_roles roles
12           roles.each do |role|
13             return role if role.is_a?(Author)
14             return role.author if role.is_a?(User)
15             return role.author if role.is_a?(Artist) and role.author
16           end
17           nil
18         end
19         
20         def get_artist_from_roles roles
21           roles.each do |role|
22             return role.artist if role.is_a?(Author) and role.artist
23             return role.author.artist if role.is_a?(User) and role.author and role.author.artist
24             return role if role.is_a?(Artist)
25           end
26           nil
27         end
28         
29         def get_admin_from_roles roles
30           roles.each do |role|
31             return role if role.is_a?(Admin)
32           end
33           nil
34         end
35         
36       end
37       
38       module InstanceMethods
39         private
40         
41         public
42         
43         def guest_role_check roles
44           true
45         end
46         
47         def reader_role_check roles
48           roles = [roles] unless roles.respond_to?(:each)
49           roles.each do |role|
50             return true if role.is_a?(Author) or role.is_a?(Artist) or role.is_a?(Admin) or role.is_a?(User)
51           end
52           false
53         end
54         
55         def resource_reader_role_check roles
56           roles = [roles] unless roles.respond_to?(:each)
57           roles.each do |role|
58             return true if role.is_a?(Author) or role.is_a?(Artist) or role.is_a?(Admin) or role.is_a?(User) or role.is_a?(DemandUser)
59           end
60           false
61         end
62         
63         def admin_role_check roles
64           roles = [roles] unless roles.respond_to?(:each)
65           roles.each do |role|
66             return true if role.is_a?(Admin)
67           end
68           false
69         end
70         
71       end
72       
73     end
74     include ActiveRecordHelper
75   end
76 end
77