effective_roles 0.1 → 1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9df4ba4a70253bd8bef9933d1cdb8baf69ac87d8
4
+ data.tar.gz: f0dca667a92690beaaf43b2e1be460ce787374d4
5
+ SHA512:
6
+ metadata.gz: 19340a70b419ce8f90babe9577b8dcb86b2402c34c9590245999a9d2dd00aec25c7fba4c9cfa30cd6334ec3da04c399af0ff53e7e1e2d64de0d82e5dc52823f3
7
+ data.tar.gz: 37f593b0331836a0119b878c8494737d46bf002531f5fd6eaf6eb4d0b56345685dfe91039e5577db88651cff54cdd011c4f319b1c7442cb886c61c23bb5d8236
@@ -1,4 +1,4 @@
1
- Copyright 2013 Code and Effect Inc.
1
+ Copyright 2014 Code and Effect Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,18 +1,16 @@
1
1
  # Effective Roles
2
2
 
3
+ Assign multiple roles to any User or other ActiveRecord object. Select only the appropriate objects based on intelligent, chainable ActiveRecord::Relation finder methods.
4
+
3
5
  Implements multi-role authorization based on an integer roles_mask field
4
6
 
5
7
  Includes a mixin for adding authentication for any model.
6
8
 
7
- SQL Finders for returning a Relation with all permitted records.
8
-
9
- Handy formtastic helper for assigning roles.
10
-
11
- Intended for use with the other effective_* gems
9
+ SQL Finders for returning an ActiveRecord::Relation with all permitted records.
12
10
 
13
- Designed to work on its own, or with simple pass through to CanCan
11
+ Handy formtastic and simple_form helpers for assigning roles.
14
12
 
15
- Rails >= 3.2.x, Ruby >= 1.9.x. Has not been tested/developed for Rails4.
13
+ Rails 3.2.x and Rails 4
16
14
 
17
15
 
18
16
  ## Getting Started
@@ -47,7 +45,7 @@ class Post
47
45
  end
48
46
  ```
49
47
 
50
- Then create a migration to add the :roles_Mask column to the model.
48
+ Then create a migration to add the :roles_mask column to the model.
51
49
 
52
50
  ```console
53
51
  rails generate migration add_roles_to_post roles_mask:integer
@@ -63,11 +61,22 @@ class AddRolesToPost < ActiveRecord::Migration
63
61
  end
64
62
  ```
65
63
 
66
- ## Behavior
64
+ ## Strong Parameters
65
+
66
+ Make your controller aware of the acts_as_role_restricted passed parameters:
67
+
68
+ ```ruby
69
+ def permitted_params
70
+ params.require(:base_object).permit(:roles => [])
71
+ end
72
+ ```
73
+
74
+
75
+ ## Usage
67
76
 
68
77
  ### Defining Roles
69
78
 
70
- All roles are defined in the config/effective_roles.rb initializer.
79
+ All roles are defined in the config/effective_roles.rb initializer. The roles are defined once and may be applied to any acts_as_role_restricted model in the application.
71
80
 
72
81
  ### Model
73
82
 
@@ -91,12 +100,51 @@ post.roles
91
100
  => [:admin, :superadmin]
92
101
  ```
93
102
 
103
+ Compare against another acts_as_role_restricted object:
104
+
105
+ ```ruby
106
+ user = User.new()
107
+ user.roles = []
108
+
109
+ post = Post.new()
110
+ post.roles = [:admin]
111
+
112
+ user.roles_match_with?(post)
113
+ => false # User has no roles, but Post requires :admin
114
+
115
+ post.roles_match_with?(user)
116
+ => true # Post has the role of :admin, but User requires no roles
117
+ ```
118
+
119
+ ```ruby
120
+ user.roles = [:admin]
121
+ post.roles = [:superadmin]
122
+
123
+ user.roles_match_with?(post)
124
+ => false # User does not have the superadmin role
125
+
126
+ post.roles_match_with?(user)
127
+ => false # Post does not have the admin role
128
+ ```
129
+
130
+ ```ruby
131
+ user.roles = [:superadmin, :admin]
132
+ post.roles = [:admin]
133
+
134
+ user.roles_match_with?(post)
135
+ => true # User has :admin and so does Post
136
+
137
+ post.roles_match_with?(user)
138
+ => true # Post has :admin and so does User
139
+ ```
140
+
94
141
  ### Finder Methods
