roles_mongo_mapper 0.1.4 → 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.
Files changed (38) hide show
  1. data/README.markdown +11 -2
  2. data/Rakefile +7 -6
  3. data/VERSION +1 -1
  4. data/lib/roles_mongo_mapper/base.rb +21 -4
  5. data/lib/roles_mongo_mapper/embedded_role.rb +35 -0
  6. data/lib/roles_mongo_mapper/role.rb +7 -5
  7. data/lib/roles_mongo_mapper/strategy/multi.rb +59 -0
  8. data/lib/roles_mongo_mapper/strategy/multi/embed_many_roles.rb +71 -0
  9. data/lib/roles_mongo_mapper/strategy/multi/many_roles.rb +69 -23
  10. data/lib/roles_mongo_mapper/strategy/multi/role_strings.rb +44 -24
  11. data/lib/roles_mongo_mapper/strategy/multi/roles_mask.rb +67 -19
  12. data/lib/roles_mongo_mapper/strategy/shared.rb +29 -0
  13. data/lib/roles_mongo_mapper/strategy/single.rb +34 -0
  14. data/lib/roles_mongo_mapper/strategy/single/admin_flag.rb +50 -15
  15. data/lib/roles_mongo_mapper/strategy/single/embed_one_role.rb +79 -0
  16. data/lib/roles_mongo_mapper/strategy/single/one_role.rb +38 -30
  17. data/lib/roles_mongo_mapper/strategy/single/role_string.rb +20 -18
  18. data/roles_mongo_mapper.gemspec +51 -32
  19. data/sandbox/test.rb +13 -3
  20. data/spec/roles_mongo_mapper/strategy/api_examples.rb +199 -0
  21. data/spec/roles_mongo_mapper/strategy/hooks.rb +7 -0
  22. data/spec/roles_mongo_mapper/strategy/multi/embed_many_roles_spec.rb +19 -0
  23. data/spec/roles_mongo_mapper/strategy/multi/many_roles_spec.rb +19 -0
  24. data/spec/roles_mongo_mapper/strategy/multi/role_strings_spec.rb +19 -0
  25. data/spec/roles_mongo_mapper/strategy/multi/roles_mask_spec.rb +18 -0
  26. data/spec/roles_mongo_mapper/strategy/single/admin_flag_spec.rb +18 -0
  27. data/spec/roles_mongo_mapper/strategy/single/embed_one_role_spec.rb +19 -0
  28. data/spec/roles_mongo_mapper/strategy/single/one_role_spec.rb +20 -0
  29. data/spec/roles_mongo_mapper/strategy/single/role_string_spec.rb +19 -0
  30. data/spec/roles_mongo_mapper/strategy/user_setup.rb +13 -0
  31. data/spec/spec_helper.rb +11 -6
  32. metadata +60 -32
  33. data/spec/roles_mongo_mapper/strategy/admin_flag_spec.rb +0 -76
  34. data/spec/roles_mongo_mapper/strategy/many_roles_spec.rb +0 -69
  35. data/spec/roles_mongo_mapper/strategy/one_role_spec.rb +0 -66
  36. data/spec/roles_mongo_mapper/strategy/role_string_spec.rb +0 -68
  37. data/spec/roles_mongo_mapper/strategy/role_strings_spec.rb +0 -69
  38. data/spec/roles_mongo_mapper/strategy/roles_mask_spec.rb +0 -69
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{roles_mongo_mapper}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
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-07}
12
+ s.date = %q{2010-11-24}
13
13
  s.description = %q{Makes it easy to set a role strategy on your User model in MongoMapper}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -27,25 +27,36 @@ Gem::Specification.new do |s|
27
27
  "lib/generators/mongo_mapper/roles/roles_generator.rb",
28
28
  "lib/roles_mongo_mapper.rb",
29
29
  "lib/roles_mongo_mapper/base.rb",
30
+ "lib/roles_mongo_mapper/embedded_role.rb",
30
31
  "lib/roles_mongo_mapper/namespaces.rb",
31
32
  "lib/roles_mongo_mapper/role.rb",
32
33
  "lib/roles_mongo_mapper/strategy.rb",
34
+ "lib/roles_mongo_mapper/strategy/multi.rb",
35
+ "lib/roles_mongo_mapper/strategy/multi/embed_many_roles.rb",
33
36
  "lib/roles_mongo_mapper/strategy/multi/many_roles.rb",
34
37
  "lib/roles_mongo_mapper/strategy/multi/role_strings.rb",
35
38
  "lib/roles_mongo_mapper/strategy/multi/roles_mask.rb",
