roles_active_record 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +11 -2
- data/VERSION +1 -1
- data/lib/generators/active_record/roles/roles_generator.rb +1 -2
- data/lib/roles_active_record/base.rb +39 -27
- data/lib/roles_active_record/role.rb +1 -1
- data/lib/roles_active_record/strategy/multi.rb +1 -0
- data/lib/roles_active_record/strategy/multi/many_roles.rb +0 -2
- data/lib/roles_active_record/strategy/multi/roles_mask.rb +6 -2
- data/lib/roles_active_record/strategy/shared.rb +2 -8
- data/lib/roles_active_record/strategy/single/one_role.rb +8 -2
- data/roles_active_record.gemspec +2 -13
- data/spec/roles_active_record/strategy/api_examples.rb +188 -188
- data/spec/roles_active_record/strategy/multi/many_roles_spec.rb +0 -1
- data/spec/roles_active_record/strategy/multi/many_roles_unique_spec.rb +0 -1
- data/spec/roles_active_record/strategy/multi/roles_mask_spec.rb +2 -3
- data/spec/roles_active_record/strategy/single/admin_flag_spec.rb +0 -1
- data/spec/roles_active_record/strategy/single/one_role_spec.rb +0 -2
- data/spec/roles_active_record/strategy/single/one_role_unique_spec.rb +0 -1
- data/spec/roles_active_record/strategy/user_setup.rb +1 -6
- metadata +3 -14
- data/sandbox/Rakefile +0 -16
- data/sandbox/add_role_to_users_migration.erb +0 -13
- data/sandbox/create_roles_migration.erb +0 -12
- data/sandbox/create_user_roles_migration.erb +0 -13
- data/sandbox/database.log +0 -47
- data/sandbox/database.yml +0 -4
- data/sandbox/development.sqlite3 +0 -0
- data/sandbox/migrate/201002508_create_roles.rb +0 -11
- data/sandbox/migrate/20102507_create_users.rb +0 -11
- data/sandbox/model_base.rb +0 -46
- data/sandbox/test.rb +0 -13
data/README.textile
CHANGED
@@ -62,11 +62,20 @@ For strategies that use a separate Role model you must call the class method #ro
|
|
62
62
|
|
63
63
|
strategy :one_role, :role_class => :rolle
|
64
64
|
valid_roles_are :admin, :guest
|
65
|
-
...
|
66
65
|
end
|
67
66
|
</pre>
|
68
67
|
|
69
|
-
|
68
|
+
h3. Strategy: many_roles
|
69
|
+
|
70
|
+
Both the Role class and join class between User and Role can be customized using options
|
71
|
+
|
72
|
+
<pre>class Bruger < ActiveRecord::Base
|
73
|
+
include Roles::ActiveRecord
|
74
|
+
|
75
|
+
strategy :one_role, :role_class => :rolle, :user_role_class => :bruger_rolle
|
76
|
+
valid_roles_are :admin, :guest
|
77
|
+
end
|
78
|
+
</pre>
|
70
79
|
|
71
80
|
h3. Default Role classes
|
72
81
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
@@ -113,9 +113,8 @@ module ActiveRecord
|
|
113
113
|
|
114
114
|
def strategy_options
|
115
115
|
if role_class != 'Role' || user_role_class != 'UserRole' && role_ref_strategy?
|
116
|
-
return ":role_class =>
|
116
|
+
return ":role_class => :#{options[:role_class] || 'role'}, :user_role_class => :#{options[:user_role_class] || 'user_role'}"
|
117
117
|
end
|
118
|
-
":default"
|
119
118
|
end
|
120
119
|
|
121
120
|
def insertion_text
|
@@ -12,56 +12,68 @@ module Roles::ActiveRecord
|
|
12
12
|
end
|
13
13
|
|
14
14
|
module ClassMethods
|
15
|
-
MAP = {
|
16
|
-
:admin_flag => "attr_accessor :admin_flag",
|
17
15
|
|
18
|
-
|
19
|
-
:
|
16
|
+
def valid_single_strategies
|
17
|
+
[:admin_flag, :one_role, :role_string]
|
18
|
+
end
|
19
|
+
|
20
|
+
def valid_multi_strategies
|
21
|
+
[:many_roles, :roles_mask, :role_strings]
|
22
|
+
end
|
20
23
|
|
21
|
-
|
22
|
-
:
|
24
|
+
def strategies_with_role_class
|
25
|
+
[:one_role, :many_roles]
|
26
|
+
end
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
:roles_string => "attr_accessor :roles_string"
|
28
|
-
}
|
28
|
+
def valid_strategies
|
29
|
+
valid_single_strategies + valid_multi_strategies
|
30
|
+
end
|
29
31
|
|
30
32
|
def strategy name, options = {}
|
31
33
|
strategy_name = name.to_sym
|
32
|
-
raise ArgumentError, "Unknown role strategy #{strategy_name}" if !
|
34
|
+
raise ArgumentError, "Unknown role strategy #{strategy_name}" if !valid_strategies.include? strategy_name
|
33
35
|
use_roles_strategy strategy_name
|
34
36
|
|
35
|
-
if
|
36
|
-
@role_class_name = get_role_class(strategy_name, options)
|
37
|
-
else
|
38
|
-
@role_class_name = default_role_class(strategy_name) if strategies_with_role_class.include? strategy_name
|
39
|
-
end
|
40
|
-
|
41
|
-
if (options == :default || options[:config] == :default) && MAP[name]
|
42
|
-
instance_eval statement(MAP[strategy_name])
|
43
|
-
end
|
37
|
+
set_role_class(strategy_name, options) if strategies_with_role_class.include? strategy_name
|
44
38
|
|
39
|
+
# one_role reference
|
40
|
+
if strategy_name == :one_role
|
41
|
+
puts "setup one_role"
|
42
|
+
instance_eval "belongs_to :one_role, :class_name => '#{@role_class_name}'"
|
43
|
+
end
|
44
|
+
|
45
|
+
# many_roles references
|
46
|
+
if strategy_name == :many_roles
|
47
|
+
user_roles_class = options[:user_roles_class] if options.kind_of? Hash
|
48
|
+
user_roles_class ||= 'user_roles'
|
49
|
+
|
50
|
+
instance_eval %{
|
51
|
+
has_many :many_roles, :through => :#{user_roles_class}, :source => :#{@role_class_name.to_s.underscore}
|
52
|
+
has_many :#{user_roles_class}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
45
56
|
set_role_strategy name, options
|
46
57
|
end
|
47
58
|
|
48
59
|
private
|
49
60
|
|
61
|
+
def set_role_class strategy_name, options = {}
|
62
|
+
@role_class_name = !options.kind_of?(Symbol) ? get_role_class(strategy_name, options) : default_role_class(strategy_name)
|
63
|
+
end
|
64
|
+
|
50
65
|
def statement code_str
|
51
66
|
code_str.gsub /Role/, @role_class_name.to_s
|
52
67
|
end
|
53
68
|
|
54
69
|
def default_role_class strategy_name
|
55
|
-
if defined? ::Role
|
70
|
+
if defined? ::Role
|
71
|
+
puts "require one_role"
|
56
72
|
require "roles_active_record/#{strategy_name}"
|
57
73
|
return ::Role
|
58
74
|
end
|
59
|
-
raise
|
75
|
+
raise "Default Role class not defined"
|
60
76
|
end
|
61
|
-
|
62
|
-
def strategies_with_role_class
|
63
|
-
[:one_role, :embed_one_role, :many_roles,:embed_many_roles]
|
64
|
-
end
|
65
77
|
|
66
78
|
def get_role_class strategy_name, options
|
67
79
|
options[:role_class] ? options[:role_class].to_s.camelize.constantize : default_role_class(strategy_name)
|
@@ -9,8 +9,6 @@ module RoleStrategy::ActiveRecord
|
|
9
9
|
def self.included base
|
10
10
|
base.extend Roles::Generic::Role::ClassMethods
|
11
11
|
base.extend ClassMethods
|
12
|
-
base.has_many :many_roles, :through => :user_roles, :source => :role
|
13
|
-
base.has_many :user_roles
|
14
12
|
end
|
15
13
|
|
16
14
|
module ClassMethods
|
@@ -18,7 +18,9 @@ module RoleStrategy::ActiveRecord
|
|
18
18
|
def in_role(role)
|
19
19
|
mask = calc_index(role.to_s)
|
20
20
|
all.select do |user|
|
21
|
-
|
21
|
+
v = user.send(role_attribute) || 0
|
22
|
+
value = (v & mask)
|
23
|
+
value && value > 0
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -26,7 +28,9 @@ module RoleStrategy::ActiveRecord
|
|
26
28
|
all.select do |user|
|
27
29
|
roles.flatten.any? do |role|
|
28
30
|
mask = calc_index(role.to_s)
|
29
|
-
|
31
|
+
v = user.send(role_attribute) || 0
|
32
|
+
value = (v & mask)
|
33
|
+
value && value > 0
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
@@ -2,20 +2,14 @@ module Roles::ActiveRecord
|
|
2
2
|
module Strategy
|
3
3
|
module Shared
|
4
4
|
def set_role role
|
5
|
-
|
6
|
-
# self.send("#{role_attribute}=", vr)
|
7
|
-
update_attributes(role_attribute => vr)
|
5
|
+
update_attributes(role_attribute => new_role(role))
|
8
6
|
end
|
9
7
|
alias_method :set_roles, :set_role
|
10
8
|
|
11
9
|
def get_role
|
12
10
|
r = self.send(role_attribute)
|
13
|
-
# respond_to?(:present_role) ? present_role(r) : r
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_roles
|
17
|
-
r = self.send(role_attribute)
|
18
11
|
end
|
12
|
+
alias_method :get_roles, :get_role
|
19
13
|
|
20
14
|
def select_valid_roles *roles
|
21
15
|
roles.flat_uniq.select{|role| valid_role? role }
|
@@ -9,7 +9,6 @@ module RoleStrategy::ActiveRecord
|
|
9
9
|
def self.included base
|
10
10
|
base.extend Roles::Generic::Role::ClassMethods
|
11
11
|
base.extend ClassMethods
|
12
|
-
# base.belongs_to :one_role, :foreign_key => :role_id, :class_name => 'Role'
|
13
12
|
end
|
14
13
|
|
15
14
|
module ClassMethods
|
@@ -18,13 +17,20 @@ module RoleStrategy::ActiveRecord
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def in_any_role(*role_names)
|
21
|
-
|
20
|
+
matching_roles = Role.named(role_names)
|
21
|
+
User.where(:role_id => matching_roles.map(&:id))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
module Implementation
|
26
26
|
include Roles::ActiveRecord::Strategy::Single
|
27
27
|
|
28
|
+
def set_role role
|
29
|
+
role = role.first if role.kind_of? Array
|
30
|
+
role.users << self
|
31
|
+
end
|
32
|
+
alias_method :set_roles, :set_role
|
33
|
+
|
28
34
|
def new_role role
|
29
35
|
role_class.find_role(extract_role role)
|
30
36
|
end
|
data/roles_active_record.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{roles_active_record}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-26}
|
13
13
|
s.description = %q{Makes it easy to set a role strategy on your User model in Active Record}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -54,17 +54,6 @@ Gem::Specification.new do |s|
|
|
54
54
|
"lib/views/_multi_role_selector.erb.html",
|
55
55
|
"lib/views/_single_role_selector.erb.html",
|
56
56
|
"roles_active_record.gemspec",
|
57
|
-
"sandbox/Rakefile",
|
58
|
-
"sandbox/add_role_to_users_migration.erb",
|
59
|
-
"sandbox/create_roles_migration.erb",
|
60
|
-
"sandbox/create_user_roles_migration.erb",
|
61
|
-
"sandbox/database.log",
|
62
|
-
"sandbox/database.yml",
|
63
|
-
"sandbox/development.sqlite3",
|
64
|
-
"sandbox/migrate/201002508_create_roles.rb",
|
65
|
-
"sandbox/migrate/20102507_create_users.rb",
|
66
|
-
"sandbox/model_base.rb",
|
67
|
-
"sandbox/test.rb",
|
68
57
|
"spec/db/database.yml",
|
69
58
|
"spec/fixtures/many_roles_setup.rb",
|
70
59
|
"spec/fixtures/many_roles_setup_unique_check.rb",
|
@@ -22,192 +22,192 @@ describe "Roles for Active Record: #{api_name}" do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe '#in_any_role' do
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should be true that a User that includes Roles::Generic has a complete Roles::Generic interface" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#valid_role?' do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#valid_roles' do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
describe '#valid_roles?' do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
describe '#has_role?' do
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#has?' do
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '#has_roles?' do
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '#roles_list' do
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
describe '#roles' do
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe '#admin?' do
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
describe '#is?' do
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
describe '#roles=' do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
end
|
179
|
-
|
180
|
-
describe '#exchange_roles' do
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
describe '#remove_roles' do
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
end
|
25
|
+
# describe '#in_any_role' do
|
26
|
+
# it "should return first user matching role" do
|
27
|
+
# if User.respond_to? :in_roles
|
28
|
+
# User.in_any_role(:guest, :user).first.name.should == 'Guest user'
|
29
|
+
# User.in_any_role(:admin, :guest).should be_empty
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
|
34
|
+
# it "should be true that a User that includes Roles::Generic has a complete Roles::Generic interface" do
|
35
|
+
# # mutation API
|
36
|
+
# [:roles=, :role=, :add_roles, :add_role, :remove_role, :remove_roles, :exchange_roles, :exchange_role].each do |api_method|
|
37
|
+
# @admin_user.respond_to?(api_method).should be_true
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# # inspection API
|
41
|
+
# [:valid_role?, :valid_roles?, :has_roles?, :has_role?, :has?, :is?, :roles, :roles_list, :admin?].each do |api_method|
|
42
|
+
# @admin_user.respond_to?(api_method).should be_true
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# # class method API
|
46
|
+
# [:valid_role?, :valid_roles?, :valid_roles].each do |class_api_method|
|
47
|
+
# @admin_user.class.respond_to?(class_api_method).should be_true
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# describe '#valid_role?' do
|
52
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
53
|
+
# # @admin_user.valid_role?(:guest).should be_true
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# it "should be true that the User class has a valid role of :guest" do
|
57
|
+
# # User.valid_role?(:guest).should be_true
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# describe '#valid_roles' do
|
62
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
63
|
+
# # @admin_user.valid_roles.should include(:guest, :admin)
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# it "should be true that the User class has a valid role of :guest" do
|
67
|
+
# User.valid_roles.should include(:guest, :admin)
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# describe '#valid_roles?' do
|
72
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
73
|
+
# @admin_user.valid_roles?(:guest, :admin).should be_true
|
74
|
+
# end
|
75
|
+
#
|
76
|
+
# it "should be true that the User class has a valid role of :guest" do
|
77
|
+
# User.valid_roles?(:guest, :admin).should be_true
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# describe '#has_role?' do
|
82
|
+
# it "should have admin user role to :admin and not to :user" do
|
83
|
+
# @admin_user.has_role?(:user).should be_false
|
84
|
+
# @admin_user.has_role?(:admin).should be_true
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# it "should be true that guest user has role :guest and not :admin" do
|
88
|
+
# puts "Guest user: #{@guest_user.roles_list}"
|
89
|
+
# @guest_user.has_role?(:guest).should be_true
|
90
|
+
# @guest_user.has_role?(:admin).should be_false
|
91
|
+
# end
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# describe '#has?' do
|
95
|
+
# it "should be true that the admin_user has the :admin role" do
|
96
|
+
# @admin_user.has?(:admin).should be_true
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# it "should NOT be true that the admin_user has the :admin role" do
|
100
|
+
# @guest_user.has?(:admin).should be_false
|
101
|
+
# end
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
# describe '#has_roles?' do
|
105
|
+
# it "should be true that the admin_user has the roles :admin" do
|
106
|
+
# # @admin_user.has_roles?(:admin).should be_true
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
# it "should NOT be true that the user has the roles :admin" do
|
110
|
+
# @guest_user.has_roles?(:admin).should be_false
|
111
|
+
# end
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# describe '#roles_list' do
|
115
|
+
# it "should be true that the first role of admin_user is the :admin role" do
|
116
|
+
# @admin_user.roles_list.should include(:admin)
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# it "should be true that the first role of admin_user is the :user role" do
|
120
|
+
# case @normal_user.class.role_strategy.multiplicity
|
121
|
+
# when :single
|
122
|
+
# #if @normal_user.class.role_strategy.name == :admin_flag
|
123
|
+
# @normal_user.roles_list.should include(:guest)
|
124
|
+
# # else
|
125
|
+
# # @normal_user.roles_list.should include(:user)
|
126
|
+
# #end
|
127
|
+
# when :multi
|
128
|
+
# puts "Norm: #{@normal_user.roles}"
|
129
|
+
# @normal_user.roles_list.should include(:user, :guest)
|
130
|
+
# end
|
131
|
+
# end
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
# describe '#roles' do
|
135
|
+
# it "should be true that the roles of admin_user is an array with the role :admin" do
|
136
|
+
# roles = @admin_user.roles
|
137
|
+
# if defined?(Role) && roles.kind_of?(Role)
|
138
|
+
# roles.name.to_sym.should == :admin
|
139
|
+
# elsif roles.kind_of? Array
|
140
|
+
# if @normal_user.class.role_strategy.type == :complex
|
141
|
+
# roles.first.name.to_sym.should == :admin
|
142
|
+
# end
|
143
|
+
# if @normal_user.class.role_strategy.name == :admin_flag
|
144
|
+
# roles.first.should == true
|
145
|
+
# end
|
146
|
+
# else
|
147
|
+
# roles.to_sym.should == :admin
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
#
|
152
|
+
# describe '#admin?' do
|
153
|
+
# it "should be true that admin_user is in the :admin role" do
|
154
|
+
# @admin_user.admin?.should be_true
|
155
|
+
# end
|
156
|
+
#
|
157
|
+
# it "should NOT be true that the user is in the :admin role" do
|
158
|
+
# @guest_user.admin?.should be_false
|
159
|
+
# end
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# describe '#is?' do
|
163
|
+
# it "should be true that admin_user is in the :admin role" do
|
164
|
+
# @admin_user.is?(:admin).should be_true
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# it "should NOT be true that the user is in the :admin role" do
|
168
|
+
# @guest_user.is?(:admin).should be_false
|
169
|
+
# end
|
170
|
+
# end
|
171
|
+
#
|
172
|
+
# describe '#roles=' do
|
173
|
+
# it "should set user role to :admin" do
|
174
|
+
# @guest_user.roles = :admin
|
175
|
+
# @guest_user.has_role?(:admin).should be_true
|
176
|
+
# @guest_user.roles = :guest
|
177
|
+
# end
|
178
|
+
# end
|
179
|
+
#
|
180
|
+
# describe '#exchange_roles' do
|
181
|
+
# it "should exchange user role :user with role :admin" do
|
182
|
+
# @guest_user.exchange_role :guest, :with => :admin
|
183
|
+
# @guest_user.has?(:guest).should be_false
|
184
|
+
# @guest_user.has?(:admin).should be_true
|
185
|
+
# end
|
186
|
+
#
|
187
|
+
# it "should exchange user role :admin with roles :user and :guest" do
|
188
|
+
# case @admin_user.class.role_strategy.multiplicity
|
189
|
+
# when :single
|
190
|
+
# lambda { @admin_user.exchange_role :admin, :with => [:user, :guest] }.should raise_error(ArgumentError)
|
191
|
+
# when :multi
|
192
|
+
# @admin_user.exchange_role :admin, :with => [:user, :guest]
|
193
|
+
# @admin_user.has_role?(:user).should be_true
|
194
|
+
# @admin_user.has_role?(:guest).should be_true
|
195
|
+
# @admin_user.has?(:admin).should be_false
|
196
|
+
# end
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
# describe '#remove_roles' do
|
201
|
+
# it "should remove user role :admin using #remove_roles" do
|
202
|
+
# @admin_user.remove_roles :admin
|
203
|
+
# @admin_user.has_role?(:admin).should_not be_true
|
204
|
+
# end
|
205
|
+
#
|
206
|
+
# it "should remove user role :admin using #remove_role" do
|
207
|
+
# @guest_user.add_role :admin
|
208
|
+
# @guest_user.has_role?(:admin).should be_true
|
209
|
+
# @guest_user.remove_role :admin
|
210
|
+
# @guest_user.has_role?(:admin).should_not be_true
|
211
|
+
# end
|
212
|
+
# end
|
213
213
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
use_roles_strategy :roles_mask
|
3
2
|
|
4
|
-
class User < ActiveRecord::Base
|
3
|
+
class User < ActiveRecord::Base
|
5
4
|
include Roles::ActiveRecord
|
6
5
|
|
7
6
|
strategy :roles_mask, :default
|
8
|
-
valid_roles_are :admin, :guest, :user
|
7
|
+
valid_roles_are :admin, :guest, :user
|
9
8
|
end
|
10
9
|
|
11
10
|
def api_migrate
|
@@ -1,20 +1,15 @@
|
|
1
1
|
def default_user_setup
|
2
2
|
@guest_user = User.create(:name => 'Guest user')
|
3
3
|
@guest_user.add_roles :guest
|
4
|
-
# @guest_user.roles = :guest
|
5
4
|
@guest_user.save
|
6
5
|
|
7
|
-
puts "Guest roles: #{@guest_user.roles_list}"
|
8
|
-
|
9
6
|
@normal_user = User.create(:name => 'Normal user')
|
10
7
|
@normal_user.roles = :guest, :user
|
11
8
|
@normal_user.save
|
12
9
|
|
13
|
-
puts "Normal roles: #{@normal_user.roles_list}, #{@normal_user.inspect}"
|
14
|
-
|
15
10
|
@admin_user = User.create(:name => 'Admin user')
|
16
11
|
@admin_user.roles = :admin
|
17
12
|
@admin_user.save
|
18
13
|
|
19
|
-
puts "Admin roles: #{@admin_user.roles_list}, #{@admin_user.inspect}"
|
14
|
+
puts "Admin roles: #{@admin_user.roles_list}, #{@admin_user.inspect}"
|
20
15
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 1
|
9
|
+
version: 0.4.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-26 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -376,17 +376,6 @@ files:
|
|
376
376
|
- lib/views/_multi_role_selector.erb.html
|
377
377
|
- lib/views/_single_role_selector.erb.html
|
378
378
|
- roles_active_record.gemspec
|
379
|
-
- sandbox/Rakefile
|
380
|
-
- sandbox/add_role_to_users_migration.erb
|
381
|
-
- sandbox/create_roles_migration.erb
|
382
|
-
- sandbox/create_user_roles_migration.erb
|
383
|
-
- sandbox/database.log
|
384
|
-
- sandbox/database.yml
|
385
|
-
- sandbox/development.sqlite3
|
386
|
-
- sandbox/migrate/201002508_create_roles.rb
|
387
|
-
- sandbox/migrate/20102507_create_users.rb
|
388
|
-
- sandbox/model_base.rb
|
389
|
-
- sandbox/test.rb
|
390
379
|
- spec/db/database.yml
|
391
380
|
- spec/fixtures/many_roles_setup.rb
|
392
381
|
- spec/fixtures/many_roles_setup_unique_check.rb
|
data/sandbox/Rakefile
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'yaml'
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
task :default => :migrate
|
6
|
-
|
7
|
-
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
|
8
|
-
task :migrate => :environment do
|
9
|
-
folder = File.dirname(__FILE__) + '/migrate'
|
10
|
-
ActiveRecord::Migrator.migrate(folder, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
task :environment do
|
14
|
-
ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))
|
15
|
-
ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a'))
|
16
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class CreateUserRoles < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :<%= table_name.singularize %>_roles do |t|
|
4
|
-
t.integer :<%= table_name.singularize %>_id
|
5
|
-
t.integer :role_id
|
6
|
-
t.timestamps
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.down
|
11
|
-
drop_table :<%= table_name.singularize %>_roles
|
12
|
-
end
|
13
|
-
end
|
data/sandbox/database.log
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
D, [2010-08-03T11:17:25.097372 #5468] DEBUG -- : [1m[36mSQL (0.3ms)[0m [1m SELECT name
|
2
|
-
FROM sqlite_master
|
3
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
4
|
-
[0m
|
5
|
-
D, [2010-08-03T11:17:25.097614 #5468] DEBUG -- : [1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
6
|
-
D, [2010-08-03T11:17:25.099557 #5468] DEBUG -- : [1m[36mSQL (1.7ms)[0m [1mCREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) [0m
|
7
|
-
D, [2010-08-03T11:17:25.099704 #5468] DEBUG -- : [1m[35mSQL (0.0ms)[0m PRAGMA index_list("schema_migrations")
|
8
|
-
D, [2010-08-03T11:17:25.101503 #5468] DEBUG -- : [1m[36mSQL (1.7ms)[0m [1mCREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")[0m
|
9
|
-
D, [2010-08-03T11:17:25.101691 #5468] DEBUG -- : [1m[35mSQL (0.1ms)[0m SELECT name
|
10
|
-
FROM sqlite_master
|
11
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
12
|
-
|
13
|
-
D, [2010-08-03T11:18:24.658917 #5733] DEBUG -- : [1m[36mSQL (0.8ms)[0m [1m SELECT name
|
14
|
-
FROM sqlite_master
|
15
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
16
|
-
[0m
|
17
|
-
D, [2010-08-03T11:19:32.203267 #5997] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
18
|
-
FROM sqlite_master
|
19
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
20
|
-
[0m
|
21
|
-
D, [2010-08-03T11:21:50.864071 #6613] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
22
|
-
FROM sqlite_master
|
23
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
24
|
-
[0m
|
25
|
-
D, [2010-08-03T11:21:50.866101 #6613] DEBUG -- : [1m[35mSQL (0.1ms)[0m SELECT name
|
26
|
-
FROM sqlite_master
|
27
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
28
|
-
|
29
|
-
D, [2010-08-03T11:21:50.867280 #6613] DEBUG -- : [1m[36mSQL (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
|
30
|
-
I, [2010-08-03T11:21:50.867334 #6613] INFO -- : Migrating to CreateUsers (20102507)
|
31
|
-
D, [2010-08-03T11:21:50.867474 #6613] DEBUG -- : [1m[35mSQL (0.0ms)[0m select sqlite_version(*)
|
32
|
-
D, [2010-08-03T11:21:50.870727 #6613] DEBUG -- : [1m[36mSQL (0.5ms)[0m [1mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL) [0m
|
33
|
-
D, [2010-08-03T11:21:50.900844 #6613] DEBUG -- : [1m[35mSQL (0.2ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20102507')
|
34
|
-
D, [2010-08-03T14:16:49.368569 #54191] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
35
|
-
FROM sqlite_master
|
36
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
37
|
-
[0m
|
38
|
-
D, [2010-08-03T14:16:49.387225 #54191] DEBUG -- : [1m[35mSQL (0.2ms)[0m SELECT name
|
39
|
-
FROM sqlite_master
|
40
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
41
|
-
|
42
|
-
D, [2010-08-03T14:16:49.388472 #54191] DEBUG -- : [1m[36mSQL (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
|
43
|
-
I, [2010-08-03T14:16:49.388536 #54191] INFO -- : Migrating to CreateUsers (20102507)
|
44
|
-
I, [2010-08-03T14:16:49.388570 #54191] INFO -- : Migrating to CreateRoles (201002508)
|
45
|
-
D, [2010-08-03T14:16:49.388708 #54191] DEBUG -- : [1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
46
|
-
D, [2010-08-03T14:16:49.406721 #54191] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1mCREATE TABLE "roles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL) [0m
|
47
|
-
D, [2010-08-03T14:16:49.427264 #54191] DEBUG -- : [1m[35mSQL (13.7ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('201002508')
|
data/sandbox/database.yml
DELETED
data/sandbox/development.sqlite3
DELETED
Binary file
|
data/sandbox/model_base.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'require_all'
|
2
|
-
require 'active_support/inflector'
|
3
|
-
require_all File.dirname(__FILE__) + '/strategies'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
module RoleModels::ActiveRecord
|
8
|
-
include RoleModels::Base
|
9
|
-
orm_name :active_record
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
module ActiveRecord
|
14
|
-
class Base
|
15
|
-
include RoleModels::ActiveRecord
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
class User
|
21
|
-
include RoleModels::Generic
|
22
|
-
|
23
|
-
attr_accessor :roles_mask
|
24
|
-
role_strategy :roles_mask
|
25
|
-
end
|
26
|
-
|
27
|
-
class User
|
28
|
-
include RoleModels::Generic::RolesMask
|
29
|
-
attr_accessor :roles_mask
|
30
|
-
end
|
31
|
-
|
32
|
-
class User < ActiveRecord::Base
|
33
|
-
role_strategy :roles_mask
|
34
|
-
end
|
35
|
-
|
36
|
-
class User
|
37
|
-
include MongoMapper::Document
|
38
|
-
|
39
|
-
role_strategy :roles_mask
|
40
|
-
end
|
41
|
-
|
42
|
-
class User
|
43
|
-
include Mongoid::Document
|
44
|
-
|
45
|
-
role_strategy :roles_mask
|
46
|
-
end
|
data/sandbox/test.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'yaml'
|
3
|
-
require 'logger'
|
4
|
-
path = File.dirname(__FILE__) + '/database.yml'
|
5
|
-
dbfile = File.open(path)
|
6
|
-
dbconfig = YAML::load(dbfile)
|
7
|
-
ActiveRecord::Base.establish_connection(dbconfig)
|
8
|
-
ActiveRecord::Base.logger = Logger.new(STDERR)
|
9
|
-
|
10
|
-
class User < ActiveRecord::Base
|
11
|
-
end
|
12
|
-
|
13
|
-
puts User.count
|