acl9 1.2.1 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44c10dcc68d41635dfb0c5239aa9fb7cd720eaf4
4
- data.tar.gz: 821d4948d72b7fbd274037d336d39989102c56b9
3
+ metadata.gz: c453f2d63455ec9792617d8436fdf11069dc843d
4
+ data.tar.gz: 20ae0c3d277ac3b8393b5a63e04a2b4c3e8c2576
5
5
  SHA512:
6
- metadata.gz: 45511d2a77a9ad88253e1ca32e0ef50485d6d610507033514d0025865ac84ea5b228a2b4f9b83c16503c78f4e5df9eb4f88e32ef5ad82f3b7239db2c442f2e63
7
- data.tar.gz: 1f79e486fcee9ed273a8dcbd0980dfd7dc4241897b67bd9579da6226cd4832d883dc47cdc641787313245354f1183062a771a4322d462d43779214fb7cc3260f
6
+ metadata.gz: 3ea8427b7aac68a931a94c5cdefd3c5f82560130efd528bc46f260f55595044a4b425b3ee24bd22adf80a03b6fc57156142aee0d66b80b50703dcfae55245f0a
7
+ data.tar.gz: 07e1e06046612cad72fcbb37b8070b5c76d554b6f5168aeaa5eeec733696e639cde81cea13fecb19d2f5440245dcf83d69330038c32b01d68839358118424f07
@@ -1 +1 @@
1
- 2.2.1
1
+ 2.2.2
@@ -2,8 +2,8 @@ cache: bundler
2
2
  language: ruby
3
3
  rvm:
4
4
  - 2.0.0
5
- - 2.1.5
6
- - 2.2.1
5
+ - 2.1.6
6
+ - 2.2.2
7
7
  - ruby-head
8
8
 
9
9
  gemfile:
@@ -1,42 +1,42 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- acl9 (1.2.1)
4
+ acl9 (1.3.0)
5
5
  rails (~> 4.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- actionmailer (4.2.0)
11
- actionpack (= 4.2.0)
12
- actionview (= 4.2.0)
13
- activejob (= 4.2.0)
10
+ actionmailer (4.2.1)
11
+ actionpack (= 4.2.1)
12
+ actionview (= 4.2.1)
13
+ activejob (= 4.2.1)
14
14
  mail (~> 2.5, >= 2.5.4)
15
15
  rails-dom-testing (~> 1.0, >= 1.0.5)
16
- actionpack (4.2.0)
17
- actionview (= 4.2.0)
18
- activesupport (= 4.2.0)
19
- rack (~> 1.6.0)
16
+ actionpack (4.2.1)
17
+ actionview (= 4.2.1)
18
+ activesupport (= 4.2.1)
19
+ rack (~> 1.6)
20
20
  rack-test (~> 0.6.2)
21
21
  rails-dom-testing (~> 1.0, >= 1.0.5)
22
22
  rails-html-sanitizer (~> 1.0, >= 1.0.1)
23
- actionview (4.2.0)
24
- activesupport (= 4.2.0)
23
+ actionview (4.2.1)
24
+ activesupport (= 4.2.1)
25
25
  builder (~> 3.1)
26
26
  erubis (~> 2.7.0)
27
27
  rails-dom-testing (~> 1.0, >= 1.0.5)
28
28
  rails-html-sanitizer (~> 1.0, >= 1.0.1)
29
- activejob (4.2.0)
30
- activesupport (= 4.2.0)
29
+ activejob (4.2.1)
30
+ activesupport (= 4.2.1)
31
31
  globalid (>= 0.3.0)
32
- activemodel (4.2.0)
33
- activesupport (= 4.2.0)
32
+ activemodel (4.2.1)
33
+ activesupport (= 4.2.1)
34
34
  builder (~> 3.1)
35
- activerecord (4.2.0)
36
- activemodel (= 4.2.0)
37
- activesupport (= 4.2.0)
35
+ activerecord (4.2.1)
36
+ activemodel (= 4.2.1)
37
+ activesupport (= 4.2.1)
38
38
  arel (~> 6.0)
39
- activesupport (4.2.0)
39
+ activesupport (4.2.1)
40
40
  i18n (~> 0.7)
41
41
  json (~> 1.7, >= 1.7.7)
42
42
  minitest (~> 5.1)
@@ -53,16 +53,15 @@ GEM
53
53
  simplecov (>= 0.7.1, < 1.0.0)
54
54
  docile (1.1.5)
55
55
  erubis (2.7.0)
56
- globalid (0.3.0)
56
+ globalid (0.3.5)
57
57
  activesupport (>= 4.1.0)
58
- hike (1.2.3)
59
58
  i18n (0.7.0)
60
59
  json (1.8.1)
61
- loofah (2.0.1)
60
+ loofah (2.0.2)
62
61
  nokogiri (>= 1.5.9)
63
62
  mail (2.6.3)
64
63
  mime-types (>= 1.16, < 3)
65
- mime-types (2.4.3)
64
+ mime-types (2.5)
66
65
  mini_portile (0.6.2)
67
66
  minitap (0.5.3)
68
67
  minitest (~> 5.0)
@@ -74,31 +73,31 @@ GEM
74
73
  multi_json (1.10.1)
75
74
  nokogiri (1.6.6.2)
76
75
  mini_portile (~> 0.6.0)
77
- rack (1.6.0)
76
+ rack (1.6.1)
78
77
  rack-test (0.6.3)
79
78
  rack (>= 1.0)
80
- rails (4.2.0)
81
- actionmailer (= 4.2.0)
82
- actionpack (= 4.2.0)
83
- actionview (= 4.2.0)
84
- activejob (= 4.2.0)
85
- activemodel (= 4.2.0)
86
- activerecord (= 4.2.0)
87
- activesupport (= 4.2.0)
79
+ rails (4.2.1)
80
+ actionmailer (= 4.2.1)
81
+ actionpack (= 4.2.1)
82
+ actionview (= 4.2.1)
83
+ activejob (= 4.2.1)
84
+ activemodel (= 4.2.1)
85
+ activerecord (= 4.2.1)
86
+ activesupport (= 4.2.1)
88
87
  bundler (>= 1.3.0, < 2.0)
89
- railties (= 4.2.0)
88
+ railties (= 4.2.1)
90
89
  sprockets-rails
91
90
  rails-deprecated_sanitizer (1.0.3)
92
91
  activesupport (>= 4.2.0.alpha)
93
- rails-dom-testing (1.0.5)
92
+ rails-dom-testing (1.0.6)
94
93
  activesupport (>= 4.2.0.beta, < 5.0)
95
94
  nokogiri (~> 1.6.0)
96
95
  rails-deprecated_sanitizer (>= 1.0.1)
97
- rails-html-sanitizer (1.0.1)
96
+ rails-html-sanitizer (1.0.2)
98
97
  loofah (~> 2.0)
99
- railties (4.2.0)
100
- actionpack (= 4.2.0)
101
- activesupport (= 4.2.0)
98
+ railties (4.2.1)
99
+ actionpack (= 4.2.1)
100
+ activesupport (= 4.2.1)
102
101
  rake (>= 0.8.7)
103
102
  thor (>= 0.18.1, < 2.0)
104
103
  rake (10.4.2)
@@ -107,12 +106,9 @@ GEM
107
106
  multi_json (~> 1.0)
108
107
  simplecov-html (~> 0.8.0)
109
108
  simplecov-html (0.8.0)
110
- sprockets (2.12.3)
111
- hike (~> 1.2)
112
- multi_json (~> 1.0)
109
+ sprockets (3.1.0)
113
110
  rack (~> 1.0)
114
- tilt (~> 1.1, != 1.3.0)
115
- sprockets-rails (2.2.4)
111
+ sprockets-rails (2.3.1)
116
112
  actionpack (>= 3.0)
117
113
  activesupport (>= 3.0)
118
114
  sprockets (>= 2.8, < 4.0)
@@ -121,8 +117,7 @@ GEM
121
117
  ansi
122
118
  json
123
119
  thor (0.19.1)
124
- thread_safe (0.3.4)
125
- tilt (1.4.1)
120
+ thread_safe (0.3.5)
126
121
  tzinfo (1.2.2)
127
122
  thread_safe (~> 0.1)
128
123
  yard (0.8.7.6)
data/README.md CHANGED
@@ -75,6 +75,7 @@ the admin for a particular school:
75
75
 
76
76
  ```ruby
77
77
  user.has_role! :admin, school
78
+ user.has_role! :admin, of: school
78
79
  ```
79
80
 
80
81
  Then let's say we have some support people in our organization who are dedicated
@@ -84,6 +85,7 @@ assign roles to any object, including a class, and do this:
84
85
 
85
86
  ```ruby
86
87
  user.has_role! :support, School
88
+ user.has_role! :support, for: School
87
89
  ```
88
90
 
89
91
  You can see the `allow` line in our `access_control` block that this corresponds
@@ -94,6 +96,7 @@ Now, when a support person leaves that team, we need to remove that role:
94
96
 
95
97
  ```ruby
96
98
  user.has_no_role! :support, School
99
+ user.has_no_role! :support, at: School
97
100
  ```
98
101
 
99
102
  You can see more about all this stuff in the wiki under [Role
@@ -229,6 +232,7 @@ We all know that this means:
229
232
 
230
233
  ```ruby
231
234
  user.has_role? :manager, department # => true
235
+ user.has_role? :manager, in: department # => true
232
236
  ```
233
237
 
234
238
  With `:protect_global_roles` set to `false`, as it was in `0.x` then the above
@@ -1,6 +1,10 @@
1
+ require File.expand_path '../../prepositions', __FILE__
2
+
1
3
  module Acl9
2
4
  module Dsl
3
5
  class Base
6
+ include Prepositions
7
+
4
8
  attr_reader :allows, :denys
5
9
 
6
10
  def initialize(*args)
@@ -164,18 +168,8 @@ module Acl9
164
168
  end
165
169
  end
166
170
 
167
- VALID_PREPOSITIONS = %w(of for in on at by).freeze unless defined? VALID_PREPOSITIONS
168
-
169
171
  def _role_object(options)
170
- object = nil
171
-
172
- VALID_PREPOSITIONS.each do |prep|
173
- if options[prep.to_sym]
174
- raise ArgumentError, "You may only use one preposition to specify object" if object
175
-
176
- object = options[prep.to_sym]
177
- end
178
- end
172
+ object = _by_preposition options
179
173
 
180
174
  case object
181
175
  when Class then object.to_s
@@ -1,6 +1,10 @@
1
+ require File.expand_path '../../prepositions', __FILE__
2
+
1
3
  module Acl9
2
4
  module ModelExtensions
3
5
  module ForSubject
6
+ include Prepositions
7
+
4
8
  ##
5
9
  # Role check.
6
10
  #
@@ -36,6 +40,8 @@ module Acl9
36
40
  # @see Acl9::ModelExtensions::Object#accepts_role?
37
41
  def has_role?(role_name, object = nil)
38
42
  role_name = normalize role_name
43
+ object = _by_preposition object
44
+
39
45
  !! if object.nil? && !::Acl9.config[:protect_global_roles]
40
46
  self._role_objects.find_by_name(role_name.to_s) ||
41
47
  self._role_objects.member?(get_role(role_name, nil))
@@ -53,6 +59,8 @@ module Acl9
53
59
  # @see Acl9::ModelExtensions::Object#accepts_role!
54
60
  def has_role!(role_name, object = nil)
55
61
  role_name = normalize role_name
62
+ object = _by_preposition object
63
+
56
64
  role = get_role(role_name, object)
57
65
 
58
66
  if role.nil?
@@ -76,6 +84,7 @@ module Acl9
76
84
  # @see Acl9::ModelExtensions::Object#accepts_no_role!
77
85
  def has_no_role!(role_name, object = nil)
78
86
  role_name = normalize role_name
87
+ object = _by_preposition object
79
88
  delete_role(get_role(role_name, object))
80
89
  end
81
90
 
@@ -182,6 +191,10 @@ module Acl9
182
191
 
183
192
  protected
184
193
 
194
+ def _by_preposition object
195
+ object.is_a?(Hash) ? super : object
196
+ end
197
+
185
198
  def _auth_role_class
186
199
  self.class._auth_role_class_name.constantize
187
200
  end
@@ -0,0 +1,18 @@
1
+ module Acl9
2
+ module Prepositions
3
+ VALID_PREPOSITIONS = %w(of for in on at by).freeze unless defined? VALID_PREPOSITIONS
4
+
5
+ def _by_preposition options
6
+ object = nil
7
+
8
+ VALID_PREPOSITIONS.each do |prep|
9
+ if options[prep.to_sym]
10
+ raise ArgumentError, "You may only use one preposition to specify object" if object
11
+
12
+ object = options[prep.to_sym]
13
+ end
14
+ end
15
+ object
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module Acl9
2
- VERSION = "1.2.1"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -62,6 +62,16 @@ class RolesTest < ActiveSupport::TestCase
62
62
  assert @foo.accepts_roles_by? @user
63
63
  end
64
64
 
65
+ test "#has_role! with preposition" do
66
+ assert @user.has_role! :manager, of: @foo
67
+ assert @user.has_role? :manager, @foo
68
+ end
69
+
70
+ test "#has_role? with preposition" do
71
+ assert @user.has_role! :manager, @foo
72
+ assert @user.has_role? :manager, of: @foo
73
+ end
74
+
65
75
  test "should count object role also as global role when :protect_global_roles == false" do
66
76
  Acl9.config[:protect_global_roles] = false
67
77
 
@@ -138,6 +148,17 @@ class RolesTest < ActiveSupport::TestCase
138
148
  assert @user.has_role? :user, @foo # another role on the same object
139
149
  end
140
150
 
151
+ test "#has_no_role! should unassign an object role from user with preposition" do
152
+ set_some_roles
153
+
154
+ assert_difference -> { @user.role_objects.count }, -1 do
155
+ assert @user.has_no_role! :manager, at: @foo
156
+ end
157
+
158
+ refute @user.has_role? :manager, @foo
159
+ assert @user.has_role? :user, @foo # another role on the same object
160
+ end
161
+
141
162
  test "#has_no_role! should unassign a class role from user" do
142
163
  set_some_roles
143
164
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acl9
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - oleg dashevskii
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-13 00:00:00.000000000 Z
12
+ date: 2015-05-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -117,6 +117,7 @@ files:
117
117
  - lib/acl9/model_extensions.rb
118
118
  - lib/acl9/model_extensions/for_object.rb
119
119
  - lib/acl9/model_extensions/for_subject.rb
120
+ - lib/acl9/prepositions.rb
120
121
  - lib/acl9/version.rb
121
122
  - lib/generators/acl9/setup/USAGE
122
123
  - lib/generators/acl9/setup/setup_generator.rb