slow_your_roles 2.0.2
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 +7 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +73 -0
- data/README.md +223 -0
- data/Rakefile +15 -0
- data/init.rb +3 -0
- data/lib/generators/active_record/slow_your_roles_generator.rb +55 -0
- data/lib/generators/active_record/templates/migration_bitmask.rb.erb +12 -0
- data/lib/generators/active_record/templates/migration_serialize.rb.erb +12 -0
- data/lib/generators/active_record/templates/model.rb.erb +5 -0
- data/lib/generators/install_generator_helpers.rb +27 -0
- data/lib/generators/slow_your_roles/slow_your_roles_generator.rb +26 -0
- data/lib/generators/templates/README +9 -0
- data/lib/methods/bitmask.rb +78 -0
- data/lib/methods/serialize.rb +108 -0
- data/lib/slow_your_roles.rb +63 -0
- data/slow_your_roles.gemspec +37 -0
- data/spec/methods/bitmask_spec.rb +261 -0
- data/spec/methods/serialize_spec.rb +321 -0
- data/spec/spec_helper.rb +67 -0
- metadata +152 -0
@@ -0,0 +1,321 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe SlowYourRoles do
|
6
|
+
describe 'serialize method' do
|
7
|
+
it 'should allow me to set a users role' do
|
8
|
+
user = SerializeUser.new
|
9
|
+
user.add_role 'admin'
|
10
|
+
expect(user.roles).to include('admin')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should allow me to set multiple roles at one time' do
|
14
|
+
user = SerializeUser.new
|
15
|
+
user.add_roles 'admin', 'manager'
|
16
|
+
expect(user.roles).to include 'admin'
|
17
|
+
expect(user.roles).to include 'manager'
|
18
|
+
expect(user.roles.length).to eq 2
|
19
|
+
user.add_roles 'admin', 'manager','user'
|
20
|
+
expect(user.roles).to include 'user'
|
21
|
+
expect(user.roles.length).to eq 3
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should return true for is_admin? if the admin role is added to the user' do
|
25
|
+
user = SerializeUser.new
|
26
|
+
user.add_role 'admin'
|
27
|
+
expect(user.is_admin?).to eq true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return true for has_role? 'admin' if the admin role is added to the user" do
|
31
|
+
user = SerializeUser.new
|
32
|
+
user.add_role 'admin'
|
33
|
+
expect(user.has_role?('admin')).to eq true
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should turn false for has_role? 'manager' if manager role is not added to the user" do
|
37
|
+
user = SerializeUser.new
|
38
|
+
expect(user.has_role?('manager')).to eq false
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should turn false for is_manager? if manager role is not added to the user' do
|
42
|
+
user = SerializeUser.new
|
43
|
+
expect(user.is_manager?).to eq false
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should return the users role through association' do
|
47
|
+
user = BitmaskUser.create(name: 'Bob')
|
48
|
+
user.add_role! 'admin'
|
49
|
+
|
50
|
+
Membership.create(name: 'Test Membership', bitmask_user: user)
|
51
|
+
|
52
|
+
expect(Membership.last.bitmask_user.is_admin?).to eq true
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should get no method error if no roles on model' do
|
56
|
+
b = Beggar.create(name: 'Ivor')
|
57
|
+
|
58
|
+
b.is_admin?
|
59
|
+
rescue StandardError => e
|
60
|
+
expect(e.class).to eq(NoMethodError)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should get no method error if no roles on model even through association' do
|
64
|
+
b = Beggar.create(name: 'Ivor')
|
65
|
+
Membership.create(name: 'Beggars club', beggar: b)
|
66
|
+
Membership.last.beggar.is_admin?
|
67
|
+
|
68
|
+
rescue StandardError => e
|
69
|
+
expect(e.class).to eq(NoMethodError)
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'normal methods' do
|
73
|
+
it 'should not save to the database if not implicitly saved' do
|
74
|
+
user = SerializeUser.create(name: 'Ryan')
|
75
|
+
user.add_role 'admin'
|
76
|
+
expect(user.is_admin?).to eq true
|
77
|
+
user.reload
|
78
|
+
|
79
|
+
expect(user.is_admin?).to eq false
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should save to the database if implicity saved' do
|
83
|
+
user = SerializeUser.create(name: 'Ryan')
|
84
|
+
user.add_role 'admin'
|
85
|
+
expect(user.is_admin?).to eq true
|
86
|
+
user.save
|
87
|
+
user.reload
|
88
|
+
|
89
|
+
expect(user.is_admin?).to eq true
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should clear all roles and not save if not implicitly saved' do
|
93
|
+
user = SerializeUser.create(name: 'Ryan')
|
94
|
+
user.add_role 'admin'
|
95
|
+
expect(user.is_admin?).to eq true
|
96
|
+
user.save
|
97
|
+
user.reload
|
98
|
+
expect(user.is_admin?).to eq true
|
99
|
+
|
100
|
+
user.clear_roles
|
101
|
+
expect(user.is_admin?).to eq false
|
102
|
+
user.reload
|
103
|
+
|
104
|
+
expect(user.is_admin?).to eq true
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should clear all roles and save if implicitly saved' do
|
108
|
+
user = SerializeUser.create(name: 'Ryan')
|
109
|
+
user.add_role 'admin'
|
110
|
+
expect(user.is_admin?).to eq true
|
111
|
+
user.save
|
112
|
+
user.reload
|
113
|
+
expect(user.is_admin?).to eq true
|
114
|
+
|
115
|
+
user.clear_roles
|
116
|
+
expect(user.is_admin?).to eq false
|
117
|
+
user.save
|
118
|
+
user.reload
|
119
|
+
|
120
|
+
expect(user.is_admin?).to eq false
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should remove a role and not save unless implicitly saved' do
|
124
|
+
user = SerializeUser.create(name: 'Ryan')
|
125
|
+
user.add_role 'admin'
|
126
|
+
expect(user.is_admin?).to eq true
|
127
|
+
user.save
|
128
|
+
user.reload
|
129
|
+
|
130
|
+
expect(user.is_admin?).to eq true
|
131
|
+
user.remove_role 'admin'
|
132
|
+
expect(user.is_admin?).to eq false
|
133
|
+
user.reload
|
134
|
+
|
135
|
+
expect(user.is_admin?).to eq true
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should remove a role and save if implicitly saved' do
|
139
|
+
user = SerializeUser.create(name: 'Ryan')
|
140
|
+
user.add_role 'admin'
|
141
|
+
expect(user.is_admin?).to eq true
|
142
|
+
user.save
|
143
|
+
user.reload
|
144
|
+
|
145
|
+
expect(user.is_admin?).to eq true
|
146
|
+
user.remove_role 'admin'
|
147
|
+
expect(user.is_admin?).to eq false
|
148
|
+
user.save
|
149
|
+
user.reload
|
150
|
+
|
151
|
+
expect(user.is_admin?).to eq false
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe 'bang method' do
|
156
|
+
it 'should save to the database if the bang method is used' do
|
157
|
+
user = SerializeUser.create(name: 'Ryan')
|
158
|
+
user.add_role! 'admin'
|
159
|
+
expect(user.is_admin?).to eq true
|
160
|
+
user.reload
|
161
|
+
|
162
|
+
expect(user.is_admin?).to eq true
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'should allow me to set multiple roles at one time' do
|
166
|
+
user = SerializeUser.new
|
167
|
+
user.add_roles! 'admin', 'manager'
|
168
|
+
expect(user.roles).to include 'admin'
|
169
|
+
expect(user.roles).to include 'manager'
|
170
|
+
expect(user.roles.length).to eq 2
|
171
|
+
user.add_roles! 'admin', 'manager','user'
|
172
|
+
expect(user.roles).to include 'user'
|
173
|
+
expect(user.roles.length).to eq 3
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should remove a role and save' do
|
177
|
+
user = SerializeUser.create(name: 'Ryan')
|
178
|
+
user.add_role 'admin'
|
179
|
+
expect(user.is_admin?).to eq true
|
180
|
+
user.save
|
181
|
+
user.reload
|
182
|
+
|
183
|
+
expect(user.is_admin?).to eq true
|
184
|
+
user.remove_role! 'admin'
|
185
|
+
expect(user.is_admin?).to eq false
|
186
|
+
user.reload
|
187
|
+
|
188
|
+
expect(user.is_admin?).to eq false
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe 'scopes' do
|
193
|
+
describe 'with_role' do
|
194
|
+
describe 'with markers' do
|
195
|
+
before do
|
196
|
+
@marker_cache = SerializeUser.roles_marker
|
197
|
+
end
|
198
|
+
|
199
|
+
after do
|
200
|
+
SerializeUser.roles_marker = @marker_cache
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'should prove that wrapper markers are a necessary strategy by failing without them' do
|
204
|
+
SerializeUser.roles_marker = ''
|
205
|
+
(morgan = SerializeUser.create(name: 'Mr. Freeman')).add_role!('onrecursionrecursi')
|
206
|
+
expect(SerializeUser.with_role('recursion')).to include morgan
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'should not allow roles to be added if they include the roles_marker character' do
|
210
|
+
SerializeUser.roles_marker = '!'
|
211
|
+
user = SerializeUser.create(name: 'Towelie')
|
212
|
+
expect(user.add_role!('funkytown!')).to eq false
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'should implement the `with_role` scope' do
|
217
|
+
expect(SerializeUser).to respond_to :without_role
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should return an ActiveRecord::Relation' do
|
221
|
+
expect(SerializeUser.with_role('admin').class).to eq(
|
222
|
+
"SerializeUser::ActiveRecord_Relation".constantize
|
223
|
+
)
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'should match records for a given role' do
|
227
|
+
user = SerializeUser.create(name: 'Daniel')
|
228
|
+
expect(SerializeUser.with_role('admin')).not_to include user
|
229
|
+
|
230
|
+
user.add_role! 'admin'
|
231
|
+
expect(SerializeUser.with_role('admin')).to include user
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'should be chainable' do
|
235
|
+
(daniel = SerializeUser.create(name: 'Daniel')).add_role! 'user'
|
236
|
+
(ryan = SerializeUser.create(name: 'Ryan')).add_role! 'user'
|
237
|
+
ryan.add_role! 'admin'
|
238
|
+
admin_users = SerializeUser.with_role('user').with_role('admin')
|
239
|
+
expect(admin_users).to include ryan
|
240
|
+
expect(admin_users).not_to include daniel
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should avoid incorrectly matching roles where the name is a subset of another role's name" do
|
244
|
+
(chuck = SerializeUser.create(name: 'Mr. Norris')).add_role!('recursion')
|
245
|
+
(morgan = SerializeUser.create(name: 'Mr. Freeman')).add_role!('onrecursionrecursi')
|
246
|
+
expect(SerializeUser.with_role('recursion')).to include chuck
|
247
|
+
expect(SerializeUser.with_role('recursion')).not_to include morgan
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'should correctly handle markers on failed saves' do
|
251
|
+
UniqueSerializeUser.create(name: 'Elvis')
|
252
|
+
(imposter = UniqueSerializeUser.create(name: 'Elvisbot')).add_role!('sings-like-a-robot')
|
253
|
+
imposter.name = 'Elvis'
|
254
|
+
expect(imposter.save).to eq false
|
255
|
+
expect(imposter.roles.any? { |r| r.include?(SerializeUser.roles_marker) }).to eq false
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe 'without_role' do
|
260
|
+
describe 'with markers' do
|
261
|
+
before do
|
262
|
+
@marker_cache = SerializeUser.roles_marker
|
263
|
+
end
|
264
|
+
|
265
|
+
after do
|
266
|
+
SerializeUser.roles_marker = @marker_cache
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'should prove that wrapper markers are a necessary strategy by failing without them' do
|
270
|
+
SerializeUser.roles_marker = ''
|
271
|
+
(morgan = SerializeUser.create(name: 'Mr. Freeman')).add_role!('onrecursionrecursi')
|
272
|
+
expect(SerializeUser.without_role('onrecursionrecursi')).not_to include morgan
|
273
|
+
expect(SerializeUser.without_role('recursion')).not_to include morgan
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'should not allow roles to be added if they include the roles_marker character' do
|
277
|
+
SerializeUser.roles_marker = '!'
|
278
|
+
user = SerializeUser.create(name: 'Towelie')
|
279
|
+
expect(user.add_role!('funkytown!')).to eq false
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'should implement the `without_role` scope' do
|
284
|
+
expect(SerializeUser).to respond_to :without_role
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'should return an ActiveRecord::Relation' do
|
288
|
+
expect(SerializeUser.without_role('admin').class).to eq(
|
289
|
+
"SerializeUser::ActiveRecord_Relation".constantize
|
290
|
+
)
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'should match records for a given role' do
|
294
|
+
user = SerializeUser.create(name: 'Daniel')
|
295
|
+
expect(SerializeUser.without_role('admin')).to include user
|
296
|
+
user.add_role! 'admin'
|
297
|
+
expect(SerializeUser.without_role('admin')).not_to include user
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'should be chainable' do
|
301
|
+
(daniel = SerializeUser.create(name: 'Daniel')).add_role! 'user'
|
302
|
+
(ryan = SerializeUser.create(name: 'Ryan')).add_role! 'user'
|
303
|
+
ryan.add_role! 'admin'
|
304
|
+
non_admin_users = SerializeUser.with_role('user').without_role('admin')
|
305
|
+
expect(non_admin_users).not_to include ryan
|
306
|
+
expect(non_admin_users).to include daniel
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should avoid incorrectly matching roles where the name is a subset of another role's name" do
|
310
|
+
(chuck = SerializeUser.create(name: 'Mr. Norris')).add_role!('recursion')
|
311
|
+
(morgan = SerializeUser.create(name: 'Mr. Freeman')).add_role!('onrecursionrecursi')
|
312
|
+
|
313
|
+
expect(SerializeUser.without_role('onrecursionrecursi')).to include chuck
|
314
|
+
expect(SerializeUser.without_role('onrecursionrecursi')).not_to include morgan
|
315
|
+
expect(SerializeUser.without_role('recursion')).not_to include chuck
|
316
|
+
expect(SerializeUser.without_role('recursion')).to include morgan
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
|
6
|
+
require 'active_record'
|
7
|
+
require 'slow_your_roles'
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
end
|
11
|
+
|
12
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
13
|
+
|
14
|
+
def setup_db
|
15
|
+
ActiveRecord::Schema.define(version: 1) do
|
16
|
+
create_table :serialize_users do |t|
|
17
|
+
t.string :name
|
18
|
+
t.string :roles, default: '--- []'
|
19
|
+
end
|
20
|
+
create_table :bitmask_users do |t|
|
21
|
+
t.string :name
|
22
|
+
t.integer :roles_mask, default: 0
|
23
|
+
end
|
24
|
+
|
25
|
+
create_table :memberships do |t|
|
26
|
+
t.string :name
|
27
|
+
t.integer :bitmask_user_id
|
28
|
+
t.integer :beggar_id
|
29
|
+
end
|
30
|
+
|
31
|
+
create_table :beggars do |t|
|
32
|
+
t.string :name
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def teardown_db
|
38
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
39
|
+
ActiveRecord::Base.connection.drop_table(table)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
setup_db
|
44
|
+
|
45
|
+
class SerializeUser < ActiveRecord::Base
|
46
|
+
slow_your_roles :roles, method: :serialize
|
47
|
+
end
|
48
|
+
|
49
|
+
class UniqueSerializeUser < SerializeUser
|
50
|
+
validates :name, uniqueness: true
|
51
|
+
end
|
52
|
+
|
53
|
+
class BitmaskUser < ActiveRecord::Base
|
54
|
+
has_many :memberships
|
55
|
+
slow_your_roles :roles_mask, method: :bitmask
|
56
|
+
|
57
|
+
ROLES_MASK = %w[admin manager user].freeze
|
58
|
+
end
|
59
|
+
|
60
|
+
class Membership < ActiveRecord::Base
|
61
|
+
belongs_to :bitmask_user
|
62
|
+
belongs_to :beggar
|
63
|
+
end
|
64
|
+
|
65
|
+
class Beggar < ActiveRecord::Base
|
66
|
+
has_many :memberships
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: slow_your_roles
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aaron A
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 6.0.3.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 6.0.3.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 6.0.3.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 6.0.3.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sqlite3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Easy role authorization in Rails ported from an unmaintained library
|
84
|
+
email: _aaron@tutanota.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files:
|
88
|
+
- CHANGELOG.md
|
89
|
+
- README.md
|
90
|
+
- lib/generators/active_record/slow_your_roles_generator.rb
|
91
|
+
- lib/generators/active_record/templates/migration_bitmask.rb.erb
|
92
|
+
- lib/generators/active_record/templates/migration_serialize.rb.erb
|
93
|
+
- lib/generators/active_record/templates/model.rb.erb
|
94
|
+
- lib/generators/slow_your_roles/slow_your_roles_generator.rb
|
95
|
+
- lib/generators/templates/README
|
96
|
+
- lib/generators/install_generator_helpers.rb
|
97
|
+
- lib/slow_your_roles.rb
|
98
|
+
- lib/methods/bitmask.rb
|
99
|
+
- lib/methods/serialize.rb
|
100
|
+
files:
|
101
|
+
- CHANGELOG.md
|
102
|
+
- Gemfile
|
103
|
+
- Gemfile.lock
|
104
|
+
- README.md
|
105
|
+
- Rakefile
|
106
|
+
- init.rb
|
107
|
+
- lib/generators/active_record/slow_your_roles_generator.rb
|
108
|
+
- lib/generators/active_record/templates/migration_bitmask.rb.erb
|
109
|
+
- lib/generators/active_record/templates/migration_serialize.rb.erb
|
110
|
+
- lib/generators/active_record/templates/model.rb.erb
|
111
|
+
- lib/generators/install_generator_helpers.rb
|
112
|
+
- lib/generators/slow_your_roles/slow_your_roles_generator.rb
|
113
|
+
- lib/generators/templates/README
|
114
|
+
- lib/methods/bitmask.rb
|
115
|
+
- lib/methods/serialize.rb
|
116
|
+
- lib/slow_your_roles.rb
|
117
|
+
- slow_your_roles.gemspec
|
118
|
+
- spec/methods/bitmask_spec.rb
|
119
|
+
- spec/methods/serialize_spec.rb
|
120
|
+
- spec/spec_helper.rb
|
121
|
+
homepage: http://github.com/aarona/slow_your_roles
|
122
|
+
licenses: []
|
123
|
+
metadata: {}
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options:
|
126
|
+
- "--line-numbers"
|
127
|
+
- "--inline-source"
|
128
|
+
- "--title"
|
129
|
+
- Slow_your_roles
|
130
|
+
- "--main"
|
131
|
+
- README.md
|
132
|
+
require_paths:
|
133
|
+
- lib
|
134
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
requirements: []
|
145
|
+
rubygems_version: 3.0.8
|
146
|
+
signing_key:
|
147
|
+
specification_version: 4
|
148
|
+
summary: Easy role authorization in Rails
|
149
|
+
test_files:
|
150
|
+
- spec/spec_helper.rb
|
151
|
+
- spec/methods/serialize_spec.rb
|
152
|
+
- spec/methods/bitmask_spec.rb
|