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.
Files changed (40) hide show
  1. data/.travis.yml +11 -7
  2. data/CHANGELOG.rdoc +6 -0
  3. data/README.rdoc +36 -4
  4. data/UPGRADE.rdoc +22 -0
  5. data/lib/generators/rolify/role/role_generator.rb +5 -6
  6. data/lib/generators/rolify/role/templates/README-active_record +21 -0
  7. data/lib/generators/rolify/role/templates/README-mongoid +17 -0
  8. data/lib/generators/rolify/role/templates/initializer.rb +5 -6
  9. data/lib/generators/rolify/role/templates/{role.rb → role-active_record.rb} +0 -0
  10. data/lib/generators/rolify/role/templates/role-mongoid.rb +8 -0
  11. data/lib/rolify/adapters/active_record.rb +83 -0
  12. data/lib/rolify/adapters/base.rb +53 -0
  13. data/lib/rolify/adapters/mongoid.rb +87 -0
  14. data/lib/rolify/configure.rb +40 -0
  15. data/lib/rolify/dynamic.rb +21 -0
  16. data/lib/rolify/railtie.rb +20 -0
  17. data/lib/rolify/resource.rb +25 -0
  18. data/lib/rolify/role.rb +32 -110
  19. data/lib/rolify/version.rb +1 -1
  20. data/lib/rolify.rb +35 -0
  21. data/rolify.gemspec +3 -2
  22. data/spec/generators/rolify/role/role_generator_spec.rb +75 -16
  23. data/spec/rolify/config_spec.rb +189 -0
  24. data/spec/rolify/custom_spec.rb +15 -0
  25. data/spec/rolify/resource_spec.rb +317 -0
  26. data/spec/rolify/role_spec.rb +8 -495
  27. data/spec/rolify/shared_contexts.rb +74 -0
  28. data/spec/rolify/shared_examples/shared_examples_for_dynamic.rb +110 -0
  29. data/spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb +71 -0
  30. data/spec/rolify/shared_examples/shared_examples_for_has_any_role.rb +71 -0
  31. data/spec/rolify/shared_examples/shared_examples_for_has_no_role.rb +97 -0
  32. data/spec/rolify/shared_examples/shared_examples_for_has_role_getter.rb +135 -0
  33. data/spec/rolify/shared_examples/shared_examples_for_has_role_setter.rb +92 -0
  34. data/spec/rolify/shared_examples/shared_examples_for_roles.rb +80 -0
  35. data/spec/spec_helper.rb +10 -5
  36. data/spec/support/{models.rb → adapters/active_record.rb} +11 -8
  37. data/spec/support/adapters/mongoid.rb +56 -0
  38. data/spec/support/data.rb +14 -5
  39. metadata +76 -20
  40. data/benchmarks/performance.rb +0 -51
@@ -1,502 +1,15 @@
1
1
  require "spec_helper"
2
-
3
- shared_examples_for "Rolify module" do |dynamic|
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
- context "using default Role and User class names with dynamic shortcuts", true do
472
- it_behaves_like "Rolify module" do
473
- let(:user_cname) { "User" }
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
- context "using default Role and User class names without dynamic shortcuts", false do
480
- it_behaves_like "Rolify module" do
481
- let(:user_cname) { "User" }
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