rolify 5.0.0 → 5.1.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 +74 -11
- data/Appraisals +41 -0
- data/CHANGELOG.rdoc +6 -0
- data/CONTRIBUTORS +2 -0
- data/Gemfile +1 -19
- data/LICENSE +1 -1
- data/README.md +15 -15
- data/Rakefile +5 -1
- data/gemfiles/activerecord_3.gemfile +19 -0
- data/gemfiles/activerecord_4.gemfile +19 -0
- data/gemfiles/activerecord_5.gemfile +27 -0
- data/gemfiles/mongoid_3.gemfile +19 -0
- data/gemfiles/mongoid_4.gemfile +19 -0
- data/gemfiles/mongoid_5.gemfile +19 -0
- data/lib/generators/active_record/rolify_generator.rb +39 -3
- data/lib/rolify.rb +0 -1
- data/lib/rolify/adapters/active_record/resource_adapter.rb +13 -7
- data/lib/rolify/adapters/active_record/role_adapter.rb +1 -0
- data/lib/rolify/adapters/mongoid/role_adapter.rb +2 -1
- data/lib/rolify/dynamic.rb +2 -16
- data/lib/rolify/role.rb +1 -1
- data/lib/rolify/version.rb +1 -1
- data/spec/generators/rolify/rolify_activerecord_generator_spec.rb +12 -3
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b81efc86ee3d4c660521e8b8cb7d1a5045b2ce7
|
4
|
+
data.tar.gz: 84f19deb5072b9d46dcade6c8d5db085dd8cfb60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0209a0003ff41826654b23c1ebd6eeb556aef5d8e6554dd86a63362e82a69cc624abdc903063d65f4ab706a42a4c908cb52662c6db9cec1a8a38725f4274afe
|
7
|
+
data.tar.gz: 8aee6f2b0fa61dfe9c04aa42c2a496b7b907cb74f44b4c542a6b0587f46686085f5a30457e4168ba1485ed24eb3dd089e17e99a66d86da21e8c724767a2bf5d1
|
data/.travis.yml
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
3
|
|
4
|
-
rvm:
|
5
|
-
- 2.2.3
|
6
|
-
- 2.2.2
|
7
|
-
- 2.1.2
|
8
|
-
- 2.0.0
|
9
|
-
|
10
4
|
before_install:
|
11
5
|
- gem update --system
|
12
6
|
- gem install bundler
|
@@ -14,11 +8,80 @@ before_install:
|
|
14
8
|
|
15
9
|
script: bundle exec rake
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
matrix:
|
12
|
+
include:
|
13
|
+
- rvm: 2.3.0
|
14
|
+
gemfile: gemfiles/activerecord_3.gemfile
|
15
|
+
env: ADAPTER=active_record
|
16
|
+
- rvm: 2.2.4
|
17
|
+
gemfile: gemfiles/activerecord_3.gemfile
|
18
|
+
env: ADAPTER=active_record
|
19
|
+
- rvm: 2.1.8
|
20
|
+
gemfile: gemfiles/activerecord_3.gemfile
|
21
|
+
env: ADAPTER=active_record
|
22
|
+
- rvm: 2.0.0
|
23
|
+
gemfile: gemfiles/activerecord_3.gemfile
|
24
|
+
env: ADAPTER=active_record
|
25
|
+
|
26
|
+
- rvm: 2.3.0
|
27
|
+
gemfile: gemfiles/activerecord_4.gemfile
|
28
|
+
env: ADAPTER=active_record
|
29
|
+
- rvm: 2.2.4
|
30
|
+
gemfile: gemfiles/activerecord_4.gemfile
|
31
|
+
env: ADAPTER=active_record
|
32
|
+
- rvm: 2.1.8
|
33
|
+
gemfile: gemfiles/activerecord_4.gemfile
|
34
|
+
env: ADAPTER=active_record
|
35
|
+
- rvm: 2.0.0
|
36
|
+
gemfile: gemfiles/activerecord_4.gemfile
|
37
|
+
env: ADAPTER=active_record
|
38
|
+
|
39
|
+
- rvm: 2.3.0
|
40
|
+
gemfile: gemfiles/activerecord_5.gemfile
|
41
|
+
env: ADAPTER=active_record
|
42
|
+
- rvm: 2.2.4
|
43
|
+
gemfile: gemfiles/activerecord_5.gemfile
|
44
|
+
env: ADAPTER=active_record
|
45
|
+
|
46
|
+
- rvm: 2.3.0
|
47
|
+
gemfile: gemfiles/mongoid_3.gemfile
|
48
|
+
env: ADAPTER=mongoid
|
49
|
+
- rvm: 2.2.4
|
50
|
+
gemfile: gemfiles/mongoid_3.gemfile
|
51
|
+
env: ADAPTER=mongoid
|
52
|
+
- rvm: 2.1.8
|
53
|
+
gemfile: gemfiles/mongoid_3.gemfile
|
54
|
+
env: ADAPTER=mongoid
|
55
|
+
- rvm: 2.0.0
|
56
|
+
gemfile: gemfiles/mongoid_3.gemfile
|
57
|
+
env: ADAPTER=mongoid
|
58
|
+
|
59
|
+
- rvm: 2.3.0
|
60
|
+
gemfile: gemfiles/mongoid_4.gemfile
|
61
|
+
env: ADAPTER=mongoid
|
62
|
+
- rvm: 2.2.4
|
63
|
+
gemfile: gemfiles/mongoid_4.gemfile
|
64
|
+
env: ADAPTER=mongoid
|
65
|
+
- rvm: 2.1.8
|
66
|
+
gemfile: gemfiles/mongoid_4.gemfile
|
67
|
+
env: ADAPTER=mongoid
|
68
|
+
- rvm: 2.0.0
|
69
|
+
gemfile: gemfiles/mongoid_4.gemfile
|
70
|
+
env: ADAPTER=mongoid
|
71
|
+
|
72
|
+
- rvm: 2.3.0
|
73
|
+
gemfile: gemfiles/mongoid_5.gemfile
|
74
|
+
env: ADAPTER=mongoid
|
75
|
+
- rvm: 2.2.4
|
76
|
+
gemfile: gemfiles/mongoid_5.gemfile
|
77
|
+
env: ADAPTER=mongoid
|
78
|
+
- rvm: 2.1.8
|
79
|
+
gemfile: gemfiles/mongoid_5.gemfile
|
80
|
+
env: ADAPTER=mongoid
|
81
|
+
- rvm: 2.0.0
|
82
|
+
gemfile: gemfiles/mongoid_5.gemfile
|
83
|
+
env: ADAPTER=mongoid
|
84
|
+
|
22
85
|
|
23
86
|
services: mongodb
|
24
87
|
|
data/Appraisals
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
appraise 'mongoid-3' do
|
2
|
+
gem "mongoid", "~> 3"
|
3
|
+
gem "bson_ext", :platform => "ruby"
|
4
|
+
end
|
5
|
+
|
6
|
+
appraise 'mongoid-4' do
|
7
|
+
gem "mongoid", "~> 4"
|
8
|
+
gem "bson_ext", :platform => "ruby"
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise 'mongoid-5' do
|
12
|
+
gem "mongoid", "~> 5"
|
13
|
+
gem "bson_ext", :platform => "ruby"
|
14
|
+
end
|
15
|
+
|
16
|
+
appraise 'activerecord-3' do
|
17
|
+
gem "sqlite3", :platform => "ruby"
|
18
|
+
gem "activerecord", ">= 3.2.0", :require => "active_record"
|
19
|
+
end
|
20
|
+
|
21
|
+
appraise 'activerecord-4' do
|
22
|
+
gem "sqlite3", :platform => "ruby"
|
23
|
+
gem "activerecord", ">= 4.2.5", :require => "active_record"
|
24
|
+
end
|
25
|
+
|
26
|
+
appraise 'activerecord-5' do
|
27
|
+
gem "sqlite3", :platform => "ruby"
|
28
|
+
gem "activerecord", ">= 5.0.0.beta", :require => "active_record"
|
29
|
+
|
30
|
+
# Ammeter dependencies:
|
31
|
+
gem "actionpack", ">= 5.0.0.beta2"
|
32
|
+
gem "activemodel", ">= 5.0.0.beta2"
|
33
|
+
gem "railties", ">= 5.0.0.beta2"
|
34
|
+
|
35
|
+
gem 'rspec-rails' , github: 'rspec/rspec-rails'
|
36
|
+
gem 'rspec-core' , github: 'rspec/rspec-core'
|
37
|
+
gem 'rspec-expectations', github: 'rspec/rspec-expectations'
|
38
|
+
gem 'rspec-mocks' , github: 'rspec/rspec-mocks'
|
39
|
+
gem 'rspec-support' , github: 'rspec/rspec-support'
|
40
|
+
|
41
|
+
end
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
= 5.1.0 (Mar 19, 2016)
|
2
|
+
* Rails 5 Support (thanks @lorefnon)
|
3
|
+
* Fix user handling in generator (thanks @lorefnon)
|
4
|
+
* Fix quoting issues (thanks @lorefnon)
|
5
|
+
* Improvements to dynamic module loading (thanks to @DmitryKK)
|
6
|
+
|
1
7
|
= 5.0.0 (Nov 17, 2015)
|
2
8
|
* Fix migration warning showing when it shouldn't
|
3
9
|
* Add role lazy-loading
|
data/CONTRIBUTORS
CHANGED
data/Gemfile
CHANGED
@@ -1,25 +1,7 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
3
|
group :test do
|
4
|
-
|
5
|
-
when nil, "active_record"
|
6
|
-
gem "activerecord-jdbcsqlite3-adapter", ">= 1.3.0.rc", :platform => "jruby"
|
7
|
-
gem "sqlite3", :platform => "ruby"
|
8
|
-
gem "activerecord", ">= 3.2.0", :require => "active_record"
|
9
|
-
when "mongoid"
|
10
|
-
case ENV["MONGOID_VERSION"]
|
11
|
-
when nil, '5'
|
12
|
-
gem "mongoid", "~> 5"
|
13
|
-
when '4'
|
14
|
-
gem "mongoid", "~> 4"
|
15
|
-
when '3'
|
16
|
-
gem "mongoid", "~> 3"
|
17
|
-
end
|
18
|
-
gem "bson_ext", :platform => "ruby"
|
19
|
-
else
|
20
|
-
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
|
21
|
-
end
|
22
|
-
|
4
|
+
gem 'appraisal'
|
23
5
|
gem 'coveralls', :require => false
|
24
6
|
gem 'its'
|
25
7
|
gem 'byebug'
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -44,14 +44,14 @@ rails g rolify Role User
|
|
44
44
|
rails g rolify:role Role User
|
45
45
|
```
|
46
46
|
|
47
|
-
Role and User classes are the default. You can specify any Role class name you want. This is
|
47
|
+
Role and User classes are the default. You can specify any Role class name you want. This is a completely new file so any name will do the job.
|
48
48
|
For the User class name, you would probably use the one provided by your authentication solution. rolify just adds some class methods in an existing User class.
|
49
49
|
|
50
50
|
If you want to use Mongoid instead of ActiveRecord, just add `--orm=mongoid` argument, and skip to step #3
|
51
51
|
|
52
52
|
### 2. Run the migration (only required when using ActiveRecord)
|
53
53
|
|
54
|
-
Let's migrate
|
54
|
+
Let's migrate!
|
55
55
|
|
56
56
|
```
|
57
57
|
rake db:migrate
|
@@ -100,21 +100,21 @@ user = User.find(1)
|
|
100
100
|
user.add_role :admin
|
101
101
|
```
|
102
102
|
|
103
|
-
To define a role scoped to a resource instance
|
103
|
+
To define a role scoped to a resource instance:
|
104
104
|
|
105
105
|
```ruby
|
106
106
|
user = User.find(2)
|
107
107
|
user.add_role :moderator, Forum.first
|
108
108
|
```
|
109
109
|
|
110
|
-
To define a role scoped to a resource class
|
110
|
+
To define a role scoped to a resource class:
|
111
111
|
|
112
112
|
```ruby
|
113
113
|
user = User.find(3)
|
114
114
|
user.add_role :moderator, Forum
|
115
115
|
```
|
116
116
|
|
117
|
-
That's it
|
117
|
+
That's it!
|
118
118
|
|
119
119
|
### 5. Role queries
|
120
120
|
|
@@ -171,36 +171,36 @@ Starting from rolify 3.0, you can search roles on instance level or class level
|
|
171
171
|
```ruby
|
172
172
|
forum = Forum.first
|
173
173
|
forum.roles
|
174
|
-
# => [ list of roles that are only
|
174
|
+
# => [ list of roles that are only bound to forum instance ]
|
175
175
|
forum.applied_roles
|
176
|
-
# => [ list of roles
|
176
|
+
# => [ list of roles bound to forum instance and to the Forum class ]
|
177
177
|
```
|
178
178
|
|
179
179
|
#### Class level
|
180
180
|
|
181
181
|
```ruby
|
182
182
|
Forum.with_role(:admin)
|
183
|
-
# => [ list of Forum instances that
|
183
|
+
# => [ list of Forum instances that have role "admin" bound to them ]
|
184
184
|
Forum.with_role(:admin, current_user)
|
185
|
-
# => [ list of Forum instances that
|
185
|
+
# => [ list of Forum instances that have role "admin" bound to them and belong to current_user roles ]
|
186
186
|
Forum.with_roles([:admin, :user], current_user)
|
187
|
-
# => [ list of Forum instances that
|
187
|
+
# => [ list of Forum instances that have role "admin" or "user" bound to them and belong to current_user roles ]
|
188
188
|
|
189
189
|
User.with_any_role(:user, :admin)
|
190
|
-
# => [ list of User instances that
|
190
|
+
# => [ list of User instances that have role "admin" or "user" bound to them ]
|
191
191
|
User.with_role(:site_admin, current_site)
|
192
192
|
# => [ list of User instances that have a scoped role of "site_admin" to a site instance ]
|
193
193
|
User.with_role(:site_admin, :any)
|
194
194
|
# => [ list of User instances that have a scoped role of "site_admin" for any site instances ]
|
195
195
|
User.with_all_roles(:site_admin, :admin)
|
196
|
-
# => [ list of User instances that have a role of "site_admin" and a role of "admin"
|
196
|
+
# => [ list of User instances that have a role of "site_admin" and a role of "admin" bound to it ]
|
197
197
|
|
198
198
|
Forum.find_roles
|
199
|
-
# => [ list of roles that
|
199
|
+
# => [ list of roles that are bound to any Forum instance or to the Forum class ]
|
200
200
|
Forum.find_roles(:admin)
|
201
|
-
# => [ list of roles that
|
201
|
+
# => [ list of roles that are bound to any Forum instance or to the Forum class, with "admin" as a role name ]
|
202
202
|
Forum.find_roles(:admin, current_user)
|
203
|
-
# => [ list of roles that
|
203
|
+
# => [ list of roles that are bound to any Forum instance, or to the Forum class with "admin" as a role name, and belongs to current_user ]
|
204
204
|
```
|
205
205
|
|
206
206
|
### Strict Mode
|
data/Rakefile
CHANGED
@@ -14,7 +14,11 @@ RSpec::Core::RakeTask.new(:rolify) do |task|
|
|
14
14
|
task.pattern = 'spec/rolify/**/*_spec.rb'
|
15
15
|
end
|
16
16
|
|
17
|
-
|
17
|
+
if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
|
18
|
+
task :default => :appraisal
|
19
|
+
else
|
20
|
+
task :default => [ :spec, 'coveralls:push' ]
|
21
|
+
end
|
18
22
|
|
19
23
|
desc 'Run all specs'
|
20
24
|
task 'spec' do
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "sqlite3", :platform => "ruby"
|
6
|
+
gem "activerecord", ">= 3.2.0", :require => "active_record"
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem "appraisal"
|
10
|
+
gem "coveralls", :require => false
|
11
|
+
gem "its"
|
12
|
+
gem "byebug"
|
13
|
+
gem "pry-byebug"
|
14
|
+
gem "test-unit"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "codeclimate-test-reporter", :require => nil
|
17
|
+
end
|
18
|
+
|
19
|
+
gemspec :path => "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "sqlite3", :platform => "ruby"
|
6
|
+
gem "activerecord", ">= 4.2.5", :require => "active_record"
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem "appraisal"
|
10
|
+
gem "coveralls", :require => false
|
11
|
+
gem "its"
|
12
|
+
gem "byebug"
|
13
|
+
gem "pry-byebug"
|
14
|
+
gem "test-unit"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "codeclimate-test-reporter", :require => nil
|
17
|
+
end
|
18
|
+
|
19
|
+
gemspec :path => "../"
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "sqlite3", :platform => "ruby"
|
6
|
+
gem "activerecord", ">= 5.0.0.beta", :require => "active_record"
|
7
|
+
gem "actionpack", ">= 5.0.0.beta2"
|
8
|
+
gem "activemodel", ">= 5.0.0.beta2"
|
9
|
+
gem "railties", ">= 5.0.0.beta2"
|
10
|
+
gem "rspec-rails", :github => "rspec/rspec-rails"
|
11
|
+
gem "rspec-core", :github => "rspec/rspec-core"
|
12
|
+
gem "rspec-expectations", :github => "rspec/rspec-expectations"
|
13
|
+
gem "rspec-mocks", :github => "rspec/rspec-mocks"
|
14
|
+
gem "rspec-support", :github => "rspec/rspec-support"
|
15
|
+
|
16
|
+
group :test do
|
17
|
+
gem "appraisal"
|
18
|
+
gem "coveralls", :require => false
|
19
|
+
gem "its"
|
20
|
+
gem "byebug"
|
21
|
+
gem "pry-byebug"
|
22
|
+
gem "test-unit"
|
23
|
+
gem "database_cleaner"
|
24
|
+
gem "codeclimate-test-reporter", :require => nil
|
25
|
+
end
|
26
|
+
|
27
|
+
gemspec :path => "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "mongoid", "~> 3"
|
6
|
+
gem "bson_ext", :platform => "ruby"
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem "appraisal"
|
10
|
+
gem "coveralls", :require => false
|
11
|
+
gem "its"
|
12
|
+
gem "byebug"
|
13
|
+
gem "pry-byebug"
|
14
|
+
gem "test-unit"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "codeclimate-test-reporter", :require => nil
|
17
|
+
end
|
18
|
+
|
19
|
+
gemspec :path => "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "mongoid", "~> 4"
|
6
|
+
gem "bson_ext", :platform => "ruby"
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem "appraisal"
|
10
|
+
gem "coveralls", :require => false
|
11
|
+
gem "its"
|
12
|
+
gem "byebug"
|
13
|
+
gem "pry-byebug"
|
14
|
+
gem "test-unit"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "codeclimate-test-reporter", :require => nil
|
17
|
+
end
|
18
|
+
|
19
|
+
gemspec :path => "../"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "mongoid", "~> 5"
|
6
|
+
gem "bson_ext", :platform => "ruby"
|
7
|
+
|
8
|
+
group :test do
|
9
|
+
gem "appraisal"
|
10
|
+
gem "coveralls", :require => false
|
11
|
+
gem "its"
|
12
|
+
gem "byebug"
|
13
|
+
gem "pry-byebug"
|
14
|
+
gem "test-unit"
|
15
|
+
gem "database_cleaner"
|
16
|
+
gem "codeclimate-test-reporter", :require => nil
|
17
|
+
end
|
18
|
+
|
19
|
+
gemspec :path => "../"
|
@@ -8,6 +8,13 @@ module ActiveRecord
|
|
8
8
|
|
9
9
|
argument :user_cname, :type => :string, :default => "User", :banner => "User"
|
10
10
|
|
11
|
+
def ensure_user_class_defined
|
12
|
+
unless user_class_defined?
|
13
|
+
prompt_missing_user
|
14
|
+
abort
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
11
18
|
def generate_model
|
12
19
|
invoke "active_record:model", [ name ], :migration => false
|
13
20
|
end
|
@@ -22,6 +29,7 @@ module ActiveRecord
|
|
22
29
|
require "#{ENGINE_ROOT}/app/models/#{user_cname.downcase}.rb"
|
23
30
|
end
|
24
31
|
end
|
32
|
+
|
25
33
|
inject_into_class(model_path, class_name, model_content)
|
26
34
|
end
|
27
35
|
|
@@ -29,8 +37,10 @@ module ActiveRecord
|
|
29
37
|
migration_template "migration.rb", "db/migrate/rolify_create_#{table_name}.rb"
|
30
38
|
end
|
31
39
|
|
40
|
+
private
|
41
|
+
|
32
42
|
def join_table
|
33
|
-
|
43
|
+
user_class.table_name + "_" + table_name
|
34
44
|
end
|
35
45
|
|
36
46
|
def user_reference
|
@@ -48,7 +58,10 @@ module ActiveRecord
|
|
48
58
|
def model_content
|
49
59
|
content = <<RUBY
|
50
60
|
has_and_belongs_to_many :%{user_cname}, :join_table => :%{join_table}
|
51
|
-
|
61
|
+
|
62
|
+
belongs_to :resource,
|
63
|
+
:polymorphic => true,
|
64
|
+
:optional => true
|
52
65
|
|
53
66
|
validates :resource_type,
|
54
67
|
:inclusion => { :in => Rolify.resource_types },
|
@@ -56,8 +69,31 @@ module ActiveRecord
|
|
56
69
|
|
57
70
|
scopify
|
58
71
|
RUBY
|
59
|
-
content % { :user_cname =>
|
72
|
+
content % { :user_cname => user_class.table_name, :join_table => "#{user_cname.constantize.table_name}_#{table_name}"}
|
73
|
+
end
|
74
|
+
|
75
|
+
def user_class
|
76
|
+
user_cname.constantize
|
77
|
+
end
|
78
|
+
|
79
|
+
def user_class_defined?
|
80
|
+
user_class
|
81
|
+
true
|
82
|
+
rescue NameError => ex
|
83
|
+
if ex.missing_name == user_cname
|
84
|
+
false
|
85
|
+
else
|
86
|
+
raise ex
|
87
|
+
end
|
60
88
|
end
|
89
|
+
|
90
|
+
def prompt_missing_user
|
91
|
+
puts <<MSG
|
92
|
+
Rolify expected a model named #{user_cname} to be defined but could not find one.
|
93
|
+
Please ensure that this model exists and is not mis-spelled and re-run the generator.
|
94
|
+
MSG
|
95
|
+
end
|
96
|
+
|
61
97
|
end
|
62
98
|
end
|
63
99
|
end
|
data/lib/rolify.rb
CHANGED
@@ -30,7 +30,6 @@ module Rolify
|
|
30
30
|
has_and_belongs_to_many :roles, rolify_options
|
31
31
|
|
32
32
|
self.adapter = Rolify::Adapter::Base.create("role_adapter", self.role_cname, self.name)
|
33
|
-
load_dynamic_methods if Rolify.dynamic_shortcuts
|
34
33
|
|
35
34
|
#use strict roles
|
36
35
|
self.strict_rolify = true if options[:strict]
|
@@ -17,16 +17,17 @@ module Rolify
|
|
17
17
|
str << ', ' unless klass == klasses.last
|
18
18
|
str
|
19
19
|
end
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
resources = resources.
|
20
|
+
|
21
|
+
resources = relation.joins("INNER JOIN #{quote_table(roles_table)} ON #{quote_table(roles_table)}.resource_type IN (#{relations}) AND
|
22
|
+
(#{quote_table(roles_table)}.resource_id IS NULL OR #{quote_table(roles_table)}.resource_id = #{quote_table(relation.table_name)}.#{quote_column(relation.primary_key)})")
|
23
|
+
resources = resources.where("#{quote_table(roles_table)}.name IN (?) AND #{quote_table(roles_table)}.resource_type IN (?)", Array(role_name), klasses)
|
24
|
+
resources = resources.select("#{quote_table(relation.table_name)}.*")
|
24
25
|
resources
|
25
26
|
end
|
26
27
|
|
27
28
|
def in(relation, user, role_names)
|
28
|
-
roles = user.roles.where(:name => role_names).select("#{
|
29
|
-
relation.where("#{
|
29
|
+
roles = user.roles.where(:name => role_names).select("#{quote_table(role_class.table_name)}.#{quote_column(role_class.primary_key)}")
|
30
|
+
relation.where("#{quote_table(role_class.table_name)}.#{quote_column(role_class.primary_key)} IN (?) AND ((resource_id = #{quote_table(relation.table_name)}.#{quote_column(relation.primary_key)}) OR (resource_id IS NULL))", roles)
|
30
31
|
end
|
31
32
|
|
32
33
|
def applied_roles(relation, children)
|
@@ -44,9 +45,14 @@ module Rolify
|
|
44
45
|
|
45
46
|
private
|
46
47
|
|
47
|
-
def
|
48
|
+
def quote_column(column)
|
48
49
|
ActiveRecord::Base.connection.quote_column_name column
|
49
50
|
end
|
51
|
+
|
52
|
+
def quote_table(table)
|
53
|
+
ActiveRecord::Base.connection.quote_table_name table
|
54
|
+
end
|
55
|
+
|
50
56
|
end
|
51
57
|
end
|
52
58
|
end
|
@@ -9,13 +9,14 @@ module Rolify
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def where_strict(relation, args)
|
12
|
+
return relation.where(:name => args[:name]) if args[:resource].blank?
|
12
13
|
resource = if args[:resource].is_a?(Class)
|
13
14
|
{class: args[:resource].to_s, id: nil}
|
14
15
|
else
|
15
16
|
{class: args[:resource].class.name, id: args[:resource].id}
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
+
relation.where(:name => args[:name], :resource_type => resource[:class], :resource_id => resource[:id])
|
19
20
|
end
|
20
21
|
|
21
22
|
def find_cached(relation, args)
|
data/lib/rolify/dynamic.rb
CHANGED
@@ -2,29 +2,15 @@ require "rolify/configure"
|
|
2
2
|
|
3
3
|
module Rolify
|
4
4
|
module Dynamic
|
5
|
-
def load_dynamic_methods
|
6
|
-
if ENV['ADAPTER'] == 'active_record'
|
7
|
-
# supported Rails version >= 3.2 with AR should use find_each, since use of .all.each is deprecated
|
8
|
-
self.role_class.group("name, resource_type").includes(:resource).find_each do |r|
|
9
|
-
define_dynamic_method(r.name, r.resource)
|
10
|
-
end
|
11
|
-
else
|
12
|
-
# for compatibility with MongoidDB and older Rails AR - does not support polymorphic includes
|
13
|
-
self.role_class.all.each do |r|
|
14
|
-
define_dynamic_method(r.name, r.resource)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
5
|
def define_dynamic_method(role_name, resource)
|
20
6
|
class_eval do
|
21
7
|
define_method("is_#{role_name}?".to_sym) do
|
22
8
|
has_role?("#{role_name}")
|
23
|
-
end if !method_defined?("is_#{role_name}?".to_sym)
|
9
|
+
end if !method_defined?("is_#{role_name}?".to_sym) && self.adapter.where_strict(self.role_class, name: role_name).exists?
|
24
10
|
|
25
11
|
define_method("is_#{role_name}_of?".to_sym) do |arg|
|
26
12
|
has_role?("#{role_name}", arg)
|
27
|
-
end if !method_defined?("is_#{role_name}_of?".to_sym) && resource
|
13
|
+
end if !method_defined?("is_#{role_name}_of?".to_sym) && resource && self.adapter.where_strict(self.role_class, name: role_name, resource: resource).exists?
|
28
14
|
end
|
29
15
|
end
|
30
16
|
end
|
data/lib/rolify/role.rb
CHANGED
data/lib/rolify/version.rb
CHANGED
@@ -45,7 +45,10 @@ describe Rolify::Generators::RolifyGenerator, :if => ENV['ADAPTER'] == 'active_r
|
|
45
45
|
it { should exist }
|
46
46
|
it { should contain "class Role < ActiveRecord::Base" }
|
47
47
|
it { should contain "has_and_belongs_to_many :users, :join_table => :users_roles" }
|
48
|
-
it { should contain "belongs_to :resource
|
48
|
+
it { should contain "belongs_to :resource,\n"
|
49
|
+
" :polymorphic => true,\n"
|
50
|
+
" :optional => true"
|
51
|
+
}
|
49
52
|
it { should contain "validates :resource_type,\n"
|
50
53
|
" :inclusion => { :in => Rolify.resource_types },\n"
|
51
54
|
" :allow_nil => true" }
|
@@ -93,7 +96,10 @@ describe Rolify::Generators::RolifyGenerator, :if => ENV['ADAPTER'] == 'active_r
|
|
93
96
|
it { should exist }
|
94
97
|
it { should contain "class AdminRole < ActiveRecord::Base" }
|
95
98
|
it { should contain "has_and_belongs_to_many :admin_users, :join_table => :admin_users_admin_roles" }
|
96
|
-
it { should contain "belongs_to :resource
|
99
|
+
it { should contain "belongs_to :resource,\n"
|
100
|
+
" :polymorphic => true,\n"
|
101
|
+
" :optional => true"
|
102
|
+
}
|
97
103
|
end
|
98
104
|
|
99
105
|
describe 'app/models/admin_user.rb' do
|
@@ -145,7 +151,10 @@ describe Rolify::Generators::RolifyGenerator, :if => ENV['ADAPTER'] == 'active_r
|
|
145
151
|
it { should exist }
|
146
152
|
it { should contain "class Admin::Role < ActiveRecord::Base" }
|
147
153
|
it { should contain "has_and_belongs_to_many :admin_users, :join_table => :admin_users_admin_roles" }
|
148
|
-
it { should contain "belongs_to :resource
|
154
|
+
it { should contain "belongs_to :resource,\n"
|
155
|
+
" :polymorphic => true,\n"
|
156
|
+
" :optional => true"
|
157
|
+
}
|
149
158
|
end
|
150
159
|
|
151
160
|
describe 'app/models/admin/user.rb' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rolify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florent Monbillard
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-03-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ammeter
|
@@ -79,6 +79,7 @@ extra_rdoc_files: []
|
|
79
79
|
files:
|
80
80
|
- ".gitignore"
|
81
81
|
- ".travis.yml"
|
82
|
+
- Appraisals
|
82
83
|
- CHANGELOG.rdoc
|
83
84
|
- CONTRIBUTORS
|
84
85
|
- Gemfile
|
@@ -89,6 +90,12 @@ files:
|
|
89
90
|
- gemfiles/Gemfile.rails-3.2
|
90
91
|
- gemfiles/Gemfile.rails-4.0
|
91
92
|
- gemfiles/Gemfile.rails-4.1
|
93
|
+
- gemfiles/activerecord_3.gemfile
|
94
|
+
- gemfiles/activerecord_4.gemfile
|
95
|
+
- gemfiles/activerecord_5.gemfile
|
96
|
+
- gemfiles/mongoid_3.gemfile
|
97
|
+
- gemfiles/mongoid_4.gemfile
|
98
|
+
- gemfiles/mongoid_5.gemfile
|
92
99
|
- lib/generators/active_record/rolify_generator.rb
|
93
100
|
- lib/generators/active_record/templates/README
|
94
101
|
- lib/generators/active_record/templates/migration.rb
|