roles_mongoid 0.2.4 → 0.3.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.
Files changed (32) hide show
  1. data/Rakefile +11 -7
  2. data/VERSION +1 -1
  3. data/lib/roles_mongoid/base.rb +6 -4
  4. data/lib/roles_mongoid/role.rb +3 -1
  5. data/lib/roles_mongoid/strategy/multi/many_roles.rb +51 -35
  6. data/lib/roles_mongoid/strategy/multi/role_strings.rb +43 -22
  7. data/lib/roles_mongoid/strategy/multi/roles_mask.rb +67 -18
  8. data/lib/roles_mongoid/strategy/multi.rb +59 -0
  9. data/lib/roles_mongoid/strategy/shared.rb +29 -0
  10. data/lib/roles_mongoid/strategy/single/admin_flag.rb +20 -18
  11. data/lib/roles_mongoid/strategy/single/one_role.rb +55 -24
  12. data/lib/roles_mongoid/strategy/single/role_string.rb +54 -22
  13. data/lib/roles_mongoid/strategy/single.rb +34 -0
  14. data/roles_mongoid.gemspec +44 -34
  15. data/sandbox/single_role.rb +25 -11
  16. data/spec/{generators → roles_mongoid/generators}/roles_generator_spec.rb +0 -0
  17. data/spec/roles_mongoid/strategy/api_examples.rb +200 -0
  18. data/spec/roles_mongoid/strategy/multi/many_roles_spec.rb +40 -0
  19. data/spec/roles_mongoid/strategy/multi/role_strings_spec.rb +19 -0
  20. data/spec/roles_mongoid/strategy/multi/roles_mask_spec.rb +39 -0
  21. data/spec/roles_mongoid/strategy/single/admin_flag_spec.rb +18 -0
  22. data/spec/roles_mongoid/strategy/single/one_role_spec.rb +19 -0
  23. data/spec/roles_mongoid/strategy/single/role_string_spec.rb +19 -0
  24. data/spec/roles_mongoid/strategy/user_setup.rb +13 -0
  25. data/spec/spec_helper.rb +0 -13
  26. metadata +62 -43
  27. data/spec/roles_mongoid/admin_flag_spec.rb +0 -74
  28. data/spec/roles_mongoid/many_roles_spec.rb +0 -74
  29. data/spec/roles_mongoid/one_role_spec.rb +0 -74
  30. data/spec/roles_mongoid/role_string_spec.rb +0 -73
  31. data/spec/roles_mongoid/role_strings_spec.rb +0 -73
  32. data/spec/roles_mongoid/roles_mask_spec.rb +0 -73
@@ -1,3 +1,5 @@
1
+ require 'roles_mongoid/strategy/single'
2
+
1
3
  module RoleStrategy::Mongoid
2
4
  module AdminFlag
3
5
  def self.default_role_attribute
@@ -24,26 +26,26 @@ module RoleStrategy::Mongoid
24
26
  end
25
27
 
26
28
  module Implementation
27
- def role_attribute
28
- strategy_class.roles_attribute_name
29
- end
30
-
31
- # assign roles
32
- def roles=(*new_roles)
33
- first_role = new_roles.flatten.first
34
- if valid_role?(first_role)
35
- self.send("#{role_attribute}=", new_roles.flatten.first.admin?)
36
- else
37
- raise ArgumentError, "The role #{first_role} is not a valid role"
38
- end
39
- end
29
+ include Roles::Mongoid::Strategy::Single
40
30
 
41
- # query assigned roles
42
- def roles
43
- role = self.send(role_attribute) ? strategy_class.admin_role_key : strategy_class.default_role_key
44
- [role]
31
+ def new_role role
32
+ role = role.kind_of?(Array) ? role.flatten.first : role
33
+ role.admin?
45
34
  end
46
- alias_method :roles_list, :roles
35
+
36
+ def get_role
37
+ self.send(role_attribute) ? strategy_class.admin_role_key : strategy_class.default_role_key
38
+ end
39
+
40
+ def present_roles *roles
41
+ roles = roles.flat_uniq
42
+ roles.map{|role| role ? :admin : :guest}
43
+ end
44
+
45
+ def set_empty_role
46
+ self.send("#{role_attribute}=", false)
47
+ end
48
+
47
49
 
