rolify 2.2.2 → 3.0.0
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/.travis.yml +11 -7
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +36 -4
- data/UPGRADE.rdoc +22 -0
- data/lib/generators/rolify/role/role_generator.rb +5 -6
- data/lib/generators/rolify/role/templates/README-active_record +21 -0
- data/lib/generators/rolify/role/templates/README-mongoid +17 -0
- data/lib/generators/rolify/role/templates/initializer.rb +5 -6
- data/lib/generators/rolify/role/templates/{role.rb → role-active_record.rb} +0 -0
- data/lib/generators/rolify/role/templates/role-mongoid.rb +8 -0
- data/lib/rolify/adapters/active_record.rb +83 -0
- data/lib/rolify/adapters/base.rb +53 -0
- data/lib/rolify/adapters/mongoid.rb +87 -0
- data/lib/rolify/configure.rb +40 -0
- data/lib/rolify/dynamic.rb +21 -0
- data/lib/rolify/railtie.rb +20 -0
- data/lib/rolify/resource.rb +25 -0
- data/lib/rolify/role.rb +32 -110
- data/lib/rolify/version.rb +1 -1
- data/lib/rolify.rb +35 -0
- data/rolify.gemspec +3 -2
- data/spec/generators/rolify/role/role_generator_spec.rb +75 -16
- data/spec/rolify/config_spec.rb +189 -0
- data/spec/rolify/custom_spec.rb +15 -0
- data/spec/rolify/resource_spec.rb +317 -0
- data/spec/rolify/role_spec.rb +8 -495
- data/spec/rolify/shared_contexts.rb +74 -0
- data/spec/rolify/shared_examples/shared_examples_for_dynamic.rb +110 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_any_role.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_no_role.rb +97 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_role_getter.rb +135 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_role_setter.rb +92 -0
- data/spec/rolify/shared_examples/shared_examples_for_roles.rb +80 -0
- data/spec/spec_helper.rb +10 -5
- data/spec/support/{models.rb → adapters/active_record.rb} +11 -8
- data/spec/support/adapters/mongoid.rb +56 -0
- data/spec/support/data.rb +14 -5
- metadata +76 -20
- data/benchmarks/performance.rb +0 -51
data/spec/rolify/role_spec.rb
CHANGED
@@ -1,502 +1,15 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
|
3
|
-
|
4
|
-
before(:all) do
|
5
|
-
Rolify.user_cname = user_cname
|
6
|
-
Rolify.role_cname = role_cname
|
7
|
-
Rolify.dynamic_shortcuts = dynamic_shortcuts
|
8
|
-
Rolify.role_cname.destroy_all
|
9
|
-
end
|
10
|
-
|
11
|
-
context "in a Instance level" do
|
12
|
-
before(:all) do
|
13
|
-
@admin = Rolify.user_cname.first
|
14
|
-
@admin.has_role "admin"
|
15
|
-
@admin.has_role "moderator", Forum.first
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should respond to has_role method" do
|
19
|
-
@admin.should respond_to(:has_role).with(1).arguments
|
20
|
-
@admin.should respond_to(:has_role).with(2).arguments
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should respond to grant method" do
|
24
|
-
@admin.should respond_to(:grant).with(1).arguments
|
25
|
-
@admin.should respond_to(:grant).with(2).arguments
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should respond to has_role? method" do
|
29
|
-
@admin.should respond_to(:has_role?).with(1).arguments
|
30
|
-
@admin.should respond_to(:has_role?).with(2).arguments
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should respond to has_all_roles? method" do
|
34
|
-
@admin.should respond_to(:has_all_roles?)
|
35
|
-
@admin.should respond_to(:has_all_roles?)
|
36
|
-
end
|
37
|
-
|
38
|
-
it "should respond to has_any_role? method" do
|
39
|
-
@admin.should respond_to(:has_any_role?)
|
40
|
-
@admin.should respond_to(:has_any_role?)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should respond to has_no_role method" do
|
44
|
-
@admin.should respond_to(:has_no_role).with(1).arguments
|
45
|
-
@admin.should respond_to(:has_no_role).with(2).arguments
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should respond to revoke method" do
|
49
|
-
@admin.should respond_to(:revoke).with(1).arguments
|
50
|
-
@admin.should respond_to(:revoke).with(2).arguments
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should respond to dynamic methods", :if => dynamic do
|
54
|
-
@admin.should respond_to(:is_admin?).with(0).arguments
|
55
|
-
@admin.should respond_to(:is_moderator_of?).with(1).arguments
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should not respond to any unknown methods", :if => dynamic do
|
59
|
-
@admin.should_not respond_to(:is_god?)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should create a new dynamic method if role exists in database", :if => dynamic do
|
63
|
-
other_guy = Rolify.user_cname.last
|
64
|
-
other_guy.has_role "superman"
|
65
|
-
@admin.should respond_to(:is_superman?).with(0).arguments
|
66
|
-
other_guy.has_role("batman", Forum.first)
|
67
|
-
@admin.should respond_to(:is_batman_of?).with(1).arguments
|
68
|
-
@admin.should respond_to(:is_batman?).with(0).arguments
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should not have any dynamic methods if dynamic_shortcuts is disabled", :if => dynamic == false do
|
72
|
-
@admin.should_not respond_to(:is_admin?)
|
73
|
-
@admin.should_not respond_to(:is_moderator_of?)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "with a global role" do
|
78
|
-
before do
|
79
|
-
@admin = Rolify.user_cname.first
|
80
|
-
@admin.has_role "admin"
|
81
|
-
@admin.has_role "staff"
|
82
|
-
@admin.has_role "moderator", Forum.first
|
83
|
-
@admin.has_role "moderator", Forum.find(2)
|
84
|
-
@admin.has_role "manager", Group
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should set a global role" do
|
88
|
-
expect { @admin.has_role "superadmin" }.to change{ Rolify.role_cname.count }.by(1)
|
89
|
-
superadmin = Rolify.role_cname.last
|
90
|
-
superadmin.name.should eq("superadmin")
|
91
|
-
superadmin.resource.should be(nil)
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should not create another role if already existing" do
|
95
|
-
expect { @admin.has_role "admin" }.not_to change{ Rolify.role_cname.count }
|
96
|
-
expect { @admin.has_role "admin" }.not_to change{ @admin.roles.size }
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should get a global role" do
|
100
|
-
@admin.has_role?("admin").should be(true)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should be able to use dynamic shortcut", :if => dynamic do
|
104
|
-
@admin.is_admin?.should be(true)
|
105
|
-
end
|
106
|
-
|
107
|
-
it "should get any resource request" do
|
108
|
-
@admin.has_role?("admin", Forum.first).should be(true)
|
109
|
-
@admin.has_role?("admin", Forum).should be(true)
|
110
|
-
@admin.has_role?("admin", :any).should be(true)
|
111
|
-
end
|
112
|
-
|
113
|
-
it "should not get another global role" do
|
114
|
-
Rolify.role_cname.create(:name => "global")
|
115
|
-
@admin.has_role?("global").should be(false)
|
116
|
-
@admin.has_role?("global", :any).should be(false)
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should not get an instance scoped role" do
|
120
|
-
@admin.has_role?("moderator", Forum.last).should be(false)
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should not get a class scoped role" do
|
124
|
-
@admin.has_role?("manager", Forum).should be(false)
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should not get inexisting role" do
|
128
|
-
@admin.has_role?("dummy").should be(false)
|
129
|
-
@admin.has_role?("dumber", Forum.first).should be(false)
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should check if user has all of a global roles set" do
|
133
|
-
@admin.has_all_roles?("staff").should be(true)
|
134
|
-
@admin.has_all_roles?("admin", "staff").should be(true)
|
135
|
-
@admin.has_all_roles?("admin", "dummy").should be(false)
|
136
|
-
@admin.has_all_roles?("dummy", "dumber").should be(false)
|
137
|
-
@admin.has_all_roles?({ :name => "admin", :resource => Forum }, { :name => "admin", :resource => Group }).should be(true)
|
138
|
-
@admin.has_all_roles?({ :name => "admin", :resource => :any }, { :name => "admin", :resource => Group }).should be(true)
|
139
|
-
@admin.has_all_roles?({ :name => "admin", :resource => Forum }, { :name => "staff", :resource => Group.last }).should be(true)
|
140
|
-
@admin.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "admin", :resource => Forum.last }).should be(true)
|
141
|
-
@admin.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "dummy", :resource => Forum.last }).should be(false)
|
142
|
-
@admin.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "dummy", :resource => :any }).should be(false)
|
143
|
-
end
|
144
|
-
|
145
|
-
it "should check if user has any of a global roles set" do
|
146
|
-
@admin.has_any_role?("staff").should be(true)
|
147
|
-
@admin.has_any_role?("admin", "staff").should be(true)
|
148
|
-
@admin.has_any_role?("admin", "moderator").should be(true)
|
149
|
-
@admin.has_any_role?("dummy", "dumber").should be(false)
|
150
|
-
@admin.has_any_role?({ :name => "admin", :resource => Forum }, { :name => "admin", :resource => Group }).should be(true)
|
151
|
-
@admin.has_any_role?({ :name => "admin", :resource => :any }, { :name => "admin", :resource => Group }).should be(true)
|
152
|
-
@admin.has_any_role?({ :name => "admin", :resource => Forum }, { :name => "staff", :resource => Group.last }).should be(true)
|
153
|
-
@admin.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "admin", :resource => Forum.last }).should be(true)
|
154
|
-
@admin.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "dummy", :resource => Forum.last }).should be(true)
|
155
|
-
@admin.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "dummy", :resource => :any }).should be(true)
|
156
|
-
end
|
157
|
-
|
158
|
-
it "should remove a global role of a user" do
|
159
|
-
expect { @admin.has_no_role("admin") }.to change{ @admin.roles.size }.by(-1)
|
160
|
-
@admin.has_role?("admin").should be(false)
|
161
|
-
@admin.has_role?("staff").should be(true)
|
162
|
-
@admin.has_role?("moderator", Forum.first).should be(true)
|
163
|
-
@admin.has_role?("manager", Group).should be(true)
|
164
|
-
end
|
165
|
-
|
166
|
-
it "should remove a class scoped role of a user" do
|
167
|
-
expect { @admin.has_no_role("manager") }.to change{ @admin.roles.size }.by(-1)
|
168
|
-
@admin.has_role?("staff").should be(true)
|
169
|
-
@admin.has_role?("moderator", Forum.first).should be(true)
|
170
|
-
@admin.has_role?("manager", Group).should be(false)
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should remove two instance scoped roles of a user" do
|
174
|
-
expect { @admin.has_no_role("moderator") }.to change{ @admin.roles.size }.by(-2)
|
175
|
-
@admin.has_role?("staff").should be(true)
|
176
|
-
@admin.has_role?("moderator", Forum.first).should be(false)
|
177
|
-
@admin.has_role?("moderator", Forum.find(2)).should be(false)
|
178
|
-
@admin.has_role?("manager", Group).should be(true)
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should not remove another global role" do
|
182
|
-
expect { @admin.has_no_role("global") }.not_to change{ @admin.roles.size }
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
context "with an instance scoped role" do
|
187
|
-
before do
|
188
|
-
@moderator = Rolify.user_cname.find(2)
|
189
|
-
@moderator.has_role "moderator", Forum.first
|
190
|
-
@moderator.has_role "soldier"
|
191
|
-
ActiveRecord::Base.logger = nil
|
192
|
-
end
|
193
|
-
|
194
|
-
it "should set an instance scoped role" do
|
195
|
-
expect { @moderator.has_role "visitor", Forum.last }.to change{ Rolify.role_cname.count }.by(1)
|
196
|
-
visitor = Rolify.role_cname.last
|
197
|
-
visitor.name.should eq("visitor")
|
198
|
-
visitor.resource.should eq(Forum.last)
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should not create another role if already existing" do
|
202
|
-
expect { @moderator.has_role "moderator", Forum.first }.not_to change{ Rolify.role_cname.count }
|
203
|
-
expect { @moderator.has_role "moderator", Forum.first }.not_to change{ @moderator.roles.size }
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should get an instance scoped role" do
|
207
|
-
@moderator.has_role?("moderator", Forum.first).should be(true)
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should get any of instance scoped role" do
|
211
|
-
@moderator.has_role?("moderator", :any).should be(true)
|
212
|
-
end
|
213
|
-
|
214
|
-
it "should not get an instance scoped role when asking for a global" do
|
215
|
-
@moderator.has_role?("moderator").should be(false)
|
216
|
-
end
|
217
|
-
|
218
|
-
it "should not get an instance scoped role when asking for a class scoped" do
|
219
|
-
@moderator.has_role?("moderator", Forum).should be(false)
|
220
|
-
end
|
221
|
-
|
222
|
-
it "should be able to use dynamic shortcut", :if => dynamic do
|
223
|
-
@moderator.is_moderator?.should be(false)
|
224
|
-
@moderator.is_moderator_of?(Forum.first).should be(true)
|
225
|
-
@moderator.is_moderator_of?(Forum.last).should be(false)
|
226
|
-
@moderator.is_moderator_of?(Forum).should be(false)
|
227
|
-
end
|
228
|
-
|
229
|
-
it "should not get a global role" do
|
230
|
-
@moderator.has_role?("admin").should be(false)
|
231
|
-
end
|
232
|
-
|
233
|
-
it "should not get the same role on another resource" do
|
234
|
-
Rolify.role_cname.create(:name => "moderator", :resource => Forum.last)
|
235
|
-
@moderator.has_role?("moderator", Forum.last).should be(false)
|
236
|
-
end
|
237
|
-
|
238
|
-
it "should not get the another role on the same resource" do
|
239
|
-
Rolify.role_cname.create(:name => "tourist", :resource => Forum.first)
|
240
|
-
@moderator.has_role?("tourist", Forum.first).should be(false)
|
241
|
-
@moderator.has_role?("tourist", :any).should be(false)
|
242
|
-
end
|
243
|
-
|
244
|
-
it "should not get inexisting role" do
|
245
|
-
@moderator.has_role?("dummy", Forum.last).should be(false)
|
246
|
-
@moderator.has_role?("dumber").should be(false)
|
247
|
-
end
|
248
|
-
|
249
|
-
it "should check if user has all of a scoped roles set" do
|
250
|
-
@moderator.has_role "visitor", Forum.last
|
251
|
-
@moderator.has_all_roles?({ :name => "visitor", :resource => Forum.last }).should be(true)
|
252
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => Forum.last }).should be(true)
|
253
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => :any }).should be(true)
|
254
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => :any }).should be(true)
|
255
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => Forum }).should be(false)
|
256
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first }, { :name => "visitor", :resource => Forum.last }).should be(true)
|
257
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first }, { :name => "moderator", :resource => Forum.last }).should be(false)
|
258
|
-
@moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first }, { :name => "dummy", :resource => Forum.last }).should be(false)
|
259
|
-
@moderator.has_all_roles?({ :name => "dummy", :resource => Forum.first }, { :name => "dumber", :resource => Forum.last }).should be(false)
|
260
|
-
end
|
261
|
-
|
262
|
-
it "should check if user has any of a scoped roles set" do
|
263
|
-
@moderator.has_role "visitor", Forum.last
|
264
|
-
@moderator.has_any_role?({ :name => "visitor", :resource => Forum.last }).should be(true)
|
265
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => Forum.first }, { :name => "visitor", :resource => Forum.last }).should be(true)
|
266
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => Forum.last }).should be(true)
|
267
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => :any }, { :name => "visitor", :resource => :any}).should be(true)
|
268
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => Forum }, { :name => "visitor", :resource => :any }).should be(true)
|
269
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => Forum.first }, { :name => "moderator", :resource => Forum.last }).should be(true)
|
270
|
-
@moderator.has_any_role?({ :name => "moderator", :resource => Forum.first }, { :name => "dummy", :resource => Forum.last }).should be(true)
|
271
|
-
@moderator.has_any_role?({ :name => "dummy", :resource => Forum.first }, { :name => "dumber", :resource => Forum.last }).should be(false)
|
272
|
-
end
|
273
|
-
|
274
|
-
it "should not remove a global role of a user" do
|
275
|
-
expect { @moderator.has_no_role("soldier", Forum.first) }.not_to change{ @moderator.roles.size }
|
276
|
-
end
|
277
|
-
|
278
|
-
it "should remove a scoped role of a user" do
|
279
|
-
expect { @moderator.has_no_role("moderator", Forum.first) }.to change{ @moderator.roles.size }.by(-1)
|
280
|
-
@moderator.has_role?("moderator", Forum.first).should be(false)
|
281
|
-
@moderator.has_role?("soldier").should be(true)
|
282
|
-
end
|
283
|
-
|
284
|
-
it "should not remove another scoped role" do
|
285
|
-
expect { @moderator.has_no_role("visitor", Forum.first) }.not_to change{ @moderator.roles.size }
|
286
|
-
end
|
287
|
-
end
|
288
|
-
|
289
|
-
context "with a class scoped role" do
|
290
|
-
before do
|
291
|
-
@manager = Rolify.user_cname.find(3)
|
292
|
-
@manager.has_role "manager", Forum
|
293
|
-
@manager.has_role "moderator", Forum.first
|
294
|
-
@manager.has_role "moderator", Forum.last
|
295
|
-
@manager.has_role "warrior"
|
296
|
-
end
|
297
|
-
|
298
|
-
it "should set a class scoped role" do
|
299
|
-
expect { @manager.has_role "player", Forum }.to change{ Rolify.role_cname.count }.by(1)
|
300
|
-
player = Rolify.role_cname.last
|
301
|
-
player.name.should eq("player")
|
302
|
-
player.resource_type.should eq(Forum.to_s)
|
303
|
-
end
|
304
|
-
|
305
|
-
it "should not create another role if already existing" do
|
306
|
-
expect { @manager.has_role "manager", Forum }.not_to change{ Rolify.role_cname.count }
|
307
|
-
expect { @manager.has_role "manager", Forum }.not_to change{ @manager.roles.size }
|
308
|
-
end
|
309
|
-
|
310
|
-
it "should get a class scoped role" do
|
311
|
-
@manager.has_role?("manager", Forum).should be(true)
|
312
|
-
@manager.has_role?("manager", Forum.first).should be(true)
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should get any of class scoped role" do
|
316
|
-
@manager.has_role?("manager", :any).should be(true)
|
317
|
-
end
|
318
|
-
|
319
|
-
it "should not get a scoped role when asking for a global" do
|
320
|
-
@manager.has_role?("manager").should be(false)
|
321
|
-
end
|
322
|
-
|
323
|
-
it "should be able to use dynamic shortcut", :if => dynamic do
|
324
|
-
@manager.is_manager?.should be(false)
|
325
|
-
@manager.is_manager_of?(Forum.first).should be(true)
|
326
|
-
@manager.is_manager_of?(Forum.last).should be(true)
|
327
|
-
@manager.is_manager_of?(Forum).should be(true)
|
328
|
-
@manager.is_manager_of?(Group).should be(false)
|
329
|
-
end
|
330
|
-
|
331
|
-
it "should not get a global role" do
|
332
|
-
@manager.has_role?("admin").should be(false)
|
333
|
-
end
|
334
|
-
|
335
|
-
it "should not get the same role on another resource" do
|
336
|
-
Rolify.role_cname.create(:name => "manager", :resource_type => "Group")
|
337
|
-
@manager.has_role?("manager", Group).should be(false)
|
338
|
-
end
|
339
|
-
|
340
|
-
it "should not get the another role on the same resource" do
|
341
|
-
Rolify.role_cname.create(:name => "member", :resource_type => "Forum")
|
342
|
-
@manager.has_role?("member", Forum).should be(false)
|
343
|
-
@manager.has_role?("member", :any).should be(false)
|
344
|
-
end
|
345
|
-
|
346
|
-
it "should not get inexisting role" do
|
347
|
-
@manager.has_role?("dummy", Forum).should be(false)
|
348
|
-
@manager.has_role?("dumber").should be(false)
|
349
|
-
end
|
350
|
-
|
351
|
-
it "should check if user has all of a scoped roles set" do
|
352
|
-
@manager.has_role "player", Forum
|
353
|
-
@manager.has_all_roles?({ :name => "player", :resource => Forum }).should be(true)
|
354
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum }, { :name => "player", :resource => Forum }).should be(true)
|
355
|
-
@manager.has_all_roles?({ :name => "manager", :resource => :any }, { :name => "player", :resource => Forum }).should be(true)
|
356
|
-
@manager.has_all_roles?({ :name => "manager", :resource => :any }, { :name => "player", :resource => :any }).should be(true)
|
357
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum }, { :name => "dummy", :resource => Forum }).should be(false)
|
358
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum }, { :name => "dummy", :resource => :any }).should be(false)
|
359
|
-
@manager.has_all_roles?({ :name => "dummy", :resource => Forum }, { :name => "dumber", :resource => Group }).should be(false)
|
360
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum.first }, { :name => "manager", :resource => Forum.last }).should be(true)
|
361
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Group }, { :name => "moderator", :resource => Forum.first }).should be(false)
|
362
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum.first }, { :name => "moderator", :resource => Forum }).should be(false)
|
363
|
-
@manager.has_all_roles?({ :name => "manager", :resource => Forum.last }, { :name => "warrior", :resource => Forum.last }).should be(true)
|
364
|
-
end
|
365
|
-
|
366
|
-
it "should check if user has any of a scoped roles set" do
|
367
|
-
@manager.has_any_role?({ :name => "player", :resource => Forum }).should be(true)
|
368
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum }, { :name => "player", :resource => Forum }).should be(true)
|
369
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum }, { :name => "player", :resource => :any }).should be(true)
|
370
|
-
@manager.has_any_role?({ :name => "manager", :resource => :any }, { :name => "player", :resource => :any }).should be(true)
|
371
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum }, { :name => "dummy", :resource => Forum }).should be(true)
|
372
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum }, { :name => "dummy", :resource => :any }).should be(true)
|
373
|
-
@manager.has_any_role?({ :name => "dummy", :resource => Forum }, { :name => "dumber", :resource => Group }).should be(false)
|
374
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum.first }, { :name => "manager", :resource => Forum.last }).should be(true)
|
375
|
-
@manager.has_any_role?({ :name => "manager", :resource => Group }, { :name => "moderator", :resource => Forum.first }).should be(true)
|
376
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum.first }, { :name => "moderator", :resource => Forum }).should be(true)
|
377
|
-
@manager.has_any_role?({ :name => "manager", :resource => Forum.last }, { :name => "warrior", :resource => Forum.last }).should be(true)
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should not remove a global role of a user" do
|
381
|
-
expect { @manager.has_no_role("warrior", Forum) }.not_to change{ @manager.roles.size }
|
382
|
-
end
|
383
|
-
|
384
|
-
it "should remove a class scoped role of a user" do
|
385
|
-
expect { @manager.has_no_role("manager", Forum) }.to change{ @manager.roles.size }.by(-1)
|
386
|
-
@manager.has_role?("manager", Forum).should be(false)
|
387
|
-
@manager.has_role?("moderator", Forum.first).should be(true)
|
388
|
-
@manager.has_role?("moderator", Forum.last).should be(true)
|
389
|
-
@manager.has_role?("warrior").should be(true)
|
390
|
-
end
|
391
|
-
|
392
|
-
it "should remove two instance scoped roles of a user" do
|
393
|
-
expect { @manager.has_no_role("moderator", Forum) }.to change{ @manager.roles.size }.by(-2)
|
394
|
-
@manager.has_role?("manager", Forum).should be(true)
|
395
|
-
@manager.has_role?("moderator", Forum.first).should be(false)
|
396
|
-
@manager.has_role?("moderator", Forum.last).should be(false)
|
397
|
-
@manager.has_role?("warrior").should be(true)
|
398
|
-
end
|
399
|
-
|
400
|
-
it "should not remove another scoped role" do
|
401
|
-
expect { @manager.has_no_role("visitor", Forum.first) }.not_to change{ @manager.roles.size }
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
context "with different roles" do
|
406
|
-
before do
|
407
|
-
@user = Rolify.user_cname.find(4)
|
408
|
-
@user.has_role "admin"
|
409
|
-
@user.has_role "anonymous"
|
410
|
-
@user.has_role "moderator", Forum.first
|
411
|
-
@user.has_role "visitor", Forum.last
|
412
|
-
@user.has_role "manager", Forum
|
413
|
-
@user.has_role "leader", Group
|
414
|
-
Rolify.role_cname.create :name => "manager", :resource => Forum.find(1)
|
415
|
-
Rolify.role_cname.create :name => "manager", :resource => Forum.find(2)
|
416
|
-
Rolify.role_cname.create :name => "manager", :resource => Forum.find(3)
|
417
|
-
end
|
418
|
-
|
419
|
-
it "should get a global role" do
|
420
|
-
@user.has_role?("admin").should be(true)
|
421
|
-
@user.has_role?("anonymous").should be(true)
|
422
|
-
end
|
423
|
-
|
424
|
-
it "should get an instance scoped role" do
|
425
|
-
@user.has_role?("moderator", Forum.first).should be(true)
|
426
|
-
@user.has_role?("visitor", Forum.last).should be(true)
|
427
|
-
end
|
428
|
-
|
429
|
-
it "should get an class scoped role" do
|
430
|
-
@user.has_role?("manager", Forum).should be(true)
|
431
|
-
@user.has_role?("leader", Group).should be(true)
|
432
|
-
end
|
433
|
-
|
434
|
-
it "should check if user has all of a mix of global and scoped roles set" do
|
435
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
|
436
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(false)
|
437
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => :any }, { :name => "manager", :resource => Forum }).should be(true)
|
438
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => :any }, { :name => "manager", :resource => :any }).should be(true)
|
439
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Group }).should be(false)
|
440
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Group.first }).should be(false)
|
441
|
-
@user.has_all_roles?({ :name => "admin", :resource => Forum }, { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
|
442
|
-
@user.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
|
443
|
-
@user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum.first }).should be(true)
|
444
|
-
@user.has_all_roles?("dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
|
445
|
-
@user.has_all_roles?("admin", "dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
|
446
|
-
@user.has_all_roles?({ :name => "manager", :resource => Forum.last }, "dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
|
447
|
-
@user.has_all_roles?("admin", { :name => "dumber", :resource => Forum.last }, { :name => "manager", :resource => Forum.last }).should be(false)
|
448
|
-
@user.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum.last }).should be(true)
|
449
|
-
@user.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => :any }, { :name => "manager", :resource => Forum.last }).should be(true)
|
450
|
-
end
|
451
|
-
|
452
|
-
it "should check if user has any of a mix of global and scoped roles set" do
|
453
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
|
454
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => :any }, { :name => "manager", :resource => Forum }).should be(true)
|
455
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => :any }).should be(true)
|
456
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => :any }, { :name => "manager", :resource => :any }).should be(true)
|
457
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
|
458
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Group }).should be(true)
|
459
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Group.first }).should be(true)
|
460
|
-
@user.has_any_role?({ :name => "admin", :resource => Forum }, { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
|
461
|
-
@user.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
|
462
|
-
@user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum.first }).should be(true)
|
463
|
-
@user.has_any_role?("dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
|
464
|
-
@user.has_any_role?({ :name => "manager", :resource => Forum.last }, "dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(true)
|
465
|
-
end
|
466
|
-
end
|
467
|
-
|
468
|
-
end
|
2
|
+
require "rolify/shared_examples/shared_examples_for_roles"
|
3
|
+
require "rolify/shared_examples/shared_examples_for_dynamic"
|
469
4
|
|
470
5
|
describe Rolify do
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
let(:role_cname) { "Role" }
|
475
|
-
let(:dynamic_shortcuts) { true }
|
476
|
-
end
|
6
|
+
it_behaves_like Rolify::Role do
|
7
|
+
let(:user_class) { User }
|
8
|
+
let(:role_class) { Role }
|
477
9
|
end
|
478
10
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
let(:role_cname) { "Role" }
|
483
|
-
let(:dynamic_shortcuts) { false }
|
484
|
-
end
|
485
|
-
end
|
486
|
-
|
487
|
-
context "using custom User and Role class names with dynamic shortcuts", true do
|
488
|
-
it_behaves_like "Rolify module" do
|
489
|
-
let(:user_cname) { "Customer" }
|
490
|
-
let(:role_cname) { "Privilege" }
|
491
|
-
let(:dynamic_shortcuts) { true }
|
492
|
-
end
|
493
|
-
end
|
494
|
-
|
495
|
-
context "using custom User and Role class names without dynamic shortcuts", false do
|
496
|
-
it_behaves_like "Rolify module" do
|
497
|
-
let(:user_cname) { "Customer" }
|
498
|
-
let(:role_cname) { "Privilege" }
|
499
|
-
let(:dynamic_shortcuts) { false }
|
500
|
-
end
|
11
|
+
it_behaves_like Rolify::Dynamic do
|
12
|
+
let(:user_class) { User }
|
13
|
+
let(:role_class) { Role }
|
501
14
|
end
|
502
15
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
shared_context "global role", :scope => :global do
|
2
|
+
subject { admin }
|
3
|
+
|
4
|
+
let(:admin) { user_class.first }
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
load_roles
|
8
|
+
create_other_roles
|
9
|
+
end
|
10
|
+
|
11
|
+
def load_roles
|
12
|
+
role_class.destroy_all
|
13
|
+
admin.roles = []
|
14
|
+
admin.has_role "admin"
|
15
|
+
admin.has_role "staff"
|
16
|
+
admin.has_role "manager", Group
|
17
|
+
admin.has_role "player", Forum
|
18
|
+
admin.has_role "moderator", Forum.last
|
19
|
+
admin.has_role "moderator", Group.last
|
20
|
+
admin.has_role "anonymous", Forum.first
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
shared_context "class scoped role", :scope => :class do
|
25
|
+
subject { manager }
|
26
|
+
|
27
|
+
before(:all) do
|
28
|
+
load_roles
|
29
|
+
create_other_roles
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:manager) { user_class.where(:login => "moderator").first }
|
33
|
+
|
34
|
+
def load_roles
|
35
|
+
role_class.destroy_all
|
36
|
+
manager.roles = []
|
37
|
+
manager.has_role "manager", Forum
|
38
|
+
manager.has_role "player", Forum
|
39
|
+
manager.has_role "warrior"
|
40
|
+
manager.has_role "moderator", Forum.last
|
41
|
+
manager.has_role "moderator", Group.last
|
42
|
+
manager.has_role "anonymous", Forum.first
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
shared_context "instance scoped role", :scope => :instance do
|
47
|
+
subject { moderator }
|
48
|
+
|
49
|
+
before(:all) do
|
50
|
+
load_roles
|
51
|
+
create_other_roles
|
52
|
+
end
|
53
|
+
|
54
|
+
let(:moderator) { user_class.where(:login => "god").first }
|
55
|
+
|
56
|
+
def load_roles
|
57
|
+
role_class.destroy_all
|
58
|
+
moderator.roles = []
|
59
|
+
moderator.has_role "moderator", Forum.first
|
60
|
+
moderator.has_role "anonymous", Forum.last
|
61
|
+
moderator.has_role "visitor", Forum
|
62
|
+
moderator.has_role "soldier"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def create_other_roles
|
67
|
+
role_class.create :name => "superhero"
|
68
|
+
role_class.create :name => "admin", :resource_type => "Group"
|
69
|
+
role_class.create :name => "admin", :resource => Forum.first
|
70
|
+
role_class.create :name => "VIP", :resource_type => "Forum"
|
71
|
+
role_class.create :name => "manager", :resource => Forum.last
|
72
|
+
role_class.create :name => "roomate", :resource => Forum.first
|
73
|
+
role_class.create :name => "moderator", :resource => Group.first
|
74
|
+
end
|