rolify 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -2
- data/CHANGELOG.rdoc +11 -1
- data/Gemfile +10 -12
- data/README.md +7 -1
- data/gemfiles/Gemfile.rails-3.2 +20 -13
- data/gemfiles/Gemfile.rails-4.0 +22 -15
- data/lib/rolify/adapters/active_record/resource_adapter.rb +1 -1
- data/lib/rolify/adapters/active_record/role_adapter.rb +1 -1
- data/lib/rolify/configure.rb +2 -2
- data/lib/rolify/matchers.rb +18 -0
- data/lib/rolify/railtie.rb +1 -1
- data/lib/rolify/role.rb +5 -1
- data/lib/rolify/version.rb +1 -1
- data/rolify.gemspec +1 -2
- data/spec/generators/rolify/rolify_activerecord_generator_spec.rb +0 -1
- data/spec/generators/rolify/rolify_mongoid_generator_spec.rb +0 -2
- data/spec/generators_helper.rb +10 -6
- data/spec/rolify/config_spec.rb +14 -14
- data/spec/rolify/resource_spec.rb +3 -2
- data/spec/rolify/shared_examples/shared_examples_for_add_role.rb +8 -15
- data/spec/rolify/shared_examples/shared_examples_for_dynamic.rb +0 -4
- data/spec/rolify/shared_examples/shared_examples_for_remove_role.rb +0 -31
- data/spec/rolify/shared_examples/shared_examples_for_roles.rb +2 -1
- data/spec/spec_helper.rb +1 -1
- metadata +5 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0230aba90b592f3e2873858db202652f0610e63a
|
4
|
+
data.tar.gz: 213155ee533962044ebe70808910f6a27fb40a35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ac7b0db9d222976eea090aa5fc8f91e4861e61175385316625e4d4cd85b11844f6b61013f655735895380e7fa908f629acda1f6a3dc8704837ea58d295f1703
|
7
|
+
data.tar.gz: 2f7a94b6bef880b5bad088fb66b5623677a631a8d1b0371f3f942fc821054a8807b1b1d622232f63548b841d1245bb8495b004dbb0a25b008f90f8c5e8d0f035
|
data/.travis.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
rvm:
|
2
2
|
- 1.9.3
|
3
3
|
- 2.0.0
|
4
|
-
-
|
4
|
+
- 2.1.0
|
5
|
+
- rbx
|
5
6
|
- jruby-19mode
|
6
7
|
|
7
8
|
gemfile:
|
@@ -14,4 +15,11 @@ env:
|
|
14
15
|
|
15
16
|
services: mongodb
|
16
17
|
|
17
|
-
|
18
|
+
matrix:
|
19
|
+
exclude:
|
20
|
+
- rvm: rbx
|
21
|
+
gemfile: gemfiles/Gemfile.rails-3.2
|
22
|
+
env: ADAPTER=mongoid
|
23
|
+
- rvm: rbx
|
24
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
25
|
+
env: ADAPTER=mongoid
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
= 3.
|
1
|
+
= 3.4 (Jan 28, 2014)
|
2
|
+
* fixed an initializer bug preventing the rails app to boot
|
3
|
+
* enhanced documentation regarding <tt>with_role</tt> method (thanks to @vicomte)
|
4
|
+
* added <tt>select(:id)</tt> in SQL subquery used by <tt>in</tt> method in ActiveRecord adapter (thanks to @ryanaip and @badaboda)
|
5
|
+
* improved speed when removing roles using <tt>LIMIT(1)</tt> instead of <tt>COUNT</tt> (thanks to @yankovski)
|
6
|
+
* fixed travis builds for rubinius and mongoid
|
7
|
+
* fixed sanity check running before <tt>Rolify.config</tt> to ensure roles table exists
|
8
|
+
* fixed <tt>has_any_role?</tt> to work with unsaved records (thanks to @mhw)
|
9
|
+
* fixed specs for Mongoid
|
10
|
+
|
11
|
+
= 3.3 (Jan 26, 2014)
|
2
12
|
* <b>DEPRECATION NOTICE:</b>Rails 3.1 support dropped: if you use Rails 3.1, please stick to rolify 3.2
|
3
13
|
* code cleanup in finders methods
|
4
14
|
* generators rewritten entirely. now using ActiveRecord/Mongoid model generator to create Role model
|
data/Gemfile
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
group :test do
|
4
|
+
case ENV["ADAPTER"]
|
5
|
+
when nil, "active_record"
|
6
6
|
gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.0.rc", :platform => "jruby"
|
7
7
|
gem "sqlite3", :platform => "ruby"
|
8
|
+
gem "activerecord", ">= 3.2.0", :require => "active_record"
|
9
|
+
when "mongoid"
|
10
|
+
gem "mongoid", ">= 3.1"
|
11
|
+
gem "bson_ext", :platform => "ruby"
|
12
|
+
else
|
13
|
+
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
8
14
|
end
|
9
|
-
|
10
|
-
when "mongoid"
|
11
|
-
gem "mongoid", ">= 3.1"
|
12
|
-
gem "bson_ext", :platform => "ruby"
|
13
|
-
else
|
14
|
-
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
15
|
-
end
|
16
|
-
|
17
|
-
group :test do
|
15
|
+
|
18
16
|
gem 'coveralls', :require => false
|
19
17
|
end
|
20
18
|
|
data/README.md
CHANGED
@@ -187,6 +187,10 @@ Forum.with_role(:admin, current_user)
|
|
187
187
|
|
188
188
|
User.with_any_role(:user, :admin)
|
189
189
|
# => [ list of User instances that has role "admin" or "user" binded to it ]
|
190
|
+
User.with_role(:site_admin, current_site)
|
191
|
+
# => [ list of User instances that have a scoped role of "site_admin" to a site instance ]
|
192
|
+
User.with_role(:site_admin, :any)
|
193
|
+
# => [ list of User instances that have a scoped role of "site_admin" for any site instances ]
|
190
194
|
|
191
195
|
Forum.find_roles
|
192
196
|
# => [ list of roles that binded to any Forum instance or to the Forum class ]
|
@@ -211,7 +215,9 @@ Please read the [upgrade instructions](UPGRADE.rdoc).
|
|
211
215
|
|
212
216
|
## Known issues
|
213
217
|
|
214
|
-
If you are using Mongoid and/or less-rails gem, please read [this](https://github.com/EppO/rolify/wiki/FAQ#when-i-start-rails-using-server-console-whatever-i-get-this-error)
|
218
|
+
* If you are using Mongoid and/or less-rails gem, please read [this](https://github.com/EppO/rolify/wiki/FAQ#when-i-start-rails-using-server-console-whatever-i-get-this-error)
|
219
|
+
* Moped library (ruby driver for Mongodb used by Mongoid) doesn't support rubinius 2.2 yet (see https://github.com/mongoid/moped/issues/231)
|
220
|
+
* If you use Rails 4 and Mongoid, use Mongoid ~> 4 (not released yet). rolify is fully tested with Rails 4 and Mongoid master branch
|
215
221
|
|
216
222
|
## Questions or Problems?
|
217
223
|
|
data/gemfiles/Gemfile.rails-3.2
CHANGED
@@ -1,21 +1,28 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
gem
|
10
|
-
when "mongoid"
|
11
|
-
gem "mongoid", "~> 3.1"
|
12
|
-
gem "bson_ext", :platform => "ruby"
|
13
|
-
else
|
14
|
-
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
3
|
+
platforms :rbx do
|
4
|
+
gem 'racc'
|
5
|
+
gem 'rubysl', '~> 2.0'
|
6
|
+
gem 'psych'
|
7
|
+
gem 'json'
|
8
|
+
gem 'rubinius-coverage', '~> 2.0'
|
9
|
+
gem 'rubysl-test-unit'
|
15
10
|
end
|
16
11
|
|
17
12
|
group :test do
|
13
|
+
case ENV["ADAPTER"]
|
14
|
+
when nil, "active_record"
|
15
|
+
gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.0.rc", :platform => "jruby"
|
16
|
+
gem "sqlite3", :platform => "ruby"
|
17
|
+
gem "activerecord", ">= 3.2.0", :require => "active_record"
|
18
|
+
when "mongoid"
|
19
|
+
gem "mongoid", ">= 3.1"
|
20
|
+
gem "bson_ext", :platform => "ruby"
|
21
|
+
else
|
22
|
+
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
23
|
+
end
|
24
|
+
|
18
25
|
gem 'coveralls', :require => false
|
19
26
|
end
|
20
27
|
|
21
|
-
gemspec :path => '../'
|
28
|
+
gemspec :path => '../'
|
data/gemfiles/Gemfile.rails-4.0
CHANGED
@@ -1,27 +1,34 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
gem
|
6
|
-
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
|
10
|
-
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
3
|
+
platforms :rbx do
|
4
|
+
gem 'racc'
|
5
|
+
gem 'rubysl', '~> 2.0'
|
6
|
+
gem 'psych'
|
7
|
+
gem 'json'
|
8
|
+
gem 'rubinius-coverage', '~> 2.0'
|
9
|
+
gem 'rubysl-test-unit'
|
11
10
|
end
|
12
11
|
|
13
12
|
group :test do
|
14
|
-
gem "rails", "~> 4.0.
|
13
|
+
gem "rails", "~> 4.0.1"
|
15
14
|
gem "ammeter"
|
16
15
|
gem "rake"
|
17
16
|
gem "rspec"
|
18
17
|
gem "rspec-rails"
|
19
18
|
gem "fuubar"
|
20
19
|
gem "bundler"
|
21
|
-
|
22
|
-
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.0.beta", :platform => "jruby"
|
23
|
-
gem "sqlite3", :platform => "ruby"
|
24
|
-
gem "activerecord", "~> 4.0.0.rc", :require => "active_record"
|
25
|
-
gem "mongoid", :git => "git://github.com/mongoid/mongoid.git"
|
20
|
+
|
26
21
|
gem 'coveralls', :require => false
|
27
|
-
|
22
|
+
|
23
|
+
case ENV["ADAPTER"]
|
24
|
+
when nil, "active_record"
|
25
|
+
gem "activerecord", "~> 4.0.1", :require => "active_record"
|
26
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.5", :platform => "jruby"
|
27
|
+
gem "sqlite3", :platform => "ruby"
|
28
|
+
when "mongoid"
|
29
|
+
gem "mongoid", github: 'mongoid/mongoid'
|
30
|
+
gem "bson_ext", :platform => "ruby"
|
31
|
+
else
|
32
|
+
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
33
|
+
end
|
34
|
+
end
|
@@ -12,7 +12,7 @@ module Rolify
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def in(relation, user, role_names)
|
15
|
-
roles = user.roles.where(:name => role_names)
|
15
|
+
roles = user.roles.where(:name => role_names).select(:id)
|
16
16
|
relation.where("#{quote(role_class.table_name)}.#{role_class.primary_key} IN (?) AND ((resource_id = #{quote(relation.table_name)}.#{relation.primary_key}) OR (resource_id IS NULL))", roles)
|
17
17
|
end
|
18
18
|
|
@@ -24,7 +24,7 @@ module Rolify
|
|
24
24
|
if roles
|
25
25
|
relation.roles.delete(roles)
|
26
26
|
roles.each do |role|
|
27
|
-
role.destroy if role.send(ActiveSupport::Inflector.demodulize(user_class).tableize.to_sym).empty?
|
27
|
+
role.destroy if role.send(ActiveSupport::Inflector.demodulize(user_class).tableize.to_sym).limit(1).empty?
|
28
28
|
end
|
29
29
|
end
|
30
30
|
roles
|
data/lib/rolify/configure.rb
CHANGED
@@ -29,7 +29,7 @@ module Rolify
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def use_dynamic_shortcuts
|
32
|
-
self.dynamic_shortcuts = true
|
32
|
+
self.dynamic_shortcuts = true
|
33
33
|
end
|
34
34
|
|
35
35
|
def use_defaults
|
@@ -45,7 +45,7 @@ module Rolify
|
|
45
45
|
role_cnames = [ "Role" ] if role_cnames.empty?
|
46
46
|
role_cnames.each do |role_cname|
|
47
47
|
role_class = role_cname.constantize
|
48
|
-
if role_class.superclass.to_s == "ActiveRecord" && !role_class.table_exists?
|
48
|
+
if role_class.superclass.to_s == "ActiveRecord::Base" && !role_class.table_exists?
|
49
49
|
warn "[WARN] table '#{role_cname}' doesn't exist. Did you run the migration ? Ignoring rolify config."
|
50
50
|
return false
|
51
51
|
end
|
data/lib/rolify/matchers.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
|
1
3
|
RSpec::Matchers.define :have_role do |*args|
|
2
4
|
match do |resource|
|
3
5
|
resource.has_role?(*args)
|
@@ -11,3 +13,19 @@ RSpec::Matchers.define :have_role do |*args|
|
|
11
13
|
"expected not to have role #{args.map(&:inspect).join(" ")}"
|
12
14
|
end
|
13
15
|
end
|
16
|
+
|
17
|
+
RSpec::Matchers.define :be_the_same_role do |*expected|
|
18
|
+
match do |actual|
|
19
|
+
if expected.size > 1
|
20
|
+
if expected[1].is_a? Class
|
21
|
+
actual[:name] == expected[0] && actual[:resource_type] == expected[1].to_s
|
22
|
+
else
|
23
|
+
actual[:name] == expected[0] &&
|
24
|
+
actual[:resource_type] == expected[1].class.name &&
|
25
|
+
actual[:resource_id] == expected[1].id
|
26
|
+
end
|
27
|
+
else
|
28
|
+
actual[:name] == expected[0]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rolify/railtie.rb
CHANGED
data/lib/rolify/role.rb
CHANGED
@@ -44,7 +44,11 @@ module Rolify
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def has_any_role?(*args)
|
47
|
-
|
47
|
+
if new_record?
|
48
|
+
args.any? { |r| self.has_role?(r) }
|
49
|
+
else
|
50
|
+
self.class.adapter.where(self.roles, *args).size > 0
|
51
|
+
end
|
48
52
|
end
|
49
53
|
|
50
54
|
def only_has_role?(role_name, resource = nil)
|
data/lib/rolify/version.rb
CHANGED
data/rolify.gemspec
CHANGED
@@ -6,6 +6,7 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "rolify"
|
7
7
|
s.version = Rolify::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
+
s.license = "MIT"
|
9
10
|
s.authors = ["Florent Monbillard"]
|
10
11
|
s.email = ["f.monbillard@gmail.com"]
|
11
12
|
s.homepage = "http://eppo.github.com/rolify/"
|
@@ -25,6 +26,4 @@ Gem::Specification.new do |s|
|
|
25
26
|
s.add_development_dependency "rspec-rails", ">= 2.0"
|
26
27
|
s.add_development_dependency "bundler"
|
27
28
|
s.add_development_dependency "fuubar"
|
28
|
-
s.add_development_dependency "activerecord", ">= 3.2.0"
|
29
|
-
s.add_development_dependency "mongoid", ">= 3.1"
|
30
29
|
end
|
data/spec/generators_helper.rb
CHANGED
@@ -3,19 +3,23 @@ require "bundler/setup"
|
|
3
3
|
|
4
4
|
require 'rolify'
|
5
5
|
require 'rolify/matchers'
|
6
|
-
require 'rails
|
6
|
+
require 'rails'
|
7
7
|
|
8
8
|
require 'coveralls'
|
9
9
|
Coveralls.wear_merged!
|
10
10
|
|
11
|
+
ENV['ADAPTER'] ||= 'active_record'
|
12
|
+
|
13
|
+
if ENV['ADAPTER'] == 'active_record'
|
14
|
+
require 'active_record/railtie'
|
15
|
+
else
|
16
|
+
require 'mongoid'
|
17
|
+
end
|
18
|
+
|
11
19
|
module TestApp
|
12
20
|
class Application < ::Rails::Application
|
13
21
|
config.root = File.dirname(__FILE__)
|
14
22
|
end
|
15
23
|
end
|
16
24
|
|
17
|
-
require 'ammeter/init'
|
18
|
-
|
19
|
-
ENV['ADAPTER'] ||= 'active_record'
|
20
|
-
|
21
|
-
|
25
|
+
require 'ammeter/init'
|
data/spec/rolify/config_spec.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require "active_record"
|
3
|
-
require "mongoid"
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
if ENV['ADAPTER'] == 'active_record'
|
4
|
+
class ARUser < ActiveRecord::Base
|
5
|
+
extend Rolify
|
6
|
+
end
|
7
|
+
else
|
8
|
+
class MUser
|
9
|
+
include Mongoid::Document
|
10
|
+
extend Rolify
|
11
|
+
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe Rolify do
|
@@ -35,14 +35,14 @@ describe Rolify do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
describe :orm do
|
38
|
-
context "using defaults values" do
|
38
|
+
context "using defaults values", :if => ENV['ADAPTER'] == 'active_record' do
|
39
39
|
subject { Rolify.orm }
|
40
40
|
|
41
41
|
it { should eq("active_record") }
|
42
42
|
|
43
43
|
context "on the User class" do
|
44
44
|
before do
|
45
|
-
|
45
|
+
subject.rolify
|
46
46
|
end
|
47
47
|
|
48
48
|
subject { ARUser }
|
@@ -52,7 +52,7 @@ describe Rolify do
|
|
52
52
|
|
53
53
|
context "on the Forum class" do
|
54
54
|
before do
|
55
|
-
|
55
|
+
subject.resourcify
|
56
56
|
end
|
57
57
|
|
58
58
|
subject { Forum }
|
@@ -61,7 +61,7 @@ describe Rolify do
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
-
context "using custom values" do
|
64
|
+
context "using custom values", :if => ENV['ADAPTER'] == 'mongoid' do
|
65
65
|
context "using :orm setter method" do
|
66
66
|
before do
|
67
67
|
Rolify.orm = "mongoid"
|
@@ -165,7 +165,7 @@ describe Rolify do
|
|
165
165
|
its(:dynamic_shortcuts) { should be_true }
|
166
166
|
its(:orm) { should eq("mongoid") }
|
167
167
|
|
168
|
-
context "on the User class" do
|
168
|
+
context "on the User class", :if => ENV['ADAPTER'] == 'mongoid' do
|
169
169
|
before do
|
170
170
|
MUser.rolify
|
171
171
|
end
|
@@ -46,7 +46,7 @@ describe Rolify::Resource do
|
|
46
46
|
it "should be able to modify the resource", :if => ENV['ADAPTER'] == 'active_record' do
|
47
47
|
forum_resource = subject.with_role(:forum).first
|
48
48
|
forum_resource.name = "modified name"
|
49
|
-
expect
|
49
|
+
expect { forum_resource.save }.not_to raise_error
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -339,12 +339,13 @@ describe Rolify::Resource do
|
|
339
339
|
end
|
340
340
|
|
341
341
|
describe "#roles" do
|
342
|
+
before(:all) { Role.destroy_all }
|
342
343
|
subject { Forum.first }
|
343
344
|
|
344
345
|
it { should respond_to :roles }
|
345
346
|
|
346
347
|
context "on a Forum instance" do
|
347
|
-
its(:roles) { should
|
348
|
+
its(:roles) { should match_array( [ forum_role, sneaky_role ]) }
|
348
349
|
its(:roles) { should_not include(group_role, godfather_role, tourist_role) }
|
349
350
|
end
|
350
351
|
|
@@ -10,11 +10,9 @@ shared_examples_for "#add_role_examples" do |param_name, param_method|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
context "considering a new global role" do
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
its(:resource_type) { should be(nil) }
|
17
|
-
its(:resource_id) { should be(nil) }
|
13
|
+
it "creates a new class scoped role" do
|
14
|
+
expect(subject.add_role "expert".send(param_method)).to be_the_same_role("expert")
|
15
|
+
end
|
18
16
|
end
|
19
17
|
|
20
18
|
context "should not create another role" do
|
@@ -40,11 +38,9 @@ shared_examples_for "#add_role_examples" do |param_name, param_method|
|
|
40
38
|
end
|
41
39
|
|
42
40
|
context "considering a new class scoped role" do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
its(:resource_type) { should eq(Forum.to_s) }
|
47
|
-
its(:resource_id) { should be(nil) }
|
41
|
+
it "creates a new class scoped role" do
|
42
|
+
expect(subject.add_role "boss".send(param_method), Forum).to be_the_same_role("boss", Forum)
|
43
|
+
end
|
48
44
|
end
|
49
45
|
|
50
46
|
context "should not create another role" do
|
@@ -69,11 +65,8 @@ shared_examples_for "#add_role_examples" do |param_name, param_method|
|
|
69
65
|
expect { subject.add_role "member".send(param_method), Forum.last }.to change { role_class.count }.by(1)
|
70
66
|
end
|
71
67
|
|
72
|
-
|
73
|
-
subject
|
74
|
-
|
75
|
-
its(:name) { should eq("member") }
|
76
|
-
its(:resource) { should eq(Forum.last) }
|
68
|
+
it "creates a new instance scoped role" do
|
69
|
+
expect(subject.add_role "mate".send(param_method), Forum.last).to be_the_same_role("mate", Forum.last)
|
77
70
|
end
|
78
71
|
|
79
72
|
context "should not create another role" do
|
@@ -44,7 +44,6 @@ shared_examples_for Rolify::Dynamic do
|
|
44
44
|
moderator
|
45
45
|
end
|
46
46
|
|
47
|
-
it { should respond_to(:is_admin?).with(0).arguments }
|
48
47
|
it { should respond_to(:is_moderator?).with(0).arguments }
|
49
48
|
it { should respond_to(:is_moderator_of?).with(1).arguments }
|
50
49
|
it { should_not respond_to(:is_god?) }
|
@@ -76,9 +75,6 @@ shared_examples_for Rolify::Dynamic do
|
|
76
75
|
manager
|
77
76
|
end
|
78
77
|
|
79
|
-
it { should respond_to(:is_admin?).with(0).arguments }
|
80
|
-
it { should respond_to(:is_moderator?).with(0).arguments }
|
81
|
-
it { should respond_to(:is_moderator_of?).with(1).arguments }
|
82
78
|
it { should respond_to(:is_manager?).with(0).arguments }
|
83
79
|
it { should respond_to(:is_manager_of?).with(1).arguments }
|
84
80
|
it { should_not respond_to(:is_god?) }
|
@@ -5,33 +5,19 @@ shared_examples_for "#remove_role_examples" do |param_name, param_method|
|
|
5
5
|
it { expect { subject.remove_role("admin".send(param_method)) }.to change { subject.roles.size }.by(-1) }
|
6
6
|
|
7
7
|
it { should_not have_role("admin".send(param_method)) }
|
8
|
-
it { should have_role("staff".send(param_method)) }
|
9
|
-
it { should have_role("manager".send(param_method), Group) }
|
10
|
-
it { should have_role("moderator".send(param_method), Forum.last) }
|
11
|
-
it { should have_role("moderator".send(param_method), Group.last) }
|
12
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
13
8
|
end
|
14
9
|
|
15
10
|
context "being a class scoped role to the user" do
|
16
11
|
it { expect { subject.remove_role("manager".send(param_method)) }.to change { subject.roles.size }.by(-1) }
|
17
12
|
|
18
|
-
it { should_not have_role("admin".send(param_method)) }
|
19
|
-
it { should have_role("staff".send(param_method)) }
|
20
13
|
it { should_not have_role("manager".send(param_method), Group) }
|
21
|
-
it { should have_role("moderator".send(param_method), Forum.last) }
|
22
|
-
it { should have_role("moderator".send(param_method), Group.last) }
|
23
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
24
14
|
end
|
25
15
|
|
26
16
|
context "being instance scoped roles to the user" do
|
27
17
|
it { expect { subject.remove_role("moderator".send(param_method)) }.to change { subject.roles.size }.by(-2) }
|
28
18
|
|
29
|
-
it { should_not have_role("admin".send(param_method)) }
|
30
|
-
it { should have_role("staff".send(param_method)) }
|
31
|
-
it { should_not have_role("manager".send(param_method), Group) }
|
32
19
|
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
33
20
|
it { should_not have_role("moderator".send(param_method), Group.last) }
|
34
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
35
21
|
end
|
36
22
|
|
37
23
|
context "not being a role of the user" do
|
@@ -46,12 +32,7 @@ shared_examples_for "#remove_role_examples" do |param_name, param_method|
|
|
46
32
|
|
47
33
|
it { expect { subject.remove_role("staff".send(param_method)) }.not_to change { role_class.count } }
|
48
34
|
|
49
|
-
it { should_not have_role("admin".send(param_method)) }
|
50
35
|
it { should_not have_role("staff".send(param_method)) }
|
51
|
-
it { should_not have_role("manager".send(param_method), Group) }
|
52
|
-
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
53
|
-
it { should_not have_role("moderator".send(param_method), Group.last) }
|
54
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
55
36
|
end
|
56
37
|
|
57
38
|
context "not used by anyone else" do
|
@@ -71,23 +52,14 @@ shared_examples_for "#remove_role_examples" do |param_name, param_method|
|
|
71
52
|
context "being a class scoped role to the user" do
|
72
53
|
it { expect { subject.remove_role("manager".send(param_method), Forum) }.to change{ subject.roles.size }.by(-1) }
|
73
54
|
|
74
|
-
it { should have_role("warrior") }
|
75
55
|
it { should_not have_role("manager", Forum) }
|
76
|
-
it { should have_role("player", Forum) }
|
77
|
-
it { should have_role("moderator".send(param_method), Forum.last) }
|
78
|
-
it { should have_role("moderator".send(param_method), Group.last) }
|
79
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
80
56
|
end
|
81
57
|
|
82
58
|
context "being instance scoped role to the user" do
|
83
59
|
it { expect { subject.remove_role("moderator".send(param_method), Forum) }.to change { subject.roles.size }.by(-1) }
|
84
60
|
|
85
|
-
it { should have_role("warrior") }
|
86
|
-
it { should_not have_role("manager", Forum) }
|
87
|
-
it { should have_role("player", Forum) }
|
88
61
|
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
89
62
|
it { should have_role("moderator".send(param_method), Group.last) }
|
90
|
-
it { should have_role("anonymous".send(param_method), Forum.first) }
|
91
63
|
end
|
92
64
|
|
93
65
|
context "not being a role of the user" do
|
@@ -107,10 +79,7 @@ shared_examples_for "#remove_role_examples" do |param_name, param_method|
|
|
107
79
|
context "being instance scoped role to the user" do
|
108
80
|
it { expect { subject.remove_role("moderator".send(param_method), Forum.first) }.to change { subject.roles.size }.by(-1) }
|
109
81
|
|
110
|
-
it { should have_role("soldier") }
|
111
|
-
it { should have_role("visitor", Forum) }
|
112
82
|
it { should_not have_role("moderator", Forum.first) }
|
113
|
-
it { should have_role("anonymous", Forum.last) }
|
114
83
|
end
|
115
84
|
|
116
85
|
context "not being a role of the user" do
|
@@ -93,10 +93,11 @@ shared_examples_for Rolify::Role do
|
|
93
93
|
|
94
94
|
it { should have_role :admin }
|
95
95
|
it { should have_role :moderator, Forum.first }
|
96
|
+
it { subject.has_any_role?(:admin).should be_true }
|
96
97
|
end
|
97
98
|
|
98
99
|
context "on the Class level ", :scope => :mixed do
|
99
100
|
it_should_behave_like :finders, "String", :to_s
|
100
101
|
it_should_behave_like :finders, "Symbol", :to_sym
|
101
102
|
end
|
102
|
-
end
|
103
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rolify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florent Monbillard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ammeter
|
@@ -94,34 +94,6 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: activerecord
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 3.2.0
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 3.2.0
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: mongoid
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '3.1'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '3.1'
|
125
97
|
description: Very simple Roles library without any authorization enforcement supporting
|
126
98
|
scope on resource objects (instance or class). Supports ActiveRecord and Mongoid
|
127
99
|
ORMs.
|
@@ -200,7 +172,8 @@ files:
|
|
200
172
|
- spec/support/data.rb
|
201
173
|
- spec/support/schema.rb
|
202
174
|
homepage: http://eppo.github.com/rolify/
|
203
|
-
licenses:
|
175
|
+
licenses:
|
176
|
+
- MIT
|
204
177
|
metadata: {}
|
205
178
|
post_install_message:
|
206
179
|
rdoc_options: []
|
@@ -218,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
191
|
version: '0'
|
219
192
|
requirements: []
|
220
193
|
rubyforge_project: rolify
|
221
|
-
rubygems_version: 2.0
|
194
|
+
rubygems_version: 2.2.0
|
222
195
|
signing_key:
|
223
196
|
specification_version: 4
|
224
197
|
summary: Roles library with resource scoping
|
@@ -252,4 +225,3 @@ test_files:
|
|
252
225
|
- spec/support/adapters/mongoid.yml
|
253
226
|
- spec/support/data.rb
|
254
227
|
- spec/support/schema.rb
|
255
|
-
has_rdoc:
|