48
50
  end # Implementation
49
51
 
@@ -1,3 +1,5 @@
1
+ require 'roles_mongoid/strategy/single'
2
+
1
3
  module RoleStrategy::Mongoid
2
4
  module OneRole
3
5
  def self.default_role_attribute
@@ -13,42 +15,71 @@ module RoleStrategy::Mongoid
13
15
  def role_attribute
14
16
  strategy_class.roles_attribute_name.to_sym
15
17
  end
18
+
19
+ def role_attribute_id
20
+ "#{role_attribute}_id"
21
+ end
16
22
 
17
- def in_role(role_name)
18
- in_roles(role_name)
23
+ def in_role(role_name)
24
+ in_any_role(role_name)
19
25
  end
20
26
 
21
- def in_roles(*role_names)
22
- begin
23
- role_ids = Role.where(:name.in => role_names.to_strings).to_a.map(&:user_id)
24
- where(:_id.in => role_ids)
27
+ def in_any_role(*role_names)
28
+ begin
29
+ the_roles = Role.where(:name.in => role_names.to_strings).to_a
30
+ role_ids = the_roles.map(&:_id).map(&:to_s)
31
+ where(:"#{role_attribute_id}".in => role_ids)
25
32
  rescue
26
33
  return []
27
34
  end
28
35
  end
29
36
  end
30
37
 
31
- module Implementation
32
- # assign roles
33
- def roles=(*_roles)
34
- _roles = get_roles(_roles)
35
- return nil if _roles.none?
36
-
37
- role_relation = role_class.find_role(_roles.first)
38
- self.send("#{role_attribute}=", role_relation)
39
- one_role.save
40
- end
41
- alias_method :role=, :roles=
38
+ module Implementation
39
+ include Roles::Mongoid::Strategy::Single
42
40
 
43
- # query assigned roles
44
- def roles
45
- role = self.send(role_attribute)
46
- role ? [role.name.to_sym] : []
41
+ def new_role role
42
+ role_class.find_role(extract_role role)
43
+ end
44
+
45
+ def new_roles *roles
46
+ new_role roles.flatten.first
47
+ end
48
+
49
+ def present_roles *roles
50
+ roles.map{|role| extract_role role}
51
+ end
52
+
53
+ def set_empty_role
54
+ self.send("#{role_attribute}=", nil)
47
55
  end
56
+
57
+ def select_valid_roles *role_names
58
+ role_names = role_names.flat_uniq.select{|role| valid_role? role }
59
+ has_role_class? ? role_class.find_roles(role_names).to_a : role_names
60
+ end
48
61
 
49
- def roles_list
50
- self.roles.to_a
51
- end
62
+ #
63
+ # # assign roles
64
+ # def roles=(*_roles)
65
+ # _roles = get_roles(_roles)
66
+ # return nil if _roles.none?
67
+ #
68
+ # role_relation = role_class.find_role(_roles.first)
69
+ # self.send("#{role_attribute}=", role_relation)
70
+ # one_role.save
71
+ # end
72
+ # alias_method :role=, :roles=
73
+ #
74
+ # # query assigned roles
75
+ # def roles
76
+ # role = self.send(role_attribute)
77
+ # role ? [role.name.to_sym] : []
78
+ # end
79
+ #
80
+ # def roles_list
81
+ # self.roles.to_a
82
+ # end
52
83
  end
53
84
 
54
85
  extend Roles::Generic::User::Configuration
@@ -1,3 +1,5 @@
1
+ require 'roles_mongoid/strategy/single'
2
+
1
3
  module RoleStrategy::Mongoid
2
4
  module RoleString
3
5
  def self.default_role_attribute
@@ -11,36 +13,66 @@ module RoleStrategy::Mongoid
11
13
  module ClassMethods
12
14
  def role_attribute
13
15
  strategy_class.roles_attribute_name.to_sym
14
- end
15
-
16
- def in_role(role_name)
17
- where(role_attribute => role_name)
16
+ end
17
+
18
+ def in_role(role_name)
19
+ in_any_role(role_name)
18
20
  end