39
+ "lib/roles_mongo_mapper/strategy/shared.rb",
40
+ "lib/roles_mongo_mapper/strategy/single.rb",
36
41
  "lib/roles_mongo_mapper/strategy/single/admin_flag.rb",
42
+ "lib/roles_mongo_mapper/strategy/single/embed_one_role.rb",
37
43
  "lib/roles_mongo_mapper/strategy/single/one_role.rb",
38
44
  "lib/roles_mongo_mapper/strategy/single/role_string.rb",
39
45
  "roles_mongo_mapper.gemspec",
40
46
  "sandbox/test.rb",
41
47
  "spec/generator_spec_helper.rb",
42
48
  "spec/roles_mongo_mapper/generators/roles_generator_spec.rb",
43
- "spec/roles_mongo_mapper/strategy/admin_flag_spec.rb",
44
- "spec/roles_mongo_mapper/strategy/many_roles_spec.rb",
45
- "spec/roles_mongo_mapper/strategy/one_role_spec.rb",
46
- "spec/roles_mongo_mapper/strategy/role_string_spec.rb",
47
- "spec/roles_mongo_mapper/strategy/role_strings_spec.rb",
48
- "spec/roles_mongo_mapper/strategy/roles_mask_spec.rb",
49
+ "spec/roles_mongo_mapper/strategy/api_examples.rb",
50
+ "spec/roles_mongo_mapper/strategy/hooks.rb",
51
+ "spec/roles_mongo_mapper/strategy/multi/embed_many_roles_spec.rb",
52
+ "spec/roles_mongo_mapper/strategy/multi/many_roles_spec.rb",
53
+ "spec/roles_mongo_mapper/strategy/multi/role_strings_spec.rb",
54
+ "spec/roles_mongo_mapper/strategy/multi/roles_mask_spec.rb",
55
+ "spec/roles_mongo_mapper/strategy/single/admin_flag_spec.rb",
56
+ "spec/roles_mongo_mapper/strategy/single/embed_one_role_spec.rb",
57
+ "spec/roles_mongo_mapper/strategy/single/one_role_spec.rb",
58
+ "spec/roles_mongo_mapper/strategy/single/role_string_spec.rb",
59
+ "spec/roles_mongo_mapper/strategy/user_setup.rb",
49
60
  "spec/spec_helper.rb"
50
61
  ]
51
62
  s.homepage = %q{http://github.com/kristianmandrup/roles_mongo_mapper}
@@ -56,12 +67,17 @@ Gem::Specification.new do |s|
56
67
  s.test_files = [
57
68
  "spec/generator_spec_helper.rb",
58
69
  "spec/roles_mongo_mapper/generators/roles_generator_spec.rb",
59
- "spec/roles_mongo_mapper/strategy/admin_flag_spec.rb",
60
- "spec/roles_mongo_mapper/strategy/many_roles_spec.rb",
61
- "spec/roles_mongo_mapper/strategy/one_role_spec.rb",
62
- "spec/roles_mongo_mapper/strategy/role_string_spec.rb",
63
- "spec/roles_mongo_mapper/strategy/role_strings_spec.rb",
64
- "spec/roles_mongo_mapper/strategy/roles_mask_spec.rb",
70
+ "spec/roles_mongo_mapper/strategy/api_examples.rb",
71
+ "spec/roles_mongo_mapper/strategy/hooks.rb",
72
+ "spec/roles_mongo_mapper/strategy/multi/embed_many_roles_spec.rb",
73
+ "spec/roles_mongo_mapper/strategy/multi/many_roles_spec.rb",
74
+ "spec/roles_mongo_mapper/strategy/multi/role_strings_spec.rb",
75
+ "spec/roles_mongo_mapper/strategy/multi/roles_mask_spec.rb",
76
+ "spec/roles_mongo_mapper/strategy/single/admin_flag_spec.rb",
77
+ "spec/roles_mongo_mapper/strategy/single/embed_one_role_spec.rb",
78
+ "spec/roles_mongo_mapper/strategy/single/one_role_spec.rb",
79
+ "spec/roles_mongo_mapper/strategy/single/role_string_spec.rb",
80
+ "spec/roles_mongo_mapper/strategy/user_setup.rb",
65
81
  "spec/spec_helper.rb"
66
82
  ]
67
83
 
@@ -70,33 +86,36 @@ Gem::Specification.new do |s|
70
86
  s.specification_version = 3
71
87
 
72
88
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
73
- s.add_development_dependency(%q<rspec>, [">= 2.0.0.rc"])
89
+ s.add_development_dependency(%q<rspec>, [">= 2.1"])
74
90
  s.add_development_dependency(%q<generator-spec>, ["~> 0.6.5"])
75
- s.add_runtime_dependency(%q<mongo_mapper>, ["~> 0.8.4"])
76
- s.add_runtime_dependency(%q<activesupport>, ["~> 3.0.0"])
91
+ s.add_runtime_dependency(%q<mongo_mapper>, [">= 0.8.4"])
92
+ s.add_runtime_dependency(%q<activesupport>, ["~> 3.0"])
77
93
  s.add_runtime_dependency(%q<require_all>, ["~> 1.2.0"])
78
- s.add_runtime_dependency(%q<sugar-high>, ["~> 0.2.11"])
79
- s.add_runtime_dependency(%q<roles_generic>, ["~> 0.2.7"])
80
- s.add_runtime_dependency(%q<logging_assist>, ["~> 0.1.3"])
94
+ s.add_runtime_dependency(%q<sugar-high>, ["~> 0.3.0"])
95
+ s.add_runtime_dependency(%q<roles_generic>, ["~> 0.3.3"])
96
+ s.add_runtime_dependency(%q<rails3_artifactor>, ["~> 0.3.0"])
97
+ s.add_runtime_dependency(%q<logging_assist>, [">= 0.1.5"])
81
98
  else
82
- s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
99
+ s.add_dependency(%q<rspec>, [">= 2.1"])
83
100
  s.add_dependency(%q<generator-spec>, ["~> 0.6.5"])
84
- s.add_dependency(%q<mongo_mapper>, ["~> 0.8.4"])
85
- s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
101
+ s.add_dependency(%q<mongo_mapper>, [">= 0.8.4"])
102
+ s.add_dependency(%q<activesupport>, ["~> 3.0"])
86
103
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
87
- s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
88
- s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
89
- s.add_dependency(%q<logging_assist>, ["~> 0.1.3"])
104
+ s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
105
+ s.add_dependency(%q<roles_generic>, ["~> 0.3.3"])
106
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.0"])
107
+ s.add_dependency(%q<logging_assist>, [">= 0.1.5"])
90
108
  end
91
109
  else
92
- s.add_dependency(%q<rspec>, [">= 2.0.0.rc"])
110
+ s.add_dependency(%q<rspec>, [">= 2.1"])
93
111
  s.add_dependency(%q<generator-spec>, ["~> 0.6.5"])
94
- s.add_dependency(%q<mongo_mapper>, ["~> 0.8.4"])
95
- s.add_dependency(%q<activesupport>, ["~> 3.0.0"])
112
+ s.add_dependency(%q<mongo_mapper>, [">= 0.8.4"])
113
+ s.add_dependency(%q<activesupport>, ["~> 3.0"])
96
114
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
97
- s.add_dependency(%q<sugar-high>, ["~> 0.2.11"])
98
- s.add_dependency(%q<roles_generic>, ["~> 0.2.7"])
99
- s.add_dependency(%q<logging_assist>, ["~> 0.1.3"])
115
+ s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
116
+ s.add_dependency(%q<roles_generic>, ["~> 0.3.3"])
117
+ s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.0"])
118
+ s.add_dependency(%q<logging_assist>, [">= 0.1.5"])
100
119
  end
101
120
  end
102
121
 
data/sandbox/test.rb CHANGED
@@ -2,17 +2,27 @@ require 'mongo_mapper'
2
2
 
3
3
  MongoMapper.database = 'roles_for_mm'
4
4
 
5
+ class Role
6
+ include MongoMapper::Document
7
+ key :name, String
8
+ end
9
+
5
10
  class User
6
11
  include MongoMapper::Document
7
12
 
8
13
  key :name, String
14
+ key :one_role, ::Role
9
15
  end
10
16
 
11
- User.create(:name => 'Kristian').save
17
+ role = Role.create(:name => 'admin')
18
+ user = User.create(:name => 'Kristian')
19
+ user.one_role = role
20
+ user.save
12
21
 
13
- puts User.first.id.inspect
22
+ puts User.first.id
23
+ puts Role.first.id
14
24
 
15
- u = User.where(:'_id' => User.first.id).first
25
+ u = User.where("role._id" => Role.first.id).first
16
26
  puts u.inspect
17
27
 
18
28
 
@@ -0,0 +1,199 @@
1
+ describe "Roles for MonoMapper: #{api_name}" do
2
+ require "roles_mongo_mapper/strategy/user_setup.rb"
3
+
4
+ before do
5
+ default_user_setup
6
+ end
7
+
8
+ describe '#in_role' do
9
+ it "should return first user matching role" do
10
+ if User.respond_to? :in_role
11
+ User.in_role(:guest).first.name.should == 'Guest user'
12
+ User.in_role(:admin).first.name.should == 'Admin user'
13
+ end
14
+ end
15
+ end
16
+
17
+ describe '#in_any_role' do
18
+ it "should return first user matching role" do
19
+ if User.respond_to? :in_roles
20
+ User.in_any_role(:guest, :user).first.name.should == 'Guest user'
21
+ User.in_any_role(:admin, :guest).should be_empty
22
+ end
23
+ end
24
+ end
25
+
26
+ it "should be true that a User that includes Roles::Generic has a complete Roles::Generic interface" do
27
+ # mutation API
28
+ [:roles=, :role=, :add_roles, :add_role, :remove_role, :remove_roles, :exchange_roles, :exchange_role].each do |api_method|
29
+ @admin_user.respond_to?(api_method).should be_true
30
+ end
31
+
32
+ # inspection API
33
+ [:valid_role?, :valid_roles?, :has_roles?, :has_role?, :has?, :is?, :roles, :roles_list, :admin?].each do |api_method|
34
+ @admin_user.respond_to?(api_method).should be_true
35
+ end
36
+
37
+ # class method API
38
+ [:valid_role?, :valid_roles?, :valid_roles].each do |class_api_method|
39
+ @admin_user.class.respond_to?(class_api_method).should be_true
40
+ end
41
+ end
42
+
43
+ describe '#valid_role?' do
44
+ it "should be true that the admin user has a valid role of :guest" do
45
+ # @admin_user.valid_role?(:guest).should be_true
46
+ end
47
+
48
+ it "should be true that the User class has a valid role of :guest" do
49
+ # User.valid_role?(:guest).should be_true
50
+ end
51
+ end
52
+
53
+ describe '#valid_roles' do
54
+ it "should be true that the admin user has a valid role of :guest" do
55
+ # @admin_user.valid_roles.should include(:guest, :admin)
56
+ end
57
+
58
+ it "should be true that the User class has a valid role of :guest" do
59
+ User.valid_roles.should include(:guest, :admin)
60
+ end
61
+ end
62
+
63
+ describe '#valid_roles?' do
64
+ it "should be true that the admin user has a valid role of :guest" do
65
+ @admin_user.valid_roles?(:guest, :admin).should be_true
66
+ end
67
+
68
+ it "should be true that the User class has a valid role of :guest" do
69
+ User.valid_roles?(:guest, :admin).should be_true
70
+ end
71
+ end
72
+
73
+ describe '#has_role?' do
74
+ it "should have admin user role to :admin and not to :user" do
75
+ @admin_user.has_role?(:user).should be_false
76
+ @admin_user.has_role?(:admin).should be_true
77
+ end
78
+
79
+ it "should be true that guest user has role :guest and not :admin" do
80
+ @guest_user.has_role?(:guest).should be_true
81
+ @guest_user.has_role?(:admin).should be_false
82
+ end
83
+ end
84
+
85
+ describe '#has?' do
86
+ it "should be true that the admin_user has the :admin role" do
87
+ @admin_user.has?(:admin).should be_true
88
+ end
89
+
90
+ it "should NOT be true that the admin_user has the :admin role" do
91
+ @guest_user.has?(:admin).should be_false
92
+ end
93
+ end
94
+
95
+ describe '#has_roles?' do
96
+ it "should be true that the admin_user has the roles :admin" do
97
+ @admin_user.has_roles?(:admin).should be_true
98
+ end
99
+
100
+ it "should NOT be true that the user has the roles :admin" do
101
+ @guest_user.has_roles?(:admin).should be_false
102
+ end
103
+ end
104
+
105
+ describe '#roles_list' do
106
+ it "should be true that the first role of admin_user is the :admin role" do
107
+ @admin_user.roles_list.should include(:admin)
108
+ end
109
+
110
+ it "should be true that the first role of admin_user is the :user role" do
111
+ case @normal_user.class.role_strategy.multiplicity
112
+ when :single
113
+ @normal_user.roles_list.should include(:guest)
114
+ when :multi
115
+ @normal_user.roles_list.should include(:user, :guest)
116
+ end
117
+ end
118
+ end
119
+
120
+ describe '#roles' do
121
+ it "should be true that the roles of admin_user is an array with the role :admin" do
122
+ roles = @admin_user.roles
123
+ if defined?(Role) && roles.kind_of?(Role)
124
+ roles.name.to_sym.should == :admin
125
+ elsif roles.kind_of? Array
126
+ if @normal_user.class.role_strategy.type == :complex
127
+ roles.first.name.to_sym.should == :admin
128
+ end
129
+ if @normal_user.class.role_strategy.name == :admin_flag
130
+ roles.first.should == true
131
+ end
132
+ else
133
+ roles.to_sym.should == :admin
134
+ end
135
+ end
136
+ end
137
+
138
+ describe '#admin?' do
139
+ it "should be true that admin_user is in the :admin role" do
140
+ @admin_user.admin?.should be_true
141
+ end
142
+
143
+ it "should NOT be true that the user is in the :admin role" do
144
+ @guest_user.admin?.should be_false
145
+ end
146
+ end
147
+
148
+ describe '#is?' do
149
+ it "should be true that admin_user is in the :admin role" do
150
+ @admin_user.is?(:admin).should be_true
151
+ end
152
+
153
+ it "should NOT be true that the user is in the :admin role" do
154
+ @guest_user.is?(:admin).should be_false
155
+ end
156
+ end
157
+
158
+ describe '#roles=' do
159
+ it "should set user role to :admin" do
160
+ @guest_user.roles = :admin
161
+ @guest_user.has_role?(:admin).should be_true
162
+ @guest_user.roles = :guest
163
+ end
164
+ end
165
+
166
+ describe '#exchange_roles' do
167
+ it "should exchange user role :user with role :admin" do
168
+ @guest_user.exchange_role :guest, :with => :admin
169
+ @guest_user.has?(:guest).should be_false
170
+ @guest_user.has?(:admin).should be_true
171
+ end
172
+
173
+ it "should exchange user role :admin with roles :user and :guest" do
174
+ case @admin_user.class.role_strategy.multiplicity
175
+ when :single
176
+ lambda { @admin_user.exchange_role :admin, :with => [:user, :guest] }.should raise_error(ArgumentError)
177
+ when :multi
178
+ @admin_user.exchange_role :admin, :with => [:user, :guest]
179
+ @admin_user.has_role?(:user).should be_true
180
+ @admin_user.has_role?(:guest).should be_true
181
+ @admin_user.has?(:admin).should be_false
182
+ end
183
+ end
184
+ end
185
+
186
+ describe '#remove_roles' do
187
+ it "should remove user role :admin using #remove_roles" do
188
+ @admin_user.remove_roles :admin
189
+ @admin_user.has_role?(:admin).should_not be_true
190
+ end
191
+
192
+ it "should remove user role :admin using #remove_role" do
193
+ @guest_user.add_role :admin
194
+ @guest_user.has_role?(:admin).should be_true
195
+ @guest_user.remove_role :admin
196
+ @guest_user.has_role?(:admin).should_not be_true
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,7 @@
1
+ def after_each
2
+ Database.teardown
3
+ end
4
+
5
+ def before_each
6
+ User.valid_roles_are :admin, :guest
7
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :embed_many_roles
3
+
4
+ class User
5
+ include MongoMapper::Document
6
+ include Roles::MongoMapper
7
+
8
+ strategy :embed_many_roles, :role_class => :role, :config => :default
9
+ role_class :role
10
+ valid_roles_are :admin, :guest, :user
11
+
12
+ key :name, :type => String
13
+ end
14
+
15
+ def api_name
16
+ :embed_many_roles
17
+ end
18
+
19
+ load 'roles_mongo_mapper/strategy/api_examples.rb'
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :many_roles
3
+
4
+ class User
5
+ include MongoMapper::Document
6
+ include Roles::MongoMapper
7
+
8
+ strategy :many_roles, :default
9
+ role_class :role
10
+ valid_roles_are :admin, :guest, :user
11
+
12
+ key :name, :type => String
13
+ end
14
+
15
+ def api_name
16
+ :many_roles
17
+ end
18
+
19
+ load 'roles_mongo_mapper/strategy/api_examples.rb'
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :role_strings
3
+
4
+ class User
5
+ include MongoMapper::Document
6
+ include Roles::MongoMapper
7
+
8
+ strategy :role_strings, :default
9
+ valid_roles_are :admin, :guest, :user
10
+
11
+ key :name, :type => String
12
+ end
13
+
14
+ def api_name
15
+ :role_strings
16
+ end
17
+
18
+ load 'roles_mongo_mapper/strategy/api_examples.rb'
19
+
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+ use_roles_strategy :roles_mask
3
+
4
+ class User
5
+ include MongoMapper::Document
6
+ include Roles::MongoMapper
7
+
8
+ strategy :roles_mask, :default
9
+ valid_roles_are :admin, :guest, :user
10
+
11
+ key :name, :type => String
12
+ end
13
+
14
+ def api_name
15
+ :roles_mask
16
+ end
17
+
18
+ load 'roles_mongo_mapper/strategy/api_examples.rb'