roles_generic 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +63 -207
- data/Rakefile +6 -4
- data/VERSION +1 -1
- data/lib/generators/roles_model/roles/roles_generator.rb +4 -2
- data/lib/roles_generic/base.rb +11 -15
- data/lib/roles_generic/generic/role.rb +18 -0
- data/lib/roles_generic/generic/{class_methods.rb → user/class_methods.rb} +2 -3
- data/lib/roles_generic/generic/{util.rb → user/configuration.rb} +6 -6
- data/lib/roles_generic/generic/{implementation.rb → user/implementation.rb} +1 -1
- data/lib/roles_generic/generic/user.rb +22 -0
- data/lib/roles_generic/generic.rb +3 -68
- data/lib/roles_generic/namespaces.rb +13 -0
- data/lib/roles_generic/{many_roles.rb → strategy/multi/many_roles.rb} +3 -4
- data/lib/roles_generic/{role_strings.rb → strategy/multi/role_strings.rb} +9 -3
- data/lib/roles_generic/{roles_mask.rb → strategy/multi/roles_mask.rb} +2 -2
- data/lib/roles_generic/{roles_string.rb → strategy/multi/roles_string.rb} +2 -4
- data/lib/roles_generic/{admin_flag.rb → strategy/single/admin_flag.rb} +2 -2
- data/lib/roles_generic/{one_role.rb → strategy/single/one_role.rb} +3 -4
- data/lib/roles_generic/{role_string.rb → strategy/single/role_string.rb} +2 -2
- data/lib/roles_generic/strategy.rb +26 -0
- data/lib/roles_generic.rb +8 -1
- data/roles_generic.gemspec +124 -0
- data/spec/generators/admin_flag_generator_spec.rb +2 -2
- data/spec/generators/many_roles_generator_spec.rb +1 -1
- data/spec/generators/one_role_generator_spec.rb +1 -1
- data/spec/generators/role_string_generator_spec.rb +1 -1
- data/spec/generators/role_strings_generator_spec.rb +1 -1
- data/spec/generators/roles_mask_generator_spec.rb +1 -1
- data/spec/generators/roles_string_generator_spec.rb +1 -1
- data/spec/roles_generic/admin_flag_spec.rb +3 -3
- data/spec/roles_generic/many_roles_spec.rb +4 -3
- data/spec/roles_generic/one_role_spec.rb +4 -3
- data/spec/roles_generic/role_string_spec.rb +3 -3
- data/spec/roles_generic/role_strings_spec.rb +3 -3
- data/spec/roles_generic/roles_mask_spec.rb +3 -3
- data/spec/roles_generic/roles_string_spec.rb +3 -3
- data/spec/spec_helper.rb +1 -1
- data/wiki/strategies/admin_flag.textile +20 -0
- data/wiki/strategies/many_roles.textile +48 -0
- data/wiki/strategies/one_role.textile +40 -0
- data/wiki/strategies/role_string.textile +20 -0
- data/wiki/strategies/role_strings.textile +20 -0
- data/wiki/strategies/roles_mask.textile +20 -0
- data/wiki/strategies/roles_string.textile +20 -0
- metadata +61 -22
- data/lib/roles_generic/extensions/core_ext.rb +0 -19
- data/lib/roles_generic/role/class_methods.rb +0 -20
data/README.markdown
CHANGED
@@ -1,14 +1,30 @@
|
|
1
|
-
#
|
1
|
+
# Generic Role strategies
|
2
2
|
|
3
3
|
Generic role strategies that share the same API and are easy to insert in any existing User model.
|
4
|
+
Comes with a Rails 3 generator to instantly configure your Rails 3 app with a Role strategy of choice.
|
4
5
|
|
5
|
-
|
6
|
+
I am in the process of developing multiple *roles_xxx* gems in order to support this generic API for various popular ORMs, such as:
|
6
7
|
|
7
|
-
|
8
|
+
* Active Record (roles_ar)
|
9
|
+
* DataMapper (roles_dm_)
|
10
|
+
* Mongoid (roles_mongoid)
|
11
|
+
* MongoMapper (roles_mm)
|
12
|
+
|
13
|
+
Feel free to roll your own ORM extension for your favorite ORM!
|
14
|
+
|
15
|
+
## Status update (4 sept, 2010)
|
16
|
+
|
17
|
+
Roles generic has now been refactored in order to tidy up the code base and make it even more generic, flexible and easy to extend.
|
18
|
+
|
19
|
+
Currently I'm not sure if the generator fully works. It has a dependency on *rails3_artifactor*, which should work.
|
20
|
+
However my gem to test generators (called *generator-spec*), is currently not functioning as it has dependencies to other gems that have undergone major
|
21
|
+
refactorings lately. Let me know if the generator works or if not, see if you can make it work using *rails3_artifactor* and let me know the fix ;)
|
22
|
+
|
23
|
+
## Install
|
8
24
|
|
9
25
|
<code>gem install roles_generic</code>
|
10
26
|
|
11
|
-
|
27
|
+
## Usage
|
12
28
|
|
13
29
|
The library comes with the following role models built-in:
|
14
30
|
|
@@ -22,13 +38,15 @@ The library comes with the following role models built-in:
|
|
22
38
|
|
23
39
|
Note: The following examples use RSpec to demonstrate usage scenarios.
|
24
40
|
|
41
|
+
Examples of configuring for the other strategies can be found in the wiki pages.
|
42
|
+
|
25
43
|
## Example : admin_flag
|
26
44
|
|
27
45
|
Creates and uses a binary field 'admin_flag', which when true signals that this user is an administrator and otherwise a normal user.
|
28
46
|
|
29
47
|
<pre>
|
30
48
|
class User
|
31
|
-
include
|
49
|
+
include Roles::Generic
|
32
50
|
|
33
51
|
attr_accessor :name, :admin_flag
|
34
52
|
|
@@ -49,7 +67,7 @@ Data Mapper with persistent attributes :name and :admin_flag
|
|
49
67
|
|
50
68
|
<pre>
|
51
69
|
class User
|
52
|
-
include
|
70
|
+
include Roles::Generic
|
53
71
|
include DataMapper::Resource
|
54
72
|
|
55
73
|
property :name, Boolean
|
@@ -66,232 +84,70 @@ Data Mapper with persistent attributes :name and :admin_flag
|
|
66
84
|
end
|
67
85
|
</pre>
|
68
86
|
|
87
|
+
## Role API
|
69
88
|
|
70
|
-
|
71
|
-
|
72
|
-
Creates and uses a single role name, a string
|
73
|
-
|
74
|
-
<pre>
|
75
|
-
class User
|
76
|
-
include RoleModels::Generic
|
77
|
-
|
78
|
-
attr_accessor :name, :role_string
|
79
|
-
|
80
|
-
role_strategy :role_string, :default
|
81
|
-
|
82
|
-
roles :admin, :user
|
83
|
-
|
84
|
-
def initialize name, *new_roles
|
85
|
-
self.name = name
|
86
|
-
self.roles = new_roles
|
87
|
-
end
|
88
|
-
end
|
89
|
-
</pre>
|
90
|
-
|
91
|
-
## Example : roles_string
|
92
|
-
|
93
|
-
Creates and uses single comma separated String of role names
|
94
|
-
|
95
|
-
<pre>
|
96
|
-
class User
|
97
|
-
include RoleModels::Generic
|
98
|
-
|
99
|
-
attr_accessor :name, :roles_string
|
100
|
-
|
101
|
-
role_strategy :roles_string, :default
|
102
|
-
|
103
|
-
roles :admin, :user
|
104
|
-
|
105
|
-
def initialize name, *new_roles
|
106
|
-
self.name = name
|
107
|
-
self.roles = new_roles
|
108
|
-
end
|
109
|
-
end
|
110
|
-
</pre>
|
111
|
-
|
112
|
-
## Example : role_strings
|
113
|
-
|
114
|
-
Creates and uses an Set of role names as strings
|
115
|
-
|
116
|
-
<pre>
|
117
|
-
class User
|
118
|
-
include RoleModels::Generic
|
119
|
-
|
120
|
-
attr_accessor :name, :role_strings
|
121
|
-
|
122
|
-
role_strategy :role_strings, :default
|
123
|
-
|
124
|
-
roles :admin, :user
|
125
|
-
|
126
|
-
def initialize name, *new_roles
|
127
|
-
self.name = name
|
128
|
-
self.roles = new_roles
|
129
|
-
end
|
130
|
-
end
|
131
|
-
</pre>
|
132
|
-
|
133
|
-
## Example : roles_mask
|
134
|
-
|
135
|
-
Creates and uses an Integer field where each on bit signifies a role
|
136
|
-
|
137
|
-
<pre>
|
138
|
-
class User
|
139
|
-
include RoleModels::Generic
|
140
|
-
|
141
|
-
attr_accessor :name, :roles_mask
|
142
|
-
|
143
|
-
role_strategy :roles_mask, :default
|
144
|
-
|
145
|
-
roles :admin, :user
|
146
|
-
|
147
|
-
def initialize name, *new_roles
|
148
|
-
self.name = name
|
149
|
-
self.roles = new_roles
|
150
|
-
end
|
151
|
-
end
|
152
|
-
</pre>
|
153
|
-
|
154
|
-
## Example : one_role
|
155
|
-
|
156
|
-
Creates and uses a single relation to a Role model for each user
|
157
|
-
|
158
|
-
<pre>
|
159
|
-
class Role
|
160
|
-
attr_accessor :name
|
161
|
-
|
162
|
-
def self.find_role role_name
|
163
|
-
roles.to_a.select{|r| r.name == role_name}.first
|
164
|
-
end
|
165
|
-
|
166
|
-
class << self
|
167
|
-
attr_accessor :roles
|
168
|
-
end
|
169
|
-
|
170
|
-
def initialize name
|
171
|
-
@name = name
|
172
|
-
self.class.roles ||= Set.new
|
173
|
-
self.class.roles << self
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
class User
|
179
|
-
include RoleModels::Generic
|
180
|
-
role_strategy :one_role, :default
|
181
|
-
|
182
|
-
role_class :role
|
183
|
-
|
184
|
-
attr_accessor :name, :one_role
|
185
|
-
|
186
|
-
roles :admin, :user
|
187
|
-
|
188
|
-
def initialize name, *new_roles
|
189
|
-
self.name = name
|
190
|
-
self.roles = new_roles
|
191
|
-
end
|
192
|
-
end
|
193
|
-
</pre>
|
194
|
-
|
195
|
-
## Example : many_roles
|
196
|
-
|
197
|
-
Creates and uses a single relation to a Role model for each user
|
89
|
+
### Instance methods
|
198
90
|
|
199
|
-
|
200
|
-
|
201
|
-
attr_accessor :name
|
202
|
-
|
203
|
-
def self.find_role role_name
|
204
|
-
roles.to_a.select{|r| r.name == role_name}.first
|
205
|
-
end
|
206
|
-
|
207
|
-
def self.find_roles *role_names
|
208
|
-
result = Set.new
|
209
|
-
role_names.flatten.each do |role_name|
|
210
|
-
found_role = find_role(role_name)
|
211
|
-
result << found_role if found_role
|
212
|
-
end
|
213
|
-
result
|
214
|
-
end
|
215
|
-
|
216
|
-
class << self
|
217
|
-
attr_accessor :roles
|
218
|
-
end
|
219
|
-
|
220
|
-
def initialize name
|
221
|
-
@name = name
|
222
|
-
self.class.roles ||= Set.new
|
223
|
-
self.class.roles << self
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
class User
|
228
|
-
include RoleModels::Generic
|
229
|
-
role_strategy :many_roles, :default
|
91
|
+
Has ALL of the given roles been assigned?
|
92
|
+
* has_roles?(*roles) - alias: is?
|
230
93
|
|
231
|
-
|
94
|
+
Has ANY (at least ONE) of the given roles been assigned?
|
95
|
+
* has_role? *roles - alias: has?
|
232
96
|
|
233
|
-
|
97
|
+
Is this a valid role? (can the role be found in list of valid roles?)
|
98
|
+
* valid_role? role
|
234
99
|
|
235
|
-
|
100
|
+
Is this user the admin user (and user has no other roles)
|
101
|
+
* admin? - short for - is?(:admin)
|
236
102
|
|
237
|
-
|
238
|
-
self.name = name
|
239
|
-
self.roles = new_roles
|
240
|
-
end
|
241
|
-
end
|
242
|
-
</pre>
|
103
|
+
### Class methods
|
243
104
|
|
105
|
+
* roles - list of valid roles
|
106
|
+
* roles_attribute - get the attribute where the role is stored on the user
|
107
|
+
* roles_attribute= - set the role(s) attribute
|
108
|
+
|
244
109
|
## Usage of API
|
245
110
|
|
246
111
|
<pre>
|
247
112
|
before :each do
|
248
113
|
@admin_user = User.new 'Admin user', :admin
|
249
|
-
@
|
114
|
+
@guest = User.new 'Guest', :guest
|
250
115
|
end
|
251
116
|
|
252
117
|
it "user 'Admin user' should have role :admin" do
|
253
|
-
|
254
|
-
@admin_user.
|
118
|
+
|
119
|
+
@admin_user.role.should == :admin
|
120
|
+
@admin_user.roles.should == [:admin]
|
255
121
|
@admin_user.admin?.should be_true
|
256
122
|
|
257
|
-
@admin_user.has_role?(:user).should be_false
|
123
|
+
@admin_user.has_role? (:user).should be_false
|
258
124
|
|
259
|
-
@admin_user.has_role?(:admin).should be_true
|
260
|
-
@admin_user.is?(:admin).should be_true
|
261
|
-
@admin_user.has_roles?(:admin).should be_true
|
262
|
-
@admin_user.has?(:admin).should be_true
|
263
|
-
end
|
125
|
+
@admin_user.has_role? (:admin).should be_true
|
126
|
+
@admin_user.is? (:admin).should be_true
|
127
|
+
@admin_user.has_roles? (:admin).should be_true
|
128
|
+
@admin_user.has? (:admin).should be_true
|
264
129
|
|
265
|
-
it "user 'User' should have role :user" do
|
266
|
-
@user.roles.should == [:user]
|
267
|
-
@user.admin?.should be_false
|
268
|
-
|
269
|
-
@user.has_role?(:user).should be_true
|
270
|
-
@user.has_role?(:admin).should be_false
|
271
|
-
@user.is?(:admin).should be_false
|
272
|
-
|
273
|
-
@user.has_roles?(:user).should be_true
|
274
|
-
@user.has?(:admin).should be_false
|
275
130
|
end
|
276
|
-
|
277
|
-
it "should set 'User' role to :admin using roles=" do
|
278
|
-
@user.roles = :admin
|
279
|
-
@user.role.should == :admin
|
280
|
-
@user.has_role?(:admin).should be_true
|
281
|
-
end
|
282
|
-
</pre>
|
283
|
-
|
284
|
-
## Future (TODO)
|
285
131
|
|
286
|
-
|
132
|
+
it "user Guest should have role :guest" do
|
133
|
+
@guest.roles.should == [:guest]
|
134
|
+
@guest.admin?.should be_false
|
287
135
|
|
288
|
-
|
136
|
+
@guest.has_role? (:guest).should be_true
|
137
|
+
@guest.has_role? (:admin).should be_false
|
138
|
+
@guest.is? (:admin).should be_false
|
289
139
|
|
290
|
-
|
140
|
+
@guest.has_roles? (:guest).should be_true
|
141
|
+
@guest.has? (:admin).should be_false
|
142
|
+
end
|
291
143
|
|
292
|
-
|
144
|
+
it "should set role of Guest user from :guest to :admin using roles=" do
|
145
|
+
@guest.roles = :admin
|
146
|
+
@guest.role.should == :admin
|
293
147
|
|
294
|
-
|
148
|
+
@guest.has_role?(:admin).should be_true
|
149
|
+
end
|
150
|
+
</pre>
|
295
151
|
|
296
152
|
## Note on Patches/Pull Requests
|
297
153
|
|
data/Rakefile
CHANGED
@@ -7,10 +7,12 @@ begin
|
|
7
7
|
gem.email = "kmandrup@gmail.com"
|
8
8
|
gem.homepage = "http://github.com/kristianmandrup/roles_for_mm"
|
9
9
|
gem.authors = ["Kristian Mandrup"]
|
10
|
-
gem.add_development_dependency "rspec", "
|
11
|
-
gem.add_development_dependency "generator-spec", "
|
12
|
-
gem.add_dependency "require_all", "
|
13
|
-
gem.add_dependency "activesupport", "
|
10
|
+
gem.add_development_dependency "rspec", "~> 2.0.0.beta.19"
|
11
|
+
gem.add_development_dependency "generator-spec", "~> 0.5.1"
|
12
|
+
gem.add_dependency "require_all", "~> 1.1.0"
|
13
|
+
gem.add_dependency "activesupport", "~> 3.0.0"
|
14
|
+
gem.add_dependency 'sugar-high', "~> 0.2.2"
|
15
|
+
gem.add_dependency 'rails3_artifactor', '~> 0.1.1'
|
14
16
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
17
|
end
|
16
18
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'rails3_artifactor'
|
2
|
+
|
1
3
|
module RolesModel
|
2
4
|
module Generators
|
3
5
|
class RolesGenerator < Rails::Generators::NamedBase
|
4
|
-
include
|
6
|
+
include Rails3::Assist::Artifact::Model
|
5
7
|
|
6
8
|
desc "Add role strategy to a model"
|
7
9
|
|
@@ -51,7 +53,7 @@ module RolesModel
|
|
51
53
|
|
52
54
|
def insertion_text
|
53
55
|
%Q{
|
54
|
-
include
|
56
|
+
include Roles::Generic
|
55
57
|
#{role_strategy_statement}
|
56
58
|
#{roles_statement}
|
57
59
|
}
|
data/lib/roles_generic/base.rb
CHANGED
@@ -1,26 +1,22 @@
|
|
1
|
-
|
2
|
-
require 'active_support/inflector'
|
3
|
-
|
4
|
-
module RoleModels
|
5
|
-
module Generic
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
module RoleModels
|
1
|
+
module Roles
|
10
2
|
module Base
|
11
3
|
attr_accessor :orm_name
|
12
4
|
|
5
|
+
def valid_roles
|
6
|
+
strategy_class.valid_roles
|
7
|
+
end
|
8
|
+
|
13
9
|
def roles(*roles)
|
14
10
|
strategy_class.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
|
15
11
|
end
|
16
12
|
|
17
|
-
def role_strategy
|
18
|
-
include_strategy orm_name,
|
13
|
+
def role_strategy strategy_name, options=nil
|
14
|
+
include_strategy orm_name, strategy_name, options
|
19
15
|
end
|
20
16
|
|
21
|
-
def include_strategy orm,
|
17
|
+
def include_strategy orm, strategy_name, options=nil
|
22
18
|
begin
|
23
|
-
constant = "
|
19
|
+
constant = "RoleStrategy::#{orm_name.to_s.camelize}::#{strategy_name.to_s.camelize}".constantize
|
24
20
|
|
25
21
|
strategy_class_method = %Q{
|
26
22
|
def strategy_class
|
@@ -37,9 +33,9 @@ module RoleModels
|
|
37
33
|
include constant
|
38
34
|
end
|
39
35
|
rescue
|
40
|
-
raise "No Role strategy module for ORM #{orm} found for strategy #{
|
36
|
+
raise "No Role strategy module for ORM #{orm} found for strategy #{strategy_name}"
|
41
37
|
end
|
42
38
|
constant.apply_options(options) if constant.respond_to? :apply_options
|
43
39
|
end
|
44
40
|
end
|
45
|
-
end
|
41
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Roles::Generic::Role
|
2
|
+
module InstanceMethods
|
3
|
+
def role_class
|
4
|
+
self.class.role_class_name
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def role_class_name
|
10
|
+
@role_class_name
|
11
|
+
end
|
12
|
+
|
13
|
+
def role_class class_constant
|
14
|
+
const = class_constant.to_s.camelize
|
15
|
+
@role_class_name = "#{const}".constantize
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module Roles::Generic::User
|
2
2
|
module ClassMethods
|
3
3
|
def inherited(subclass) # :nodoc:
|
4
|
-
::
|
4
|
+
::Roles::Generic::User::INHERITABLE_CLASS_ATTRIBUTES.each do |attribute|
|
5
5
|
instance_var = "@#{attribute}"
|
6
6
|
subclass.instance_variable_set(instance_var, instance_variable_get(instance_var))
|
7
7
|
end
|
@@ -26,7 +26,6 @@ module RoleModels::Generic::Base
|
|
26
26
|
#
|
27
27
|
# declare valid roles
|
28
28
|
def roles(*roles)
|
29
|
-
puts "roles: #{roles}"
|
30
29
|
self.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
|
31
30
|
end
|
32
31
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
module
|
1
|
+
module Roles::Generic::User
|
2
2
|
module Configuration
|
3
3
|
def configure(options={})
|
4
4
|
numericality = options[:num]
|
5
5
|
type = options[:type]
|
6
6
|
|
7
7
|
class_eval do
|
8
|
-
include
|
9
|
-
include
|
10
|
-
include
|
8
|
+
include Roles::Generic::User
|
9
|
+
include Roles::Generic::User::SingleRole if numericality == :single
|
10
|
+
include Roles::Generic::Role::InstanceMethods if type == :role_class
|
11
11
|
include self::Implementation
|
12
12
|
|
13
13
|
alias_method :role_symbols, :roles
|
14
14
|
end
|
15
|
-
extend
|
16
|
-
extend
|
15
|
+
extend Roles::Generic::User::ClassMethods
|
16
|
+
extend Roles::Generic::User::DefaultRoleKeys
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_all File.dirname(__FILE__) +'/user'
|
2
|
+
|
3
|
+
module Roles::Generic
|
4
|
+
module User
|
5
|
+
INHERITABLE_CLASS_ATTRIBUTES = [:roles_attribute_name, :valid_roles]
|
6
|
+
|
7
|
+
include Implementation
|
8
|
+
|
9
|
+
def self.included(base) # :nodoc:
|
10
|
+
base.extend ClassMethods
|
11
|
+
base.class_eval do
|
12
|
+
class << self
|
13
|
+
attr_accessor(*::Roles::Generic::User::INHERITABLE_CLASS_ATTRIBUTES)
|
14
|
+
|
15
|
+
def apply_options options
|
16
|
+
roles_attribute default_role_attribute if options == :default
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,77 +1,12 @@
|
|
1
|
-
|
2
|
-
require 'active_support/inflector'
|
3
|
-
require_all File.dirname(__FILE__) + '/extensions'
|
1
|
+
require_all File.dirname(__FILE__) + '/generic'
|
4
2
|
|
5
|
-
module
|
6
|
-
module Base
|
7
|
-
attr_accessor :orm_name
|
8
|
-
|
9
|
-
def valid_roles
|
10
|
-
strategy_class.valid_roles
|
11
|
-
end
|
12
|
-
|
13
|
-
def roles(*roles)
|
14
|
-
strategy_class.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
|
15
|
-
end
|
16
|
-
|
17
|
-
def role_strategy strategy, options=nil
|
18
|
-
include_strategy orm_name, strategy, options
|
19
|
-
end
|
20
|
-
|
21
|
-
def include_strategy orm, strategy, options=nil
|
22
|
-
begin
|
23
|
-
constant = "RoleModels::#{orm_name.to_s.camelize}::#{strategy.to_s.camelize}".constantize
|
24
|
-
|
25
|
-
strategy_class_method = %Q{
|
26
|
-
def strategy_class
|
27
|
-
#{constant}
|
28
|
-
end
|
29
|
-
}
|
30
|
-
|
31
|
-
class_eval do
|
32
|
-
eval strategy_class_method
|
33
|
-
end
|
34
|
-
|
35
|
-
instance_eval do
|
36
|
-
eval strategy_class_method
|
37
|
-
include constant
|
38
|
-
end
|
39
|
-
rescue
|
40
|
-
raise "No Role strategy module for ORM #{orm} found for strategy #{strategy}"
|
41
|
-
end
|
42
|
-
constant.apply_options(options) if constant.respond_to? :apply_options
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
module RoleModels
|
3
|
+
module Roles
|
48
4
|
module Generic
|
49
5
|
def self.included(base)
|
50
|
-
base.extend
|
6
|
+
base.extend Roles::Base
|
51
7
|
base.orm_name = :generic
|
52
8
|
end
|
53
9
|
end
|
54
10
|
end
|
55
11
|
|
56
|
-
require_all File.dirname(__FILE__) +'/generic'
|
57
|
-
|
58
|
-
module RoleModels::Generic
|
59
|
-
module Base
|
60
|
-
INHERITABLE_CLASS_ATTRIBUTES = [:roles_attribute_name, :valid_roles]
|
61
|
-
|
62
|
-
include Implementation
|
63
12
|
|
64
|
-
def self.included(base) # :nodoc:
|
65
|
-
base.extend ClassMethods
|
66
|
-
base.class_eval do
|
67
|
-
class << self
|
68
|
-
attr_accessor(*::RoleModels::Generic::Base::INHERITABLE_CLASS_ATTRIBUTES)
|
69
|
-
|
70
|
-
def apply_options options
|
71
|
-
roles_attribute default_role_attribute if options == :default
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
require 'roles_generic/role/class_methods'
|
2
1
|
require 'set'
|
3
2
|
|
4
|
-
module
|
3
|
+
module RoleStrategy::Generic
|
5
4
|
module ManyRoles
|
6
5
|
def self.default_role_attribute
|
7
6
|
:many_roles
|
@@ -29,11 +28,11 @@ module RoleModels::Generic
|
|
29
28
|
end
|
30
29
|
end
|
31
30
|
|
32
|
-
extend
|
31
|
+
extend Roles::Generic::User::Configuration
|
33
32
|
configure :type => :role_class
|
34
33
|
|
35
34
|
def self.included(base)
|
36
|
-
base.extend
|
35
|
+
base.extend Roles::Generic::Role::ClassMethods
|
37
36
|
end
|
38
37
|
end
|
39
38
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module RoleStrategy::Generic
|
2
4
|
module RoleStrings
|
3
5
|
def self.default_role_attribute
|
4
6
|
:role_strings
|
@@ -8,16 +10,20 @@ module RoleModels::Generic
|
|
8
10
|
# assign roles
|
9
11
|
def roles=(*roles)
|
10
12
|
new_roles = roles.flatten.map{|r| r.to_s if valid_role?(r)}.compact
|
11
|
-
self.send("#{strategy_class.roles_attribute_name}=", Set.new(new_roles)) if new_roles && new_roles.not.empty?
|
13
|
+
self.send("#{strategy_class.roles_attribute_name}=", ::Set.new(new_roles)) if new_roles && new_roles.not.empty?
|
12
14
|
end
|
13
15
|
|
14
16
|
# query assigned roles
|
15
17
|
def roles
|
16
18
|
self.send(strategy_class.roles_attribute_name).map{|r| r.to_sym}
|
17
19
|
end
|
20
|
+
|
21
|
+
def roles_list
|
22
|
+
[roles].flatten
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
|
-
extend
|
26
|
+
extend Roles::Generic::User::Configuration
|
21
27
|
configure
|
22
28
|
end
|
23
29
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'set'
|
2
2
|
|
3
|
-
module
|
3
|
+
module RoleStrategy::Generic
|
4
4
|
module RolesMask
|
5
5
|
def self.default_role_attribute
|
6
6
|
:roles_mask
|
@@ -42,7 +42,7 @@ module RoleModels::Generic
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
extend
|
45
|
+
extend Roles::Generic::User::Configuration
|
46
46
|
configure
|
47
47
|
end
|
48
48
|
end
|