21
+
22
+ def in_any_role(*role_names)
23
+ begin
24
+ where(:"#{role_attribute}".in => role_names)
25
+ rescue
26
+ return []
27
+ end
28
+ end
19
29
  end
20
30
 
21
31
 
22
- module Implementation
23
- def role_attribute
24
- strategy_class.roles_attribute_name
25
- end
26
-
27
- # assign roles
28
- def roles=(*roles)
29
- self.role = roles.select_labels.first.to_s
30
- end
32
+ module Implementation
33
+ include Roles::Mongoid::Strategy::Single
34
+
35
+ def new_role role
36
+ role = role.kind_of?(Array) ? role.first : role
37
+ role.to_s
38
+ end
39
+
40
+ def new_roles *roles
41
+ new_role roles.flatten.first
42
+ end
31
43
 
32
- def role= role_name
33
- if role_name.kind_of_label? && valid_role?(role_name)
34
- self.send("#{role_attribute}=", role_name.to_s)
35
- end
44
+ def present_role role
45
+ return role if role.kind_of? Array
46
+ role.split(',').map(&:to_sym)
36
47
  end
37
48
 
38
- # query assigned roles
39
- def roles
40
- role = self.send(role_attribute)
41
- [role.to_sym]
49
+ def set_empty_role
50
+ self.send("#{role_attribute}=", "")
42
51
  end
43
- alias_method :roles_list, :roles
52
+
53
+ alias_method :present_roles, :present_role
54
+
55
+ # def role_attribute
56
+ # strategy_class.roles_attribute_name
57
+ # end
58
+ #
59
+ # # assign roles
60
+ # def roles=(*roles)
61
+ # self.role = roles.select_labels.first.to_s
62
+ # end
63
+ #
64
+ # def role= role_name
65
+ # if role_name.kind_of_label? && valid_role?(role_name)
66
+ # self.send("#{role_attribute}=", role_name.to_s)
67
+ # end
68
+ # end
69
+ #
70
+ # # query assigned roles
71
+ # def roles
72
+ # role = self.send(role_attribute)
73
+ # [role.to_sym]
74
+ # end
75
+ # alias_method :roles_list, :roles
44
76
  end
45
77
 
46
78
  extend Roles::Generic::User::Configuration
@@ -0,0 +1,34 @@
1
+ require 'roles_mongoid/strategy/shared'
2
+
3
+ class Symbol
4
+ def admin?
5
+ self == :admin
6
+ end
7
+ end
8
+
9
+ module Roles::Mongoid
10
+ module Strategy
11
+ module Single
12
+ include Shared
13
+ # assigns first valid role from list of roles
14
+ def add_roles *role_names
15
+ new_roles = select_valid_roles(role_names)
16
+ new_role = new_roles.first if !new_roles.empty?
17
+ set_role new_role
18
+ end
19
+
20
+ # should remove the current single role (set = nil)
21
+ # only if it is contained in the list of roles to be removed
22
+ def remove_roles *role_names
23
+ roles = role_names.flat_uniq
24
+ set_empty_role if roles_diff(roles).empty?
25
+ true
26
+ end
27
+
28
+ def roles_list
29
+ raise 'the method #roles should be present' if !respond_to? :roles
30
+ present_roles(roles)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{roles_mongoid}
8
- s.version = "0.2.4"
8
+ s.version = "0.3.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-10-06}
12
+ s.date = %q{2010-11-23}
13
13
  s.description = %q{Makes it easy to set a role strategy on your User model in Mongoid}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -32,9 +32,12 @@ Gem::Specification.new do |s|
32
32
  "lib/roles_mongoid/namespaces.rb",
33
33
  "lib/roles_mongoid/role.rb",
34
34
  "lib/roles_mongoid/strategy.rb",
35
+ "lib/roles_mongoid/strategy/multi.rb",
35
36
  "lib/roles_mongoid/strategy/multi/many_roles.rb",
36
37
  "lib/roles_mongoid/strategy/multi/role_strings.rb",
37
38
  "lib/roles_mongoid/strategy/multi/roles_mask.rb",
