roles_generic 0.1.1
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/.document +5 -0
- data/.gitignore +21 -0
- data/.rspec +1 -0
- data/LICENSE +20 -0
- data/README.markdown +308 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/lib/generators/roles_model/roles/roles_generator.rb +65 -0
- data/lib/roles_generic/admin_flag.rb +40 -0
- data/lib/roles_generic/base.rb +45 -0
- data/lib/roles_generic/extensions/core_ext.rb +19 -0
- data/lib/roles_generic/generic/class_methods.rb +33 -0
- data/lib/roles_generic/generic/implementation.rb +26 -0
- data/lib/roles_generic/generic/util.rb +39 -0
- data/lib/roles_generic/generic.rb +77 -0
- data/lib/roles_generic/many_roles.rb +39 -0
- data/lib/roles_generic/one_role.rb +40 -0
- data/lib/roles_generic/role/class_methods.rb +20 -0
- data/lib/roles_generic/role_string.rb +29 -0
- data/lib/roles_generic/role_strings.rb +23 -0
- data/lib/roles_generic/roles_mask.rb +48 -0
- data/lib/roles_generic/roles_string.rb +26 -0
- data/lib/roles_generic.rb +2 -0
- data/spec/generator_spec_helper.rb +12 -0
- data/spec/generators/admin_flag_generator_spec.rb +77 -0
- data/spec/generators/many_roles_generator_spec.rb +39 -0
- data/spec/generators/one_role_generator_spec.rb +39 -0
- data/spec/generators/role_string_generator_spec.rb +39 -0
- data/spec/generators/role_strings_generator_spec.rb +39 -0
- data/spec/generators/roles_mask_generator_spec.rb +39 -0
- data/spec/generators/roles_string_generator_spec.rb +39 -0
- data/spec/model/role.rb +26 -0
- data/spec/roles_generic/admin_flag_spec.rb +66 -0
- data/spec/roles_generic/many_roles_spec.rb +63 -0
- data/spec/roles_generic/one_role_spec.rb +70 -0
- data/spec/roles_generic/role_string_spec.rb +65 -0
- data/spec/roles_generic/role_strings_spec.rb +58 -0
- data/spec/roles_generic/roles_mask_spec.rb +57 -0
- data/spec/roles_generic/roles_string_spec.rb +58 -0
- data/spec/spec_helper.rb +9 -0
- metadata +182 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'require_all'
|
2
|
+
require 'active_support/inflector'
|
3
|
+
require_all File.dirname(__FILE__) + '/extensions'
|
4
|
+
|
5
|
+
module RoleModels
|
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
|
48
|
+
module Generic
|
49
|
+
def self.included(base)
|
50
|
+
base.extend RoleModels::Base
|
51
|
+
base.orm_name = :generic
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
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
|
+
|
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
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'roles_generic/role/class_methods'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module RoleModels::Generic
|
5
|
+
module ManyRoles
|
6
|
+
def self.default_role_attribute
|
7
|
+
:many_roles
|
8
|
+
end
|
9
|
+
|
10
|
+
module Implementation
|
11
|
+
# assign roles
|
12
|
+
def roles=(*roles)
|
13
|
+
raise "Role class #{role_class} does not have a #find_role(role) method" if !role_class.respond_to? :find_role
|
14
|
+
|
15
|
+
role_relations = role_class.find_roles(*roles)
|
16
|
+
|
17
|
+
role_relations.each do |role_relation|
|
18
|
+
self.send("#{strategy_class.roles_attribute_name}=", role_relation) if role_relation.kind_of?(role_class)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# query assigned roles
|
23
|
+
def roles
|
24
|
+
self.send(strategy_class.roles_attribute_name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def roles_list
|
28
|
+
[roles].flatten.map{|r| r.name }.compact
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
extend RoleModels::Generic::Base::Configuration
|
33
|
+
configure :type => :role_class
|
34
|
+
|
35
|
+
def self.included(base)
|
36
|
+
base.extend RoleModels::Generic::Base::RoleClass::ClassMethods
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'roles_generic/role/class_methods'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module RoleModels::Generic
|
5
|
+
module OneRole
|
6
|
+
def self.default_role_attribute
|
7
|
+
:one_role
|
8
|
+
end
|
9
|
+
|
10
|
+
module Implementation
|
11
|
+
# assign roles
|
12
|
+
def roles=(*roles)
|
13
|
+
raise "Role class #{role_class} does not have a #find_role(role) method" if !role_class.respond_to? :find_role
|
14
|
+
|
15
|
+
first_role = roles.flatten.first
|
16
|
+
role_relation = role_class.find_role(first_role)
|
17
|
+
if role_relation && role_relation.kind_of?(role_class)
|
18
|
+
self.send("#{strategy_class.roles_attribute_name}=", role_relation)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# query assigned roles
|
23
|
+
def roles
|
24
|
+
role = self.send(strategy_class.roles_attribute_name).name.to_sym
|
25
|
+
[role]
|
26
|
+
end
|
27
|
+
|
28
|
+
def roles_list
|
29
|
+
self.roles.to_a
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
extend RoleModels::Generic::Base::Configuration
|
34
|
+
configure :num => :single, :type => :role_class
|
35
|
+
|
36
|
+
def self.included(base)
|
37
|
+
base.extend RoleModels::Generic::Base::RoleClass::ClassMethods
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module RoleModels::Generic::Base
|
2
|
+
module RoleClass
|
3
|
+
module InstanceMethods
|
4
|
+
def role_class
|
5
|
+
self.class.role_class_name
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def role_class_name
|
11
|
+
@role_class_name
|
12
|
+
end
|
13
|
+
|
14
|
+
def role_class class_constant
|
15
|
+
const = class_constant.to_s.camelize
|
16
|
+
@role_class_name = "#{const}".constantize
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module RoleModels::Generic
|
4
|
+
module RoleString
|
5
|
+
def self.default_role_attribute
|
6
|
+
:role_string
|
7
|
+
end
|
8
|
+
|
9
|
+
module Implementation
|
10
|
+
# assign roles
|
11
|
+
def roles=(*roles)
|
12
|
+
first_role = roles.flatten.first.to_s
|
13
|
+
if valid_role? first_role
|
14
|
+
self.send("#{strategy_class.roles_attribute_name}=", first_role)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# query assigned roles
|
19
|
+
def roles
|
20
|
+
role = self.send(strategy_class.roles_attribute_name)
|
21
|
+
[role.to_sym]
|
22
|
+
end
|
23
|
+
alias_method :roles_list, :roles
|
24
|
+
end
|
25
|
+
|
26
|
+
extend RoleModels::Generic::Base::Configuration
|
27
|
+
configure :num => :single
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RoleModels::Generic
|
2
|
+
module RoleStrings
|
3
|
+
def self.default_role_attribute
|
4
|
+
:role_strings
|
5
|
+
end
|
6
|
+
|
7
|
+
module Implementation
|
8
|
+
# assign roles
|
9
|
+
def roles=(*roles)
|
10
|
+
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?
|
12
|
+
end
|
13
|
+
|
14
|
+
# query assigned roles
|
15
|
+
def roles
|
16
|
+
self.send(strategy_class.roles_attribute_name).map{|r| r.to_sym}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
extend RoleModels::Generic::Base::Configuration
|
21
|
+
configure
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module RoleModels::Generic
|
4
|
+
module RolesMask
|
5
|
+
def self.default_role_attribute
|
6
|
+
:roles_mask
|
7
|
+
end
|
8
|
+
|
9
|
+
module Implementation
|
10
|
+
class Roles < ::Set # :nodoc:
|
11
|
+
attr_reader :model_instance
|
12
|
+
|
13
|
+
def initialize(sender, *roles)
|
14
|
+
super(*roles)
|
15
|
+
@model_instance = sender
|
16
|
+
end
|
17
|
+
|
18
|
+
def <<(role)
|
19
|
+
model_instance.roles = super.to_a
|
20
|
+
self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# assign roles
|
25
|
+
def roles=(*roles)
|
26
|
+
self.send("#{strategy_class.roles_attribute_name}=", (roles.flatten.map { |r| r.to_sym } & strategy_class.valid_roles).map { |r| calc_index(r) }.inject { |sum, bitvalue| sum + bitvalue })
|
27
|
+
end
|
28
|
+
|
29
|
+
# query assigned roles
|
30
|
+
def roles
|
31
|
+
strategy_class::Roles.new(self, strategy_class.valid_roles.reject { |r| ((self.send(strategy_class.roles_attribute_name) || 0) & calc_index(r)).zero? })
|
32
|
+
end
|
33
|
+
|
34
|
+
def roles_list
|
35
|
+
roles.to_a
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def calc_index(r)
|
41
|
+
2**strategy_class.valid_roles.index(r)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
extend RoleModels::Generic::Base::Configuration
|
46
|
+
configure
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_all File.dirname(__FILE__) +'/roles_string'
|
2
|
+
|
3
|
+
module RoleModels::Generic
|
4
|
+
module RolesString
|
5
|
+
def self.default_role_attribute
|
6
|
+
:roles_string
|
7
|
+
end
|
8
|
+
|
9
|
+
module Implementation
|
10
|
+
# assign roles
|
11
|
+
def roles=(*roles)
|
12
|
+
roles_str = roles.flatten.map{|r| r.to_s if valid_role?(r)}.compact.uniq.join(',')
|
13
|
+
self.send("#{strategy_class.roles_attribute_name}=", roles_str) if roles_str && roles_str.not.empty?
|
14
|
+
end
|
15
|
+
|
16
|
+
# query assigned roles
|
17
|
+
def roles
|
18
|
+
self.send(strategy_class.roles_attribute_name).split(',').uniq.map{|r| r.to_sym}
|
19
|
+
end
|
20
|
+
alias_method :roles_list, :roles
|
21
|
+
end
|
22
|
+
|
23
|
+
extend RoleModels::Generic::Base::Configuration
|
24
|
+
configure
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'rspec/autorun'
|
3
|
+
require 'generator_spec'
|
4
|
+
require 'roles_generic'
|
5
|
+
|
6
|
+
RSpec::Generator.configure do |config|
|
7
|
+
config.debug = false
|
8
|
+
config.remove_temp_dir = true
|
9
|
+
config.default_rails_root(__FILE__)
|
10
|
+
config.lib = File.dirname(__FILE__) + '/../lib'
|
11
|
+
config.logger = :stdout
|
12
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'role strategy generator: admin_flag' do
|
5
|
+
let(:strategy) { :admin_flag }
|
6
|
+
|
7
|
+
describe 'ORM: none' do
|
8
|
+
let(:orm) { :none }
|
9
|
+
|
10
|
+
use_orm :none
|
11
|
+
helpers :model
|
12
|
+
|
13
|
+
before :each do
|
14
|
+
setup_generator 'roles_generator' do
|
15
|
+
tests RolesModel::Generators::RolesGenerator
|
16
|
+
end
|
17
|
+
remove_model 'user'
|
18
|
+
end
|
19
|
+
|
20
|
+
after :each do
|
21
|
+
remove_model 'user'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should configure 'admin_flag' strategy" do
|
25
|
+
create_model :user do
|
26
|
+
'# content'
|
27
|
+
end
|
28
|
+
with_generator do |g|
|
29
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm #{orm}"
|
30
|
+
puts "arguments: #{arguments}"
|
31
|
+
g.run_generator arguments.args
|
32
|
+
g.should generate_model :user do |clazz|
|
33
|
+
clazz.should include_module 'RoleModels::Generic'
|
34
|
+
puts "clazz: #{clazz}"
|
35
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
36
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'ORM: active_record' do
|
43
|
+
let(:orm) { :active_record }
|
44
|
+
|
45
|
+
use_orm :active_record
|
46
|
+
helpers :model
|
47
|
+
|
48
|
+
before :each do
|
49
|
+
setup_generator 'roles_generator' do
|
50
|
+
tests RolesModel::Generators::RolesGenerator
|
51
|
+
end
|
52
|
+
remove_model 'user'
|
53
|
+
end
|
54
|
+
|
55
|
+
after :each do
|
56
|
+
# remove_model 'user'
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should configure 'admin_flag' strategy" do
|
60
|
+
create_model :user do
|
61
|
+
'# content'
|
62
|
+
end
|
63
|
+
with_generator do |g|
|
64
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm #{orm}"
|
65
|
+
puts "arguments: #{arguments}"
|
66
|
+
g.run_generator arguments.args
|
67
|
+
g.should generate_model :user do |clazz|
|
68
|
+
clazz.should include_module 'RoleModels::Generic'
|
69
|
+
puts "clazz: #{clazz}"
|
70
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
71
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'many_roles' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'many_roles' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'one_role' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'one_role' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'role_string' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'role_string' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'role_strings' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'role_strings' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'roles_mask' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'roles_mask' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../generator_spec_helper')
|
2
|
+
require_generator :roles_model => :roles
|
3
|
+
|
4
|
+
describe 'helper_generator' do
|
5
|
+
let(:strategy) { 'roles_string' }
|
6
|
+
|
7
|
+
use_orm :active_record
|
8
|
+
helpers :model
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
setup_generator 'roles_generator' do
|
12
|
+
tests RolesModel::Generators::RolesGenerator
|
13
|
+
end
|
14
|
+
remove_model 'user'
|
15
|
+
end
|
16
|
+
|
17
|
+
after :each do
|
18
|
+
remove_model 'user'
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should configure 'roles_string' strategy" do
|
22
|
+
create_model :user do
|
23
|
+
'# content'
|
24
|
+
end
|
25
|
+
with_generator do |g|
|
26
|
+
arguments = "User --strategy #{strategy} --roles admin user --orm active_record"
|
27
|
+
puts "arguments: #{arguments}"
|
28
|
+
g.run_generator arguments.args
|
29
|
+
g.should generate_model :user do |clazz|
|
30
|
+
clazz.should include_module 'RoleModels::Generic'
|
31
|
+
clazz.should have_call :roles, :args => ':admin, :user'
|
32
|
+
clazz.should have_call :role_strategy, :args => ":#{strategy}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
|
data/spec/model/role.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class Role
|
2
|
+
attr_accessor :name
|
3
|
+
|
4
|
+
def self.find_role role_name
|
5
|
+
roles.to_a.select{|r| r.name == role_name}.first
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.find_roles *role_names
|
9
|
+
result = Set.new
|
10
|
+
role_names.flatten.each do |role_name|
|
11
|
+
found_role = find_role(role_name)
|
12
|
+
result << found_role if found_role
|
13
|
+
end
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_accessor :roles
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize name
|
22
|
+
@name = name
|
23
|
+
self.class.roles ||= Set.new
|
24
|
+
self.class.roles << self
|
25
|
+
end
|
26
|
+
end
|