95
142
 
96
- Find all objects that have been assigned a specific role (or roles). Will not return posts that have no assigned roles (roles_mask = 0)
143
+ Find all objects that have been assigned a specific role (or roles). Will not return posts that have no assigned roles (roles_mask = 0 or NULL)
97
144
 
98
145
  ```ruby
99
146
  Post.with_role(:admin, :superadmin) # Can pass as an array if you want
147
+ Post.with_role(current_user.roles)
100
148
  ```
101
149
 
102
150
  Find all objects that are appropriate for a specific role. Will return posts that have no assigned roles
@@ -108,17 +156,146 @@ Post.for_role(current_user.roles)
108
156
 
109
157
  These are both ActiveRecord::Relations, so you can chain them with other methods like normal.
110
158
 
159
+ ## Assignable Roles
160
+
161
+ Specifies which roles can be assigned to a resource by a specific user.
162
+
163
+ See the initializers/effective_roles.rb for more information.
164
+
165
+ ```ruby
166
+ config.assignable_roles = {
167
+ :superadmin => [:superadmin, :admin, :member], # Superadmins may assign any resource any role
168
+ :admin => [:admin, :member], # Admins may only assign the :admin or :member role
169
+ :member => [] # Members may not assign any roles
170
+ }
171
+ ```
172
+
173
+ When used in a Form Helper (see below), only the appropriate roles will be displayed.
174
+
175
+ However, this restriction is not enforced on the controller level, so someone could inspect & re-write the form parameters and still assign a role that they are not allowed to.
176
+
177
+ To prevent this, add something like the following code to your controller:
178
+
179
+ ```ruby
180
+ before_filter :only => [:create, :update] do
181
+ if params[:user] && params[:user][:roles]
182
+ params[:user][:roles] = params[:user][:roles] & EffectiveRoles.assignable_roles_for(current_user, User.new()).map(&:to_s)
183
+ end
184
+ end
185
+ ```
186
+
187
+
188
+ ## Form Helper
189
+
190
+ If you pass current_user (or any acts_as_role_restricted object) into these helpers, only the assignable_roles will be displayed.
191
+
192
+ ### Formtastic
193
+
194
+ ```ruby
195
+ semantic_form_for @user do |f|
196
+ = effective_roles_fields(f)
197
+ ```
198
+
199
+ or
200
+
201
+ ```ruby
202
+ semantic_form_for @user do |f|
203
+ = effective_roles_fields(f, current_user)
204
+ ```
205
+
206
+ ### simple_form
207
+
208
+ ```ruby
209
+ simple_form_for @user do |f|
210
+ = f.input :roles, :collection => EffectiveRoles.roles_collection(f.object), :as => :check_boxes
211
+ ```
212
+
213
+ or
214
+
215
+ ```ruby
216
+ simple_form_for @user do |f|
217
+ = f.input :roles, :collection => EffectiveRoles.roles_collection(f.object, current_user), :as => :check_boxes
218
+ ```
219
+
220
+ ## Bitmask Implementation
221
+
222
+ The underlying role information for any acts_as_role_restricted ActiveRecord object is stored in that object's roles_mask field.
223
+
224
+ roles_mask is an integer, in which each power of 2 represents the presence or absense of a role.
225
+
226
+ If we have the following roles defined:
227
+
228
+ ```ruby
229
+ EffectiveRoles.setup do |config|
230
+ config.roles = [:superadmin, :admin, :betauser, :member]
231
+ end
232
+ ```
233
+
234
+ Then the following will hold true:
235
+
236
+ ```ruby
237
+ user = User.new()
238
+
239
+ user.roles
240
+ => []
241
+
242
+ user.roles_mask
243
+ => 0
244
+
245
+ user.roles = [:superadmin]
246
+ user.roles_mask
247
+ => 1
248
+
249
+ user.roles = [:admin]
250
+ user.roles_mask
251
+ => 2
252
+
253
+ user.roles = [:betauser]
254
+ user.roles_mask
255
+ => 4
256
+
257
+ user.roles = [:member]
258
+ user.roles_mask
259
+ => 8
260
+ ```
261
+
262
+ As well:
263
+
264
+ ```ruby
265
+ user.roles = [:superadmin, :admin]
266
+ user.roles_mask
267
+ => 3
268
+
269
+ user.roles = [:superadmin, :betauser]
270
+ user.roles_mask
271
+ => 5
272
+
273
+ user.roles = [:admin, :member]
274
+ user.roles_mask
275
+ => 10
276
+
277
+ user.roles = [:superadmin, :admin, :betauser, :member]
278
+ user.roles_mask
279
+ => 15
280
+ ```
281
+
282
+ Keep in mind, when using this gem you should never be working directly with the roles_mask field.
283
+
284
+ All roles are get/set through the roles and roles= methods.
285
+
286
+
111
287
  ## License
