roles_generic 0.1.1 → 0.2.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.
- 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
|