39
+ "lib/roles_mongoid/strategy/shared.rb",
40
+ "lib/roles_mongoid/strategy/single.rb",
38
41
  "lib/roles_mongoid/strategy/single/admin_flag.rb",
39
42
  "lib/roles_mongoid/strategy/single/one_role.rb",
40
43
  "lib/roles_mongoid/strategy/single/role_string.rb",
@@ -43,13 +46,15 @@ Gem::Specification.new do |s|
43
46
  "sandbox/single_role.rb",
44
47
  "sandbox/test.rb",
45
48
  "spec/generator_spec_helper.rb",
46
- "spec/generators/roles_generator_spec.rb",
47
- "spec/roles_mongoid/admin_flag_spec.rb",
48
- "spec/roles_mongoid/many_roles_spec.rb",
49
- "spec/roles_mongoid/one_role_spec.rb",
50
- "spec/roles_mongoid/role_string_spec.rb",
51
- "spec/roles_mongoid/role_strings_spec.rb",
52
- "spec/roles_mongoid/roles_mask_spec.rb",
49
+ "spec/roles_mongoid/generators/roles_generator_spec.rb",
50
+ "spec/roles_mongoid/strategy/api_examples.rb",
51
+ "spec/roles_mongoid/strategy/multi/many_roles_spec.rb",
52
+ "spec/roles_mongoid/strategy/multi/role_strings_spec.rb",
53
+ "spec/roles_mongoid/strategy/multi/roles_mask_spec.rb",
54
+ "spec/roles_mongoid/strategy/single/admin_flag_spec.rb",
55
+ "spec/roles_mongoid/strategy/single/one_role_spec.rb",
56
+ "spec/roles_mongoid/strategy/single/role_string_spec.rb",
57
+ "spec/roles_mongoid/strategy/user_setup.rb",
53
58
  "spec/spec_helper.rb",
54
59
  "tmp/rails/app/models/user.rb",
55
60
  "tmp/rails/config/routes.rb"
@@ -61,13 +66,15 @@ Gem::Specification.new do |s|
61
66
  s.summary = %q{Implementation of Roles generic API for Mongoid}
62
67
  s.test_files = [
63
68
  "spec/generator_spec_helper.rb",
64
- "spec/generators/roles_generator_spec.rb",
65
- "spec/roles_mongoid/admin_flag_spec.rb",
66
- "spec/roles_mongoid/many_roles_spec.rb",
67
- "spec/roles_mongoid/one_role_spec.rb",
68
- "spec/roles_mongoid/role_string_spec.rb",
69
- "spec/roles_mongoid/role_strings_spec.rb",
70
- "spec/roles_mongoid/roles_mask_spec.rb",
69
+ "spec/roles_mongoid/generators/roles_generator_spec.rb",
70
+ "spec/roles_mongoid/strategy/api_examples.rb",
71
+ "spec/roles_mongoid/strategy/multi/many_roles_spec.rb",
72
+ "spec/roles_mongoid/strategy/multi/role_strings_spec.rb",
73
+ "spec/roles_mongoid/strategy/multi/roles_mask_spec.rb",
74
+ "spec/roles_mongoid/strategy/single/admin_flag_spec.rb",
75
+ "spec/roles_mongoid/strategy/single/one_role_spec.rb",
76
+ "spec/roles_mongoid/strategy/single/role_string_spec.rb",
77
+ "spec/roles_mongoid/strategy/user_setup.rb",
71
78
  "spec/spec_helper.rb"
72
79
  ]
73
80
 
@@ -76,30 +83,33 @@ Gem::Specification.new do |s|
76
83
  s.specification_version = 3
77
84
 
78
85
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
- s.add_development_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
80
- s.add_runtime_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
81
- s.add_runtime_dependency(%q<bson>, ["~> 1.0.7"])
82
- s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
86
+ s.add_development_dependency(%q<rspec>, [">= 2.1"])
87
+ s.add_runtime_dependency(%q<mongoid>, [">= 2.0.0.beta.19"])
88
+ s.add_runtime_dependency(%q<bson>, [">= 1.1.1"])
89
+ s.add_runtime_dependency(%q<sugar-high>, ["~> 0.3.0"])
83
90
  s.add_runtime_dependency(%q<require_all>, ["~> 1.2.0"])