112
288
 
113
- MIT License. Copyright Code and Effect Inc. http://www.codeandeffect.com
289
+ MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
290
+
291
+ Code and Effect is the product arm of [AgileStyle](http://www.agilestyle.com/), an Edmonton-based shop that specializes in building custom web applications with Ruby on Rails.
114
292
 
115
- You are not granted rights or licenses to the trademarks of Code and Effect
116
293
 
117
294
  ## Credits
118
295
 
119
296
  This model implements the https://github.com/ryanb/cancan/wiki/Role-Based-Authorization multi role based authorization based on the roles_mask field
120
297
 
121
- ### Testing
298
+ ## Testing
122
299
 
123
300
  The test suite for this gem is unfortunately not yet complete.
124
301
 
@@ -127,3 +304,15 @@ Run tests by:
127
304
  ```ruby
128
305
  rake spec
129
306
  ```
307
+
308
+
309
+ ## Contributing
310
+
311
+ 1. Fork it
312
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
313
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
314
+ 4. Push to the branch (`git push origin my-new-feature`)
315
+ 5. Bonus points for test coverage
316
+ 6. Create new Pull Request
317
+
318
+
@@ -1,12 +1,12 @@
1
1
  module EffectiveRolesHelper
2
2
  # For use in formtastic forms
3
- def effective_roles_fields(form, options = {})
4
- if EffectiveRoles.role_descriptions.kind_of?(Hash)
5
- role_descriptions = EffectiveRoles.role_descriptions[form.object.class.name]
6
- end
7
- role_descriptions ||= (EffectiveRoles.role_descriptions || [])
3
+ def effective_roles_fields(form, user = nil, options = {})
4
+ raise ArgumentError.new('EffectiveRoles config.role_descriptions must be a Hash. The Array syntax is deprecated.') unless EffectiveRoles.role_descriptions.kind_of?(Hash)
8
5
 
9
- opts = {:f => form, :role_descriptions => role_descriptions}.merge(options)
6
+ roles = EffectiveRoles.assignable_roles_for(user, form.object)
7
+ descriptions = EffectiveRoles.role_descriptions[form.object.class.name] || EffectiveRoles.role_descriptions || {}
8
+
9
+ opts = {:f => form, :roles => roles, :descriptions => descriptions}.merge(options)
10
10
 
11
11
  render :partial => 'effective/roles/roles_fields', :locals => opts
12
12
  end
@@ -45,9 +45,20 @@ module ActsAsRoleRestricted
45
45
 
46
46
  def with_role_sql(*roles)
47
47
  roles = roles.flatten.compact
48
+ roles = roles.first.try(:roles) if roles.length == 1 and roles.first.respond_to?(:roles)
49
+
48
50
  roles = (roles.map { |role| role.to_sym } & EffectiveRoles.roles)
49
51
  roles.map { |role| "(#{self.table_name}.roles_mask & %d > 0)" % 2**EffectiveRoles.roles.index(role) }.join(' OR ')
50
52
  end
53
+
54
+ def without_role(*roles)
55
+ roles = roles.flatten.compact
56
+ roles = roles.first.try(:roles) if roles.length == 1 and roles.first.respond_to?(:roles)
57
+
58
+ roles = (roles.map { |role| role.to_sym } & EffectiveRoles.roles)
59
+
60
+ where(roles.map { |role| "NOT(#{self.table_name}.roles_mask & %d > 0)" % 2**EffectiveRoles.roles.index(role) }.join(' OR '))
61
+ end
51
62
  end
52
63
 
53
64
  def roles=(roles)
@@ -64,11 +75,7 @@ module ActsAsRoleRestricted
64
75
  end
65
76
 
66
77
  def roles_match_with?(obj)
67
- if is_role_restricted? == false
68
- true
69
- elsif obj.respond_to?(:is_role_restricted?) == false
70
- false
71
- elsif obj.is_role_restricted? == false
78
+ if !obj.respond_to?(:is_role_restricted?) || !obj.is_role_restricted?
72
79
  true
73
80
  else
74
81
  (roles & obj.roles).any?
@@ -76,7 +83,7 @@ module ActsAsRoleRestricted
76
83
  end
77
84
 
78
85
  def is_role_restricted?
79
- roles_mask > 0
86
+ (roles_mask || 0) > 0
80
87
  end
81
88
  end
82
89
 
@@ -10,8 +10,8 @@
10
10
  %label Roles
11
11
  %input{:type => :hidden, :id => "#{obj}_roles_none", :name => "#{obj}[roles][]"}
12
12
  %ol.choices-group
13
- - EffectiveRoles.roles.each_with_index do |role, x|
13
+ - roles.each do |role|
14
14
  %li.choice
15
15
  %label{:for => "#{obj}_roles_#{role}"}
16
16
  %input{:type => :checkbox, :id => "#{obj}_roles_#{role}", :name => "#{obj}[roles][]", :value => role.to_s, :checked => ("checked" if f.object.roles.include?(role))}= role
17
- %p.inline-hints{:style => "margin: 2px 0 16px 0;"}= role_descriptions[x]
17
+ %p.inline-hints{:style => "margin: 2px 0 16px 0;"}= descriptions[role]
@@ -3,10 +3,34 @@ require "effective_roles/version"
3
3
 
4
4
  module EffectiveRoles
5
5
  mattr_accessor :roles
6
+ mattr_accessor :assignable_roles
6
7
  mattr_accessor :role_descriptions
7
8
 
8
9
  def self.setup
9
10
  yield self
10
11
  end
11
12
 
13
+ def self.roles_collection(obj = nil, user = nil)
14
+ raise ArgumentError.new('EffectiveRoles config.role_descriptions must be a Hash. The Array syntax is deprecated.') unless EffectiveRoles.role_descriptions.kind_of?(Hash)
15
+
16
+ descriptions = role_descriptions[obj.try(:class).to_s] || role_descriptions || {}
17
+
18
+ assignable_roles_for(user, obj).map do |role|
19
+ ["#{role}<br>#{descriptions[role]}".html_safe, role]
20
+ end
21
+ end
22
+
23
+ def self.assignable_roles_for(user, obj = nil)
24
+ return roles unless user.respond_to?(:is_role_restricted?) # All roles, if the user (or object) is not role_resticted
25
+
26
+ assignable = assignable_roles[obj.try(:class).to_s] || assignable_roles || {}
27
+
28
+ if assignable.present?
29
+ user.roles.map { |role| assignable[role] }.flatten.compact.uniq
30
+ else
31
+ roles
32
+ end
33
+ end
34
+
35
+
12
36
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveRoles
2
- VERSION = "0.1"
2
+ VERSION = '1.0.0'.freeze
3
3
  end
@@ -1,30 +1,58 @@
1
1
  EffectiveRoles.setup do |config|
2
2
  config.roles = [:superadmin, :admin, :member] # Only add to the end of this array. Never prepend roles.
3
3
 
4
- # config.role_descriptions may be an Array or a Hash
5
- # These role descriptions are just text displayed by the effective_roles_fields() helper
6
-
7
- # Use a Hash if you want different labels depending on the resource being editted
4
+ # config.assignable_roles
5
+ # =======================
6
+ # When current_user is passed into a form helper function (see README.md)
7
+ # this setting determines which roles that current_user may assign
8
+ #
9
+ # Use this Hash syntax if you want different permissions depending on the resource being editted
10
+ #
11
+ # config.assignable_roles = {
12
+ # 'User' => {
13
+ # :superadmin => [:superadmin, :admin, :member], # Superadmins may assign Users any role
14
+ # :admin => [:admin, :member], # Admins may only assign a User the :admin or :member role
15
+ # :member => [] # Members may not assign any roles
16
+ # },
17
+ # 'Page' => {
18
+ # :superadmin => [:superadmin, :admin, :member], # Superadmins may create Pages for any role
19
+ # :admin => [:admin, :member], # Admins may create Pages for admin and members
20
+ # :member => [:member] # Members may create Pages for members
21
+ # }
8
22
  #
23
+ # Or just keep it simple, and use this Hash syntax of permissions for every resource
24
+ #
25
+ config.assignable_roles = {
26
+ :superadmin => [:superadmin, :admin, :member], # Superadmins may assign any resource any role
27
+ :admin => [:admin, :member], # Admins may only assign the :admin or :member role
28
+ :member => [] # Members may not assign any roles
29
+ }
9
30
 
31
+ # config.role_descriptions
32
+ # ========================
33
+ # This setting configures the text that is displayed by form helpers (see README.md)
34
+ #
35
+ # Use this Hash syntax if you want different labels depending on the resource being editted
36
+ #
10
37
  # config.role_descriptions = {
11
- # 'User' => [
12
- # "full access to everything. Can manage users and all website content.",
13
- # "full access to website content. Cannot manage users.",
14
- # "cannot access admin area. Can see all content in members-only sections of the website."
15
- # ],
16
- # 'Effective::Page' => [
17
- # "allow superadmins to see this page",
18
- # "allow admins to see this page",
19
- # "allow members to see this page"
20
- # ]
38
+ # 'User' => {
39
+ # :superadmin => 'full access to everything. Can manage users and all website content.',
40
+ # :admin => 'full access to website content. Cannot manage users.',
41
+ # :member => 'cannot access admin area. Can see all content in members-only sections of the website.''
42
+ # },
43
+ # 'Effective::Page' => {
44
+ # :superadmin => 'allow superadmins to see this page',
45
+ # :admin => 'allow admins to see this page',
46
+ # :member => 'allow members to see this page'
47
+ # }
21
48
  # }
22
-
23
- # Or just keep it simple, and use the same Array of labels for everything
24
49
  #
25
- config.role_descriptions = [
26
- "full access to everything. Can manage users and all website content.",
27
- "full access to website content. Cannot manage users.",
28
- "cannot access admin area. Can see all content in members-only sections of the website."
29
- ]
50
+ # Or just keep it simple, and use this Hash syntax of permissions for every resource
51
+ #
52
+ config.role_descriptions = {
53
+ :superadmin => 'full access to everything. Can manage users and all website content.',
54
+ :admin => 'full access to website content. Cannot manage users.',
55
+ :member => 'cannot access admin area. Can see all content in members-only sections of the website.'
56
+ }
57
+
30
58
  end
metadata CHANGED
@@ -1,141 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_roles
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Code and Effect
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-24 00:00:00.000000000 Z
11
+ date: 2014-12-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: 3.2.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: factory_girl_rails
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec-rails
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :development
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: shoulda-matchers
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: sqlite3
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: psych
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- description: Implements multi-role authorization based on an integer roles_mask field.
111
- Includes a mixin for adding authentication for any model. SQL Finders for returning
112
- a Relation with all permitted records. Handy formtastic helper for assigning roles.
113
- Intended for use with the other effective_* gems Designed to work on its own, or
114
- with simple pass through to CanCan
26
+ version: 3.2.0
27
+ description: Assign multiple roles to any User or other ActiveRecord object. Select
28
+ only the appropriate objects based on intelligent, chainable ActiveRecord::Relation
29
+ finder methods.
115
30
  email:
116
31
  - info@codeandeffect.com
117
32
  executables: []
118
33
  extensions: []
119
34
  extra_rdoc_files: []
120
35
  files:
36
+ - MIT-LICENSE
37
+ - README.md
38
+ - Rakefile
121
39
  - app/helpers/effective_roles_helper.rb
122
40
  - app/models/concerns/acts_as_role_restricted.rb
123
41
  - app/views/effective/roles/_roles_fields.html.haml
42
+ - lib/effective_roles.rb
124
43
  - lib/effective_roles/engine.rb
125
44
  - lib/effective_roles/version.rb
126
- - lib/effective_roles.rb
127
45
  - lib/generators/effective_roles/install_generator.rb
128
- - lib/generators/templates/effective_roles.rb
129
46
  - lib/generators/templates/README
47
+ - lib/generators/templates/effective_roles.rb
130
48
  - lib/tasks/effective_roles_tasks.rake
131
- - MIT-LICENSE
132
- - Rakefile
133
- - README.md
49
+ - spec/dummy/README.rdoc
50
+ - spec/dummy/Rakefile
134
51
  - spec/dummy/app/assets/javascripts/application.js
135
52
  - spec/dummy/app/assets/stylesheets/application.css
136
53
  - spec/dummy/app/controllers/application_controller.rb
137
54
  - spec/dummy/app/helpers/application_helper.rb
138
55
  - spec/dummy/app/views/layouts/application.html.erb
56
+ - spec/dummy/config.ru
139
57
  - spec/dummy/config/application.rb
140
58
  - spec/dummy/config/boot.rb
141
59
  - spec/dummy/config/database.yml
@@ -151,7 +69,6 @@ files:
151
69
  - spec/dummy/config/initializers/wrap_parameters.rb
152
70
  - spec/dummy/config/locales/en.yml
153
71
  - spec/dummy/config/routes.rb
154
- - spec/dummy/config.ru
155
72
  - spec/dummy/db/development.sqlite3
156
73
  - spec/dummy/db/schema.rb
157
74
  - spec/dummy/db/test.sqlite3
@@ -161,36 +78,36 @@ files:
161
78
  - spec/dummy/public/422.html
162
79
  - spec/dummy/public/500.html
163
80
  - spec/dummy/public/favicon.ico
164
- - spec/dummy/Rakefile
165
- - spec/dummy/README.rdoc
166
81
  - spec/dummy/script/rails
167
82
  - spec/effective_roles_spec.rb
168
83
  - spec/spec_helper.rb
169
84
  - spec/support/factories.rb
170
85
  homepage: https://github.com/code-and-effect/effective_roles
171
- licenses: []
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
172
89
  post_install_message:
173
90
  rdoc_options: []
174
91
  require_paths:
175
92
  - lib
176
93
  required_ruby_version: !ruby/object:Gem::Requirement
177
- none: false
178
94
  requirements:
179
- - - ! '>='
95
+ - - ">="
180
96
  - !ruby/object:Gem::Version
181
97
  version: '0'
182
98
  required_rubygems_version: !ruby/object:Gem::Requirement
183
- none: false
184
99
  requirements:
185
- - - ! '>='
100
+ - - ">="
186
101
  - !ruby/object:Gem::Version
187
102
  version: '0'
188
103
  requirements: []
189
104
  rubyforge_project:
190
- rubygems_version: 1.8.25
105
+ rubygems_version: 2.4.3
191
106
  signing_key:
192
- specification_version: 3
193
- summary: Implements multi-role authorization based on an integer roles_mask field
107
+ specification_version: 4
108
+ summary: Assign multiple roles to any User or other ActiveRecord object. Select only
109
+ the appropriate objects based on intelligent, chainable ActiveRecord::Relation finder
110
+ methods.
194
111
  test_files:
195
112
  - spec/dummy/app/assets/javascripts/application.js
196
113
  - spec/dummy/app/assets/stylesheets/application.css
@@ -228,4 +145,3 @@ test_files:
228
145
  - spec/effective_roles_spec.rb
229
146
  - spec/spec_helper.rb
230
147
  - spec/support/factories.rb
231
- has_rdoc: