roles_generic 0.2.0 → 0.2.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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -31,36 +31,40 @@ module RolesModel
31
31
 
32
32
  protected
33
33
 
34
- def strategy
35
- options[:strategy]
36
- end
37
-
38
34
  def orm
39
35
  @orm ||= options[:orm].to_s.to_sym
40
36
  end
41
37
 
38
+ def default_roles
39
+ [:admin, :guest]
40
+ end
41
+
42
+ def roles_to_add
43
+ default_roles.concat(options[:roles]).compact.uniq
44
+ end
45
+
42
46
  def roles
43
- @roles ||= options[:roles].map{|r| ":#{r}" }
47
+ @roles ||= roles_to_add.map{|r| ":#{r}" }
44
48
  end
45
49
 
46
50
  def role_strategy_statement
47
- "role_strategy :#{strategy}\n"
51
+ "strategy :#{strategy}\n"
48
52
  end
49
53
 
50
54
  def roles_statement
51
- roles ? "roles #{roles.join(',')}" : ''
55
+ roles ? "valid_roles #{roles.join(',')}" : ''
52
56
  end
53
57
 
54
58
  def insertion_text
55
59
  %Q{
56
- include Roles::Generic
60
+ include Roles::#{orm.to_s.camelize}
57
61
  #{role_strategy_statement}
58
62
  #{roles_statement}
59
63
  }
60
64
  end
61
65
 
62
- def role_strategy
63
- options[:role_strategy]
66
+ def strategy
67
+ options[:strategy]
64
68
  end
65
69
  end
66
70
  end
@@ -2,6 +2,10 @@ module Roles
2
2
  module Base
3
3
  attr_accessor :orm_name
4
4
 
5
+ def valid_roles_are(*role_list)
6
+ strategy_class.valid_roles = role_list.to_symbols
7
+ end
8
+
5
9
  def valid_roles
6
10
  strategy_class.valid_roles
7
11
  end
@@ -25,7 +25,8 @@ module Roles::Generic::User
25
25
  # roles(['role_1', ..., 'role_n'])
26
26
  #
27
27
  # declare valid roles
28
- def roles(*roles)
28
+ def roles(*roles)
29
+ puts "role_class: #{role_class_name}"
29
30
  self.valid_roles = Array[*roles].flatten.map { |r| r.to_sym }
30
31
  end
31
32
  end
@@ -3,10 +3,29 @@ require_all File.dirname(__FILE__) + '/generic'
3
3
  module Roles
4
4
  module Generic
5
5
  def self.included(base)
6
- base.extend Roles::Base
7
- base.orm_name = :generic
6
+ base.extend Roles::Base
7
+ base.extend ClassMethods
8
+ base.orm_name = :generic
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ MAP = {
14
+ :admin_flag => "attr_accessor :admin_flag",
15
+ :many_roles => "attr_accessor :many_roles",
16
+ :one_role => "attr_accessor :one_role",
17
+ :roles_mask => "attr_accessor :roles_mask",
18
+ :role_string => "attr_accessor :role_string",
19
+ :role_strings => "attr_accessor :role_strings",
20
+ :roles_string => "attr_accessor :roles_string"
21
+ }
22
+
23
+ def strategy name, options=nil
24
+ if options == :default && MAP[name]
25
+ instance_eval MAP[name]
26
+ end
27
+ role_strategy name, options
28
+ end
8
29
  end
9
30
  end
10
31
  end
11
-
12
-
@@ -8,6 +8,5 @@ module Roles
8
8
  end
9
9
 
10
10
  module RoleStrategy
11
- module Generic
12
- end
11
+ modules :generic
13
12
  end
@@ -1,8 +1,21 @@
1
+ module Roles::Base
2
+ def valid_roles_are(*role_list)
3
+ strategy_class.valid_roles = role_list.to_symbols
4
+ if role_class_name
5
+ role_list.each do |name|
6
+ role_class_name.new(name)
7
+ end
8
+ end
9
+ end
10
+ end
11
+
1
12
  class Role
2
13
  attr_accessor :name
3
14
 
4
15
  def self.find_role role_name
5
- roles.to_a.select{|r| r.name == role_name}.first
16
+ roles.to_a.select do |r|
17
+ r.name == role_name
18
+ end.first
6
19
  end
7
20
 
8
21
  def self.find_roles *role_names
@@ -1,4 +1,5 @@
1
1
  require 'set'
2
+ require 'roles_generic/role'
2
3
 
3
4
  module RoleStrategy::Generic
4
5
  module ManyRoles
@@ -7,20 +8,23 @@ module RoleStrategy::Generic
7
8
  end
8
9
 
9
10
  module Implementation
11
+ def role_attribute
12
+ strategy_class.roles_attribute_name
13
+ end
14
+
10
15
  # assign roles
11
16
  def roles=(*roles)
12
17
  raise "Role class #{role_class} does not have a #find_role(role) method" if !role_class.respond_to? :find_role
13
18
 
14
19
  role_relations = role_class.find_roles(*roles)
15
-
16
- role_relations.each do |role_relation|
17
- self.send("#{strategy_class.roles_attribute_name}=", role_relation) if role_relation.kind_of?(role_class)
20
+ role_relations.each do |role_relation|
21
+ self.send("#{role_attribute}=", role_relation) if role_relation.kind_of?(role_class)
18
22
  end
19
23
  end
20
24
 
21
25
  # query assigned roles
22
26
  def roles
23
- self.send(strategy_class.roles_attribute_name)
27
+ self.send(role_attribute)
24
28
  end
25
29
 
26
30
  def roles_list
@@ -4,23 +4,27 @@ module RoleStrategy::Generic
4
4
  :admin_flag
5
5
  end
6
6
 
7
- module Implementation
7
+ module Implementation
8
+ def role_attribute
9
+ strategy_class.roles_attribute_name
10
+ end
11
+
8
12
  # assign roles
9
13
  def roles=(*new_roles)
10
14
  first_role = new_roles.flatten.first
11
- self.send("#{strategy_class.roles_attribute_name}=", new_roles.flatten.first.admin?) if valid_role? first_role
15
+ self.send("#{role_attribute}=", new_roles.flatten.first.admin?) if valid_role? first_role
12
16
  end
13
17
 
14
18
  # query assigned roles
15
19
  def roles
16
- role = self.send(strategy_class.roles_attribute_name) ? strategy_class.admin_role_key : strategy_class.default_role_key
20
+ role = self.send(role_attribute) ? strategy_class.admin_role_key : strategy_class.default_role_key
17
21
  [role]
18
22
  end
19
23
  alias_method :roles_list, :roles
20
24
 
21
25
  end # Implementation
22
26
 
23
- extend extend Roles::Generic::User::Configuration
27
+ extend Roles::Generic::User::Configuration
24
28
  configure :num => :single
25
29
  end
26
30
  end
@@ -1,4 +1,5 @@
1
1
  require 'set'
2
+ require 'roles_generic/role'
2
3
 
3
4
  module RoleStrategy::Generic
4
5
  module OneRole
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{roles_generic}
8
- s.version = "0.2.0"
8
+ s.version = "0.2.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = %q{2010-09-04}
12
+ s.date = %q{2010-09-06}
13
13
  s.description = %q{Generic role strategies sharing the same API. Easy to insert in any model}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/roles_generic/generic/user/configuration.rb",
35
35
  "lib/roles_generic/generic/user/implementation.rb",
36
36
  "lib/roles_generic/namespaces.rb",
37
+ "lib/roles_generic/role.rb",
37
38
  "lib/roles_generic/strategy.rb",
38
39
  "lib/roles_generic/strategy/multi/many_roles.rb",
39
40
  "lib/roles_generic/strategy/multi/role_strings.rb",
@@ -51,7 +52,6 @@ Gem::Specification.new do |s|
51
52
  "spec/generators/role_strings_generator_spec.rb",
52
53
  "spec/generators/roles_mask_generator_spec.rb",
53
54
  "spec/generators/roles_string_generator_spec.rb",
54
- "spec/model/role.rb",
55
55
  "spec/roles_generic/admin_flag_spec.rb",
56
56
  "spec/roles_generic/many_roles_spec.rb",
57
57
  "spec/roles_generic/one_role_spec.rb",
@@ -82,7 +82,6 @@ Gem::Specification.new do |s|
82
82
  "spec/generators/role_strings_generator_spec.rb",