84
- s.add_runtime_dependency(%q<sugar-high>, ["~> 0.2.11"])
85
- s.add_runtime_dependency(%q<roles_generic>, ["~> 0.2.7"])
91
+ s.add_runtime_dependency(%q<roles_generic>, [">= 0.3.0"])
92
+ s.add_runtime_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
93
+ s.add_runtime_dependency(%q<logging_assist>, ["~> 0.1.6"])
86
94
  else
87
- s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
88
- s.add_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
89
- s.add_dependency(%q<bson>, ["~> 1.0.7"])
90
- s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
95
+ s.add_dependency(%q<rspec>, [">= 2.1"])
96
+ s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.19"])
97
+ s.add_dependency(%q<bson>, [">= 1.1.1"])
98
+ s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
91
99
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
92
- s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
93
- s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
100
+ s.add_dependency(%q<roles_generic>, [">= 0.3.0"])
101
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
102
+ s.add_dependency(%q<logging_assist>, ["~> 0.1.6"])
94
103
  end
95
104
  else
96
- s.add_dependency(%q<rspec>, ["~> 2.0.0.beta.22"])
97
- s.add_dependency(%q<mongoid>, ["~> 2.0.0.beta.18"])
98
- s.add_dependency(%q<bson>, ["~> 1.0.7"])
99
- s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
105
+ s.add_dependency(%q<rspec>, [">= 2.1"])
106
+ s.add_dependency(%q<mongoid>, [">= 2.0.0.beta.19"])
107
+ s.add_dependency(%q<bson>, [">= 1.1.1"])
108
+ s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
100
109
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
101
- s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
102
- s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
110
+ s.add_dependency(%q<roles_generic>, [">= 0.3.0"])
111
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
112
+ s.add_dependency(%q<logging_assist>, ["~> 0.1.6"])
103
113
  end
104
114
  end
105
115
 
@@ -12,7 +12,7 @@ end
12
12
  class Role
13
13
  include Mongoid::Document
14
14
  field :name, :type => String
15
- referenced_in :user
15
+ references_many :users #one_role, :class_name => 'Role'
16
16
 
17
17
  class << self
18
18
  def find_roles(*role_names)
@@ -36,27 +36,41 @@ end
36
36
 
37
37
  class User
38
38
  include Mongoid::Document
39
- include Blip
39
+ # include Blip
40
40
  field :name, :type => String
41
- references_one :role
42
- # do_it
41
+ referenced_in :one_role, :class_name => 'Role'
43
42
 
43
+ # do_it
44
44
  end
45
45
 
46
- user = User.create
47
- role = Role.create
48
-
49
- puts "role: #{role.inspect}"
50
- user.role = role
46
+ user = User.create :name => 'Sandy'
47
+ user2 = User.create :name => 'Mike'
48
+ role = Role.create :name => 'Guest'
49
+ role2 = Role.create :name => 'Admin'
51
50
 
52
51
  user.save
52
+ user2.save
53
+
54
+ user.one_role = role2 #<< [role, role2]
55
+ role.users << [user, user2]
56
+ user2.one_role = role
57
+
58
+ # role.users << user
59
+ # role.users << user2
60
+
61
+ role.save
62
+
63
+ puts "user: #{user.inspect}"
64
+ puts "user2 #{user2.inspect}"
65
+ puts "role: #{role.inspect}"
66
+ puts "role users: #{role.users.to_a.inspect}"
67
+
53
68
 
54
69
  # Role.create :name => 'guest'
55
70
  # Role.create :name => 'admin'
56
71
  #
57
72
  # user = User.create :name => 'Kristian'
58
73
  #
59
- # puts user.inspect
60
74
  #
61
75
  # user.role.create :name => :guest
62
76
  # user.save
@@ -64,5 +78,5 @@ user.save
64
78
  # user.role = Role.find_role(:guest).first
65
79
  # user.save
66
80
 
67
- puts user.role.inspect
81
+
68
82