83
83
  "spec/generators/roles_mask_generator_spec.rb",
84
84
  "spec/generators/roles_string_generator_spec.rb",
85
- "spec/model/role.rb",
86
85
  "spec/roles_generic/admin_flag_spec.rb",
87
86
  "spec/roles_generic/many_roles_spec.rb",
88
87
  "spec/roles_generic/one_role_spec.rb",
@@ -4,11 +4,11 @@ use_roles_strategy :admin_flag
4
4
  class User
5
5
  include Roles::Generic
6
6
 
7
- attr_accessor :name, :admin_flag
7
+ attr_accessor :name
8
8
 
9
- role_strategy :admin_flag, :default
9
+ strategy :admin_flag, :default
10
10
 
11
- roles :admin, :user
11
+ valid_roles_are :admin, :user
12
12
 
13
13
  def initialize name, *new_roles
14
14
  self.name = name
@@ -1,35 +1,30 @@
1
1
  require 'spec_helper'
2
2
  use_roles_strategy :many_roles
3
3
 
4
- require 'model/role'
5
-
6
4
  class User
7
5
  include Roles::Generic
8
- role_strategy :many_roles, :default
6
+ strategy :many_roles, :default
9
7
 
10
8
  role_class :role
11
9
 
12
- attr_accessor :name, :many_roles
10
+ attr_accessor :name
13
11
 
14
- roles :admin, :user
12
+ valid_roles_are :admin, :user
15
13
 
16
14
  def initialize name, *new_roles
17
15
  self.name = name
18
16
  self.roles = new_roles
19
17
  end
20
- end
18
+ end
21
19
 
22
20
 
23
21
  describe "Generic ManyRoles role strategy" do
24
22
  context "default setup" do
25
23
 
26
- before :each do
27
- Role.new :user
28
- Role.new :admin
29
-
24
+ before :each do
30
25
  @admin_user = User.new 'Admin user', :admin
31
- @user = User.new 'User', :user
32
- end
26
+ @user = User.new 'User', :user
27
+ end
33
28
 
34
29
  it "should have admin user role to :admin" do
35
30
  @admin_user.roles_list.first.should == :admin
@@ -1,17 +1,15 @@
1
1
  require 'spec_helper'
2
2
  use_roles_strategy :one_role
3
3
 
4
- require 'model/role'
5
-
6
4
  class User
7
5
  include Roles::Generic
8
- role_strategy :one_role, :default
6
+ strategy :one_role, :default
9
7
 
10
8
  role_class :role
11
9
 
12
- attr_accessor :name, :one_role
10
+ attr_accessor :name
13
11
 
14
- roles :admin, :user
12
+ valid_roles_are :admin, :user
15
13
 
16
14
  def initialize name, *new_roles
17
15
  self.name = name
@@ -23,10 +21,7 @@ end
23
21
  describe "Generic OneRole role strategy" do
24
22
  context "default setup" do
25
23
 
26
- before :each do
27
- Role.new :user
28
- Role.new :admin
29
-
24
+ before :each do
30
25
  @admin_user = User.new 'Admin user', :admin
31
26
  @user = User.new 'User', :user
32
27
  end
@@ -44,28 +39,28 @@ describe "Generic OneRole role strategy" do
44
39
  @admin_user.has?(:admin).should be_true
45
40
  end
46
41
 
47
- # it "should have user role to :user" do
48
- # @user.roles.should == [:user]
49
- # @user.admin?.should be_false
50
- #
51
- # @user.has_role?(:user).should be_true
52
- # @user.has_role?(:admin).should be_false
53
- # @user.is?(:admin).should be_false
54
- #
55
- # @user.has_roles?(:admin).should be_false
56
- # @user.has?(:admin).should be_false
57
- # end
58
- #
59
- # it "should set user role to :admin using roles=" do
60
- # @user.roles = :admin
61
- # @user.role.should == :admin
62
- # @user.has_role?(:admin).should be_true
63
- # end
64
- #
65
- # it "should set user role to :admin using role=" do
66
- # @user.roles = :admin
67
- # @user.role.should == :admin
68
- # @user.has_role?(:admin).should be_true
69
- # end
42
+ it "should have user role to :user" do
43
+ @user.roles.should == [:user]
44
+ @user.admin?.should be_false
45
+
46
+ @user.has_role?(:user).should be_true
47
+ @user.has_role?(:admin).should be_false
48
+ @user.is?(:admin).should be_false
49
+
50
+ @user.has_roles?(:admin).should be_false
51
+ @user.has?(:admin).should be_false
52
+ end
53
+
54
+ it "should set user role to :admin using roles=" do
55
+ @user.roles = :admin
56
+ @user.role.should == :admin
57
+ @user.has_role?(:admin).should be_true
58
+ end
59
+
60
+ it "should set user role to :admin using role=" do
61
+ @user.roles = :admin
62
+ @user.role.should == :admin
63
+ @user.has_role?(:admin).should be_true
64
+ end
70
65
  end
71
66
  end
@@ -4,9 +4,9 @@ use_roles_strategy :role_string
4
4
  class User
5
5
  include Roles::Generic
6
6
 
7
- attr_accessor :name, :role_string
7
+ attr_accessor :name
8
8
 
9
- role_strategy :role_string, :default
9
+ strategy :role_string, :default
10
10
 
11
11
  roles :admin, :user
12
12
 
@@ -4,11 +4,11 @@ use_roles_strategy :role_strings
4
4
  class User
5
5
  include Roles::Generic
6
6
 
7
- attr_accessor :name, :role_strings
7
+ attr_accessor :name
8
8
 
9
- role_strategy :role_strings, :default
9
+ strategy :role_strings, :default
10
10
 
11
- roles :admin, :user
11
+ valid_roles_are :admin, :user
12
12
 
13
13
  def initialize name, *new_roles
14
14
  self.name = name
@@ -4,11 +4,11 @@ use_roles_strategy :roles_mask
4
4
  class User
5
5
  include Roles::Generic
6
6
 
7
- attr_accessor :name, :roles_mask
7
+ attr_accessor :name
8
8
 
9
- role_strategy :roles_mask, :default
9
+ strategy :roles_mask, :default
10
10
 
11
- roles :admin, :user
11
+ valid_roles_are :admin, :user
12
12
 
13
13
  def initialize name, *new_roles
14
14
  self.name = name
@@ -4,11 +4,11 @@ use_roles_strategy :roles_string
4
4
  class User
5
5
  include Roles::Generic
6
6
 
7
- attr_accessor :name, :roles_string
7
+ attr_accessor :name
8
8
 
9
- role_strategy :roles_string, :default
9
+ strategy :roles_string, :default
10
10
 
11
- roles :admin, :user
11
+ valid_roles_are :admin, :user
12
12
 
13
13
  def initialize name, *new_roles
14
14
  self.name = name
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-04 00:00:00 +02:00
17
+ date: 2010-09-06 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -136,6 +136,7 @@ files:
136
136
  - lib/roles_generic/generic/user/configuration.rb
137
137
  - lib/roles_generic/generic/user/implementation.rb
138
138
  - lib/roles_generic/namespaces.rb
139
+ - lib/roles_generic/role.rb
139
140
  - lib/roles_generic/strategy.rb
140
141
  - lib/roles_generic/strategy/multi/many_roles.rb
141
142
  - lib/roles_generic/strategy/multi/role_strings.rb
@@ -153,7 +154,6 @@ files:
153
154
  - spec/generators/role_strings_generator_spec.rb
154
155
  - spec/generators/roles_mask_generator_spec.rb
155
156
  - spec/generators/roles_string_generator_spec.rb
156
- - spec/model/role.rb
157
157
  - spec/roles_generic/admin_flag_spec.rb
158
158
  - spec/roles_generic/many_roles_spec.rb
159
159
  - spec/roles_generic/one_role_spec.rb
@@ -210,7 +210,6 @@ test_files:
210
210
  - spec/generators/role_strings_generator_spec.rb
211
211
  - spec/generators/roles_mask_generator_spec.rb
212
212
  - spec/generators/roles_string_generator_spec.rb
213
- - spec/model/role.rb
214
213
  - spec/roles_generic/admin_flag_spec.rb
215
214
  - spec/roles_generic/many_roles_spec.rb
216
215
  - spec/roles_generic/one_role_spec.rb