rolify 1.0.0 → 1.1.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/CHANGELOG.rdoc CHANGED
@@ -1,4 +1,18 @@
1
- = 1.0
1
+ = 1.1 (Oct 14, 2011)
2
+ * added a spec to test the rails generator using ammeter gem
3
+ * Gemfile cleanup, moved all dependencies in gemspec instead
4
+ * edited the dependency to Rails 3.1 and newer, now that Rails 3.1 has been released
5
+ * new role scoping capabilities
6
+ * instance level : <tt>user.has_role "moderator", Forum.first</tt> (<em>already supported in previous release</em>). user has the moderator role only on that Forum in particular
7
+ * class level : <tt>user.has_role "moderator", Forum</tt>. User has the moderator role on all instances of Forum
8
+ * global level : <tt>user.has_role "moderator"</tt> (<em>already supported in previous release</em>). User has the moderator role globally (e.q. on all resources)
9
+ * new scoped query capabilities
10
+ * <tt>user.has_role? "moderator", Forum.first</tt> (<em>already supported in previous release</em>). asks if the user has the moderator role on Forum.first instance
11
+ * <tt>user.has_role? "moderator", Forum</tt>. asks if the user has the moderator role on all Forum instances
12
+ * <tt>user.has_role? "moderator"</tt> (<em>already supported in previous release</em>). asks if the user has the global moderator role
13
+ * <tt>user.has_role? "moderator", :any</tt>. asks if the user has at least one moderator role no matter the scope is (instance, class or global).
14
+
15
+ = 1.0 (Aug 25, 2011)
2
16
  * added a new parameter to disable dynamic shortcut methods due to potential incompatibility with other gems using method_missing with the same pattern
3
17
  * add <tt>Rolify.dynamic_shortcuts = false</tt> in the initializer file or
4
18
  * use the generator command with a third parameter:
@@ -7,26 +21,26 @@
7
21
  * code refactoring to do some speed improvements and code clean up
8
22
  * added a lot of specs to improve tests coverage
9
23
  * wrote a tutorial showing how to use rolify with CanCan and Devise
10
- * rolify is now on travis-ci
24
+ * rolify is now on travis-ci to monitor build status
11
25
 
12
- = 0.7
26
+ = 0.7 (June 20, 2011)
13
27
  * added a method_missing to catch newly created role outside the current ruby process (i.e. dynamic shortcut methods are not defined within this process)
14
28
  * dynamic shortcut is created on the fly in the method_missing to avoid extra method_missing for the same dynamic shortcut
15
29
  * check if the role actually exists in the database before defining the new method
16
30
  * first call is slower due to method_missing but next calls are fast
17
31
  * avoid strange bugs when spawning many ruby processes as the dynamic shortcut methods were only defined in the process that used the <tt>has_role</tt> command
18
32
 
19
- = 0.6
33
+ = 0.6 (June 19, 2011)
20
34
  * custom User and Role class names support
21
35
  * can now use other class names for Role and User classes
22
36
  * fixed generators and templates
23
37
  * join table is explicitly set to avoid alphabetical order issue
24
38
  * created a new railtie to load the dynamic shortcuts at startup
25
39
 
26
- = 0.5.1
27
- * fixed a nasty typo on a variable name and added a spec to make this never happen again
40
+ = 0.5.1 (June 07, 2011)
41
+ * fixed a nasty typo on a variable name and added a spec to make it never happen again
28
42
 
29
- = 0.5
43
+ = 0.5 (June 07, 2011)
30
44
  * dynamic shortcuts support
31
45
  * creates automatically new methods upon new role creation (or at startup for a Rails app)
32
46
  * <tt>has_role "admin"</tt> will create a method called <tt>is_admin?</tt>
@@ -34,21 +48,21 @@
34
48
  * <tt>is_moderator_of?(resource)</tt>
35
49
  * <tt>is_moderator?</tt>
36
50
 
37
- = v0.4
51
+ = v0.4 (June 07, 2011)
38
52
  * removing role support
39
53
  * <tt>has_no_role</tt> removes a global role or a role scoped to a resource
40
54
  * Please note that trying to remove a global role whereas the user a role with the same name on a resource will remove that scoped role
41
55
  * Trying to remove a role scoped to a resource whereas the user has a global role won't remove it
42
56
 
43
- = v0.3
57
+ = v0.3 (June 06, 2011)
44
58
  * multiple roles check:
45
59
  * <tt>has_all_roles?</tt> returns true if the user has ALL the roles in arguments
46
60
  * <tt>has_any_role?</tt> returns true if the user has ANY the roles in arguments
47
61
 
48
- = v0.2
62
+ = v0.2 (June 04, 2011)
49
63
  * fixed the generator to include the lib
50
64
  * fixed the migration file with missing polymorphic field
51
65
  * added some examples in documentation
52
66
 
53
- = v0.1
67
+ = v0.1 (June 04, 2011)
54
68
  * first release
data/Gemfile CHANGED
@@ -1,12 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "activerecord", :require => "active_record"
4
-
5
3
  # Specify your gem's dependencies in rolify.gemspec
6
4
  gemspec
7
-
8
- group :test do
9
- gem "sqlite3"
10
- gem "rspec"
11
- gem "rake"
12
- end
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = rolify http://travis-ci.org/EppO/rolify.png
1
+ = rolify {<img src="https://secure.travis-ci.org/EppO/rolify.png">}[http://travis-ci.org/EppO/rolify]
2
2
  Very simple Roles library without any authorization enforcement supporting scope on resource object.
3
3
 
4
4
  Let's see an example:
@@ -10,7 +10,7 @@ This library was intended to be used with CanCan[https://github.com/ryanb/cancan
10
10
 
11
11
  == Requirements
12
12
 
13
- * >= Rails 3.1 (rc4 is currently out)
13
+ * >= Rails 3.1
14
14
  * ActiveRecord ORM
15
15
 
16
16
  == Installation
@@ -47,11 +47,16 @@ To define a global role:
47
47
  user = User.find(1)
48
48
  user.has_role "admin"
49
49
 
50
- To define a role scoped to a resource
50
+ To define a role scoped to a resource instance
51
51
 
52
52
  user = User.find(2)
53
53
  user.has_role "moderator", Forum.first
54
54
 
55
+ To define a role scoped to a resource class
56
+
57
+ user = User.find(3)
58
+ user.has_role "moderator", Forum
59
+
55
60
  That's it !
56
61
 
57
62
  === 4. Check roles
@@ -63,18 +68,29 @@ To check if a user has a global role:
63
68
  user.has_role? "admin"
64
69
  => true
65
70
 
66
- To check if a user has a role scoped to a resource:
71
+ To check if a user has a role scoped to a resource instance:
67
72
 
68
73
  user = User.find(2)
69
- user.has_role "moderator", Forum.first # sets a role scoped to a resource
74
+ user.has_role "moderator", Forum.first # sets a role scoped to a resource instance
70
75
  user.has_role? "moderator", Forum.first
71
76
  => true
72
77
  user.has_role? "moderator", Forum.last
73
78
  => false
74
79
 
75
- A global role overrides resource role request:
80
+ To check if a user has a role scoped to a resource class:
76
81
 
77
82
  user = User.find(3)
83
+ user.has_role "moderator", Forum # sets a role scoped to a resource class
84
+ user.has_role? "moderator", Forum
85
+ => true
86
+ user.has_role? "moderator", Forum.first
87
+ => true
88
+ user.has_role? "moderator", Forum.last
89
+ => true
90
+
91
+ A global role overrides resource role request:
92
+
93
+ user = User.find(4)
78
94
  user.has_role "moderator" # sets a global role
79
95
  user.has_role? "moderator", Forum.first
80
96
  => true
@@ -85,9 +101,4 @@ Please see on {the wiki}[https://github.com/EppO/rolify/wiki/Usage] for all the
85
101
 
86
102
  == Questions or Problems?
87
103
 
88
- If you have any issue or feature request with/for rolify, please add an {issue on GitHub}[https://github.com/EppO/rolify/issues] or fork the project and send a pull request.
89
-
90
- == TODO
91
-
92
- * complete tests coverage
93
- * performance enhancements
104
+ If you have any issue or feature request with/for rolify, please add an {issue on GitHub}[https://github.com/EppO/rolify/issues] or fork the project and send a pull request.
data/lib/rolify/role.rb CHANGED
@@ -28,9 +28,9 @@ module Rolify
28
28
  module Roles
29
29
 
30
30
  def has_role(role_name, resource = nil)
31
- role = Rolify.role_cname.find_or_create_by_name_and_resource_type_and_resource_id( :name => role_name,
32
- :resource_type => (resource.class.name if resource),
33
- :resource_id => (resource.id if resource))
31
+ role = Rolify.role_cname.find_or_create_by_name_and_resource_type_and_resource_id(:name => role_name,
32
+ :resource_type => (resource.is_a?(Class) ? resource.to_s : resource.class.name if resource),
33
+ :resource_id => (resource.id if resource && !resource.is_a?(Class)))
34
34
  if !roles.include?(role)
35
35
  self.class.define_dynamic_method(role_name, resource) if Rolify.dynamic_shortcuts
36
36
  self.roles << role
@@ -62,8 +62,8 @@ module Rolify
62
62
 
63
63
  def has_no_role(role_name, resource = nil)
64
64
  role = self.roles.where( :name => role_name)
65
- role = role.where( :resource_type => resource.class.name,
66
- :resource_id => resource.id) if resource
65
+ role = role.where(:resource_type => (resource.is_a?(Class) ? resource.to_s : resource.class.name)) if resource
66
+ role = role.where(:resource_id => resource.id) if resource && !resource.is_a?(Class)
67
67
  self.roles.delete(role) if role
68
68
  end
69
69
 
@@ -102,12 +102,18 @@ module Rolify
102
102
  end
103
103
 
104
104
  def build_query(role, resource = nil)
105
+ return [ "name = ?", role] if resource == :any
105
106
  query = "((name = ?) AND (resource_type IS NULL) AND (resource_id IS NULL))"
106
107
  values = [ role ]
107
108
  if resource
108
109
  query.insert(0, "(")
109
- query += " OR ((name = ?) AND (resource_type = ?) AND (resource_id = ?)))"
110
- values << role << resource.class.name << resource.id
110
+ query += " OR ((name = ?) AND (resource_type = ?) AND (resource_id IS NULL))"
111
+ values << role << (resource.is_a?(Class) ? resource.to_s : resource.class.name)
112
+ if !resource.is_a? Class
113
+ query += " OR ((name = ?) AND (resource_type = ?) AND (resource_id = ?))"
114
+ values << role << resource.class.name << resource.id
115
+ end
116
+ query += ")"
111
117
  end
112
118
  [ [ query ], values]
113
119
  end
@@ -135,4 +141,4 @@ module Rolify
135
141
  end
136
142
  end
137
143
  end
138
- end
144
+ end
@@ -1,3 +1,3 @@
1
1
  module Rolify
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
data/rolify.gemspec CHANGED
@@ -19,6 +19,11 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
+ s.add_dependency "activerecord", ">= 3.1.0"
23
+
22
24
  s.add_development_dependency "sqlite3"
23
- s.add_dependency "activerecord", "~> 3.1.0.rc1"
25
+ s.add_development_dependency "ammeter"
26
+ s.add_development_dependency "rake"
27
+ s.add_development_dependency "rspec"
28
+ s.add_development_dependency "bundler"
24
29
  end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ # Generators are not automatically loaded by Rails
4
+ require 'generators/rolify/role/role_generator'
5
+
6
+ describe Rolify::Generators::RoleGenerator do
7
+ # Tell the generator where to put its output (what it thinks of as Rails.root)
8
+ destination File.expand_path("../../../../../tmp", __FILE__)
9
+ before {
10
+ prepare_destination
11
+ }
12
+
13
+ describe 'no arguments' do
14
+ before(:all) { arguments [] }
15
+
16
+ before {
17
+ capture(:stdout) {
18
+ generator.create_file "app/models/user.rb" do
19
+ "class User < ActiveRecord::Base\nend"
20
+ end
21
+ }
22
+ run_generator
23
+ }
24
+
25
+ describe 'config/initializers/rolify.rb' do
26
+ subject { file('config/initializers/rolify.rb') }
27
+ it { should exist }
28
+ it { should contain "Rolify.user_cname = User" }
29
+ it { should contain "Rolify.role_cname = Role" }
30
+ it { should contain "Rolify.dynamic_shortcuts = true" }
31
+ end
32
+
33
+ describe 'app/models/user.rb' do
34
+ subject { file('app/models/user.rb') }
35
+ it { should contain "include Rolify::Roles" }
36
+ it { should contain "extend Rolify::Reloaded" }
37
+ it { should contain "has_and_belongs_to_many :roles, :join_table => :users_roles" }
38
+ end
39
+
40
+ describe 'migration file' do
41
+ subject { file('db/migrate/rolify_create_roles.rb') }
42
+
43
+ # should be_a_migration - verifies the file exists with a migration timestamp as part of the filename
44
+ it { should be_a_migration }
45
+ end
46
+ end
47
+
48
+ describe 'specifying user and role names' do
49
+ before(:all) { arguments %w(Rank Client) }
50
+
51
+ before {
52
+ capture(:stdout) {
53
+ generator.create_file "app/models/client.rb" do
54
+ "class Client < ActiveRecord::Base\nend"
55
+ end
56
+ }
57
+ run_generator
58
+ }
59
+
60
+ describe 'config/initializers/rolify.rb' do
61
+ subject { file('config/initializers/rolify.rb') }
62
+ it { should exist }
63
+ it { should contain "Rolify.user_cname = Client" }
64
+ it { should contain "Rolify.role_cname = Rank" }
65
+ it { should contain "Rolify.dynamic_shortcuts = true" }
66
+ end
67
+
68
+ describe 'app/models/client.rb' do
69
+ subject { file('app/models/client.rb') }
70
+ it { should contain "include Rolify::Roles" }
71
+ it { should contain "extend Rolify::Reloaded" }
72
+ it { should contain "has_and_belongs_to_many :roles, :class_name => \"Rank\", :join_table => :clients_ranks" }
73
+ end
74
+
75
+ describe 'migration file' do
76
+ subject { file('db/migrate/rolify_create_ranks.rb') }
77
+
78
+ # should be_a_migration - verifies the file exists with a migration timestamp as part of the filename
79
+ it { should be_a_migration }
80
+ #it { should contain "create_table(:ranks)" }
81
+ end
82
+ end
83
+
84
+ describe 'specifying no dynamic shortcuts' do
85
+ before(:all) { arguments [ "Role", "User", "--no-dynamic_shortcuts" ] }
86
+
87
+ before {
88
+ capture(:stdout) {
89
+ generator.create_file "app/models/user.rb" do
90
+ "class User < ActiveRecord::Base\nend"
91
+ end
92
+ }
93
+ run_generator
94
+ }
95
+
96
+ describe 'config/initializers/rolify.rb' do
97
+ subject { file('config/initializers/rolify.rb') }
98
+ it { should exist }
99
+ it { should contain "Rolify.dynamic_shortcuts = false" }
100
+ end
101
+
102
+ describe 'app/models/user.rb' do
103
+ subject { file('app/models/user.rb') }
104
+ it { should contain "include Rolify::Roles" }
105
+ it { should_not contain "extend Rolify::Reloaded" }
106
+ it { should contain "has_and_belongs_to_many :roles, :join_table => :users_roles" }
107
+ end
108
+
109
+ describe 'migration file' do
110
+ subject { file('db/migrate/rolify_create_roles.rb') }
111
+
112
+ # should be_a_migration - verifies the file exists with a migration timestamp as part of the filename
113
+ it { should be_a_migration }
114
+ end
115
+ end
116
+ end
@@ -1,262 +1,419 @@
1
1
  require "spec_helper"
2
2
 
3
3
  shared_examples_for "Rolify module" do |dynamic|
4
- context "in a Instance level" do
5
- before(:all) do
6
- Rolify.user_cname = user_cname
7
- Rolify.role_cname = role_cname
8
- Rolify.dynamic_shortcuts = dynamic_shortcuts
9
- Rolify.role_cname.destroy_all
10
- @admin = Rolify.user_cname.first
11
- @admin.has_role "admin"
12
- @admin.has_role "moderator", Forum.first
13
- end
14
-
15
- it "should respond to has_role method" do
16
- @admin.should respond_to(:has_role).with(1).arguments
17
- @admin.should respond_to(:has_role).with(2).arguments
18
- end
19
-
20
- it "should respond to has_role? method" do
21
- @admin.should respond_to(:has_role?).with(1).arguments
22
- @admin.should respond_to(:has_role?).with(2).arguments
23
- end
24
-
25
- it "should respond to has_all_roles? method" do
26
- @admin.should respond_to(:has_all_roles?)
27
- @admin.should respond_to(:has_all_roles?)
28
- end
29
-
30
- it "should respond to has_any_role? method" do
31
- @admin.should respond_to(:has_any_role?)
32
- @admin.should respond_to(:has_any_role?)
33
- end
34
-
35
- it "should respond to has_no_role method" do
36
- @admin.should respond_to(:has_no_role).with(1).arguments
37
- @admin.should respond_to(:has_no_role).with(2).arguments
38
- end
39
-
40
- it "should respond to dynamic methods", :if => dynamic do
41
- @admin.should respond_to(:is_admin?).with(0).arguments
42
- @admin.should respond_to(:is_moderator_of?).with(1).arguments
43
- end
44
-
45
- it "should not respond to any unknown methods", :if => dynamic do
46
- @admin.should_not respond_to(:is_god?)
47
- end
48
-
49
- it "should create a new dynamic method if role exists in database", :if => dynamic do
50
- Rolify.role_cname.create(:name => "superman")
51
- @admin.should respond_to(:is_superman?).with(0).arguments
52
- @admin.is_superman?.should be(false)
53
- Rolify.role_cname.create(:name => "batman", :resource => Forum.first)
54
- @admin.should respond_to(:is_batman_of?).with(1).arguments
55
- @admin.should respond_to(:is_batman?).with(0).arguments
56
- @admin.is_batman_of?(Forum.first).should be(false)
57
- end
58
-
59
- it "should not have any dynamic methods if dynamic_shortcuts is disabled", :if => dynamic == false do
60
- @admin.should_not respond_to(:is_admin?)
61
- @admin.should_not respond_to(:is_moderator_of?)
62
- end
63
- end
64
-
65
- context "with a global role" do
66
- before(:all) do
67
- @admin = Rolify.user_cname.first
68
- @admin.has_role "admin"
69
- @admin.has_role "staff"
70
- @admin.has_role "moderator", Forum.first
71
- end
72
-
73
- it "should set a global role" do
74
- expect { @admin.has_role "superadmin" }.to change{ Rolify.role_cname.count }.by(1)
75
- superadmin = Rolify.role_cname.last
76
- superadmin.name.should eq("superadmin")
77
- superadmin.resource.should be(nil)
78
- end
79
-
80
- it "should not create another role if already existing" do
81
- expect { @admin.has_role "admin" }.not_to change{ Rolify.role_cname.count }
82
- expect { @admin.has_role "admin" }.not_to change{ @admin.roles.size }
83
- end
84
-
85
- it "should get a global role" do
86
- @admin.has_role?("admin").should be(true)
87
- end
4
+ before(:all) do
5
+ Rolify.user_cname = user_cname
6
+ Rolify.role_cname = role_cname
7
+ Rolify.dynamic_shortcuts = dynamic_shortcuts
8
+ Rolify.role_cname.destroy_all
9
+ end
10
+
11
+ context "in a Instance level" do
12
+ before(:all) do
13
+ @admin = Rolify.user_cname.first
14
+ @admin.has_role "admin"
15
+ @admin.has_role "moderator", Forum.first
16
+ end
88
17
 
89
- it "should be able to use dynamic shortcut", :if => dynamic do
90
- @admin.is_admin?.should be(true)
91
- end
92
-
93
- it "should get any resource request" do
94
- @admin.has_role?("admin", Forum.first).should be(true)
95
- end
96
-
97
- it "should not get another global role" do
98
- Rolify.role_cname.create(:name => "global")
99
- @admin.has_role?("global").should be(false)
100
- end
101
-
102
- it "should not get a scoped role" do
103
- @admin.has_role?("moderator", Forum.last).should be(false)
104
- end
105
-
106
- it "should not get inexisting role" do
107
- @admin.has_role?("dummy").should be(false)
108
- @admin.has_role?("dumber", Forum.first).should be(false)
109
- end
110
-
111
- it "should check if user has all of a global roles set" do
112
- @admin.has_all_roles?("staff").should be(true)
113
- @admin.has_all_roles?("admin", "staff").should be(true)
114
- @admin.has_all_roles?("admin", "dummy").should be(false)
115
- @admin.has_all_roles?("dummy", "dumber").should be(false)
116
- end
117
-
118
- it "should check if user has any of a global roles set" do
119
- @admin.has_any_role?("staff").should be(true)
120
- @admin.has_any_role?("admin", "staff").should be(true)
121
- @admin.has_any_role?("admin", "moderator").should be(true)
122
- @admin.has_any_role?("dummy", "dumber").should be(false)
123
- end
124
-
125
- it "should remove a global role of a user" do
126
- expect { @admin.has_no_role("admin") }.to change{ @admin.roles.size }.by(-1)
127
- @admin.has_role?("admin").should be(false)
128
- @admin.has_role?("staff").should be(true)
129
- @admin.has_role?("moderator", Forum.first).should be(true)
130
- end
131
-
132
- it "should remove a scoped role of a user" do
133
- expect { @admin.has_no_role("moderator") }.to change{ @admin.roles.size }.by(-1)
134
- @admin.has_role?("staff").should be(true)
135
- @admin.has_role?("moderator", Forum.first).should be(false)
136
- end
137
-
138
- it "should not remove a another global role" do
139
- expect { @admin.has_no_role("global") }.not_to change{ @admin.roles.size }
140
- end
18
+ it "should respond to has_role method" do
19
+ @admin.should respond_to(:has_role).with(1).arguments
20
+ @admin.should respond_to(:has_role).with(2).arguments
141
21
  end
142
-
143
- context "with a scoped role" do
144
- before(:all) do
145
- @moderator = Rolify.user_cname.find(2)
146
- @moderator.has_role "moderator", Forum.first
147
- @moderator.has_role "soldier"
148
- end
149
-
150
- it "should set a scoped role" do
151
- expect { @moderator.has_role "visitor", Forum.last }.to change{ Rolify.role_cname.count }.by(1)
152
- supermodo = Rolify.role_cname.last
153
- supermodo.name.should eq("visitor")
154
- supermodo.resource.should eq(Forum.last)
155
- end
156
-
157
- it "should not create another role if already existing" do
158
- expect { @moderator.has_role "moderator", Forum.first }.not_to change{ Rolify.role_cname.count }
159
- expect { @moderator.has_role "moderator" , Forum.first }.not_to change{ @moderator.roles.size }
160
- end
161
-
162
- it "should get a scoped role" do
163
- @moderator.has_role?("moderator", Forum.first).should be(true)
164
- end
165
-
166
- it "should be able to use dynamic shortcut", :if => dynamic do
167
- @moderator.is_moderator?.should be(false)
168
- @moderator.is_moderator_of?(Forum.first).should be(true)
169
- @moderator.is_moderator_of?(Forum.last).should be(false)
170
- end
171
-
172
- it "should not get a global role" do
173
- @moderator.has_role?("admin").should be(false)
174
- end
175
-
176
- it "should not get the same role on another resource" do
177
- Rolify.role_cname.create(:name => "moderator", :resource => Forum.last)
178
- @moderator.has_role?("moderator", Forum.last).should be(false)
179
- end
180
-
181
- it "should not get the another role on the same resource" do
182
- Rolify.role_cname.create(:name => "tourist", :resource => Forum.first)
183
- @moderator.has_role?("tourist", Forum.first).should be(false)
184
- end
185
-
186
- it "should not get inexisting role" do
187
- @moderator.has_role?("dummy", Forum.last).should be(false)
188
- @moderator.has_role?("dumber").should be(false)
189
- end
190
-
191
- it "should check if user has all of a scoped roles set" do
192
- @moderator.has_all_roles?({ :name => "visitor", :resource => Forum.last }).should be(true)
193
- @moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first },
194
- { :name => "visitor", :resource => Forum.last }).should be(true)
195
- @moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first },
196
- { :name => "dummy", :resource => Forum.last }).should be(false)
197
- @moderator.has_all_roles?({ :name => "dummy", :resource => Forum.first },
198
- { :name => "dumber", :resource => Forum.last }).should be(false)
199
- end
200
-
201
- it "should check if user has any of a scoped roles set" do
202
- @moderator.has_any_role?( { :name => "visitor", :resource => Forum.last }).should be(true)
203
- @moderator.has_any_role?( { :name => "moderator", :resource => Forum.first },
204
- { :name => "visitor", :resource => Forum.last }).should be(true)
205
- @moderator.has_any_role?( { :name => "moderator", :resource => Forum.first },
206
- { :name => "dummy", :resource => Forum.last }).should be(true)
207
- @moderator.has_any_role?( { :name => "dummy", :resource => Forum.first },
208
- { :name => "dumber", :resource => Forum.last }).should be(false)
209
- end
210
-
211
- it "should not remove a global role of a user" do
212
- expect { @moderator.has_no_role("soldier", Forum.first) }.not_to change{ @moderator.roles.size }
213
- end
214
-
215
- it "should remove a scoped role of a user" do
216
- expect { @moderator.has_no_role("moderator", Forum.first) }.to change{ @moderator.roles.size }.by(-1)
217
- @moderator.has_role?("moderator", Forum.first).should be(false)
218
- @moderator.has_role?("soldier").should be(true)
219
- end
220
-
221
- it "should not remove another scoped role" do
222
- expect { @moderator.has_no_role("visitor", Forum.first) }.not_to change{ @moderator.roles.size }
223
- end
22
+
23
+ it "should respond to has_role? method" do
24
+ @admin.should respond_to(:has_role?).with(1).arguments
25
+ @admin.should respond_to(:has_role?).with(2).arguments
26
+ end
27
+
28
+ it "should respond to has_all_roles? method" do
29
+ @admin.should respond_to(:has_all_roles?)
30
+ @admin.should respond_to(:has_all_roles?)
31
+ end
32
+
33
+ it "should respond to has_any_role? method" do
34
+ @admin.should respond_to(:has_any_role?)
35
+ @admin.should respond_to(:has_any_role?)
36
+ end
37
+
38
+ it "should respond to has_no_role method" do
39
+ @admin.should respond_to(:has_no_role).with(1).arguments
40
+ @admin.should respond_to(:has_no_role).with(2).arguments
41
+ end
42
+
43
+ it "should respond to dynamic methods", :if => dynamic do
44
+ @admin.should respond_to(:is_admin?).with(0).arguments
45
+ @admin.should respond_to(:is_moderator_of?).with(1).arguments
46
+ end
47
+
48
+ it "should not respond to any unknown methods", :if => dynamic do
49
+ @admin.should_not respond_to(:is_god?)
50
+ end
51
+
52
+ it "should create a new dynamic method if role exists in database", :if => dynamic do
53
+ Rolify.role_cname.create(:name => "superman")
54
+ @admin.should respond_to(:is_superman?).with(0).arguments
55
+ Rolify.role_cname.create(:name => "batman", :resource => Forum.first)
56
+ @admin.should respond_to(:is_batman_of?).with(1).arguments
57
+ @admin.should respond_to(:is_batman?).with(0).arguments
58
+ end
59
+
60
+ it "should not have any dynamic methods if dynamic_shortcuts is disabled", :if => dynamic == false do
61
+ @admin.should_not respond_to(:is_admin?)
62
+ @admin.should_not respond_to(:is_moderator_of?)
63
+ end
64
+ end
65
+
66
+ context "with a global role" do
67
+ before do
68
+ @admin = Rolify.user_cname.first
69
+ @admin.has_role "admin"
70
+ @admin.has_role "staff"
71
+ @admin.has_role "moderator", Forum.first
72
+ @admin.has_role "moderator", Forum.find(2)
73
+ @admin.has_role "manager", Group
74
+ end
75
+
76
+ it "should set a global role" do
77
+ expect { @admin.has_role "superadmin" }.to change{ Rolify.role_cname.count }.by(1)
78
+ superadmin = Rolify.role_cname.last
79
+ superadmin.name.should eq("superadmin")
80
+ superadmin.resource.should be(nil)
81
+ end
82
+
83
+ it "should not create another role if already existing" do
84
+ expect { @admin.has_role "admin" }.not_to change{ Rolify.role_cname.count }
85
+ expect { @admin.has_role "admin" }.not_to change{ @admin.roles.size }
86
+ end
87
+
88
+ it "should get a global role" do
89
+ @admin.has_role?("admin").should be(true)
90
+ end
91
+
92
+ it "should be able to use dynamic shortcut", :if => dynamic do
93
+ @admin.is_admin?.should be(true)
94
+ @admin.is_evil?.should be(false)
95
+ end
96
+
97
+ it "should get any resource request" do
98
+ @admin.has_role?("admin", Forum.first).should be(true)
99
+ @admin.has_role?("admin", Forum).should be(true)
100
+ @admin.has_role?("admin", :any).should be(true)
101
+ end
102
+
103
+ it "should not get another global role" do
104
+ Rolify.role_cname.create(:name => "global")
105
+ @admin.has_role?("global").should be(false)
106
+ @admin.has_role?("global", :any).should be(false)
107
+ end
108
+
109
+ it "should not get an instance scoped role" do
110
+ @admin.has_role?("moderator", Forum.last).should be(false)
111
+ end
112
+
113
+ it "should not get a class scoped role" do
114
+ @admin.has_role?("manager", Forum).should be(false)
115
+ end
116
+
117
+ it "should not get inexisting role" do
118
+ @admin.has_role?("dummy").should be(false)
119
+ @admin.has_role?("dumber", Forum.first).should be(false)
120
+ end
121
+
122
+ it "should check if user has all of a global roles set" do
123
+ @admin.has_all_roles?("staff").should be(true)
124
+ @admin.has_all_roles?("admin", "staff").should be(true)
125
+ @admin.has_all_roles?("admin", "dummy").should be(false)
126
+ @admin.has_all_roles?("dummy", "dumber").should be(false)
127
+ end
128
+
129
+ it "should check if user has any of a global roles set" do
130
+ @admin.has_any_role?("staff").should be(true)
131
+ @admin.has_any_role?("admin", "staff").should be(true)
132
+ @admin.has_any_role?("admin", "moderator").should be(true)
133
+ @admin.has_any_role?("dummy", "dumber").should be(false)
134
+ end
135
+
136
+ it "should remove a global role of a user" do
137
+ expect { @admin.has_no_role("admin") }.to change{ @admin.roles.size }.by(-1)
138
+ @admin.has_role?("admin").should be(false)
139
+ @admin.has_role?("staff").should be(true)
140
+ @admin.has_role?("moderator", Forum.first).should be(true)
141
+ @admin.has_role?("manager", Group).should be(true)
142
+ end
143
+
144
+ it "should remove a class scoped role of a user" do
145
+ expect { @admin.has_no_role("manager") }.to change{ @admin.roles.size }.by(-1)
146
+ @admin.has_role?("staff").should be(true)
147
+ @admin.has_role?("moderator", Forum.first).should be(true)
148
+ @admin.has_role?("manager", Group).should be(false)
224
149
  end
225
-
226
- context "with different roles" do
227
- before(:all) do
228
- @user = Rolify.user_cname.last
229
- @user.has_role "admin"
230
- @user.has_role "moderator", Forum.first
231
- @user.has_role "visitor", Forum.last
232
- @user.has_role "anonymous"
233
- end
234
-
235
- it "should get a global role" do
236
- @user.has_role?("admin").should be(true)
237
- @user.has_role?("anonymous").should be(true)
238
- end
239
150
 
240
- it "should get a scoped role" do
241
- @user.has_role?("moderator", Forum.first).should be(true)
242
- @user.has_role?("visitor", Forum.last).should be(true)
243
- end
151
+ it "should remove two instance scoped roles of a user" do
152
+ expect { @admin.has_no_role("moderator") }.to change{ @admin.roles.size }.by(-2)
153
+ @admin.has_role?("staff").should be(true)
154
+ @admin.has_role?("moderator", Forum.first).should be(false)
155
+ @admin.has_role?("moderator", Forum.find(2)).should be(false)
156
+ @admin.has_role?("manager", Group).should be(true)
157
+ end
158
+
159
+ it "should not remove another global role" do
160
+ expect { @admin.has_no_role("global") }.not_to change{ @admin.roles.size }
161
+ end
162
+ end
163
+
164
+ context "with an instance scoped role" do
165
+ before do
166
+ @moderator = Rolify.user_cname.find(2)
167
+ @moderator.has_role "moderator", Forum.first
168
+ @moderator.has_role "soldier"
169
+ end
170
+
171
+ it "should set an instance scoped role" do
172
+ expect { @moderator.has_role "visitor", Forum.last }.to change{ Rolify.role_cname.count }.by(1)
173
+ visitor = Rolify.role_cname.last
174
+ visitor.name.should eq("visitor")
175
+ visitor.resource.should eq(Forum.last)
176
+ end
177
+
178
+ it "should not create another role if already existing" do
179
+ expect { @moderator.has_role "moderator", Forum.first }.not_to change{ Rolify.role_cname.count }
180
+ expect { @moderator.has_role "moderator", Forum.first }.not_to change{ @moderator.roles.size }
181
+ end
182
+
183
+ it "should get an instance scoped role" do
184
+ @moderator.has_role?("moderator", Forum.first).should be(true)
185
+ end
186
+
187
+ it "should get any of instance scoped role" do
188
+ @moderator.has_role?("moderator", :any).should be(true)
189
+ end
190
+
191
+ it "should not get an instance scoped role when asking for a global" do
192
+ @moderator.has_role?("moderator").should be(false)
193
+ end
194
+
195
+ it "should not get an instance scoped role when asking for a class scoped" do
196
+ @moderator.has_role?("moderator", Forum).should be(false)
197
+ end
198
+
199
+ it "should be able to use dynamic shortcut", :if => dynamic do
200
+ @moderator.is_moderator?.should be(false)
201
+ @moderator.is_moderator_of?(Forum.first).should be(true)
202
+ @moderator.is_moderator_of?(Forum.last).should be(false)
203
+ @moderator.is_moderator_of?(Forum).should be(false)
204
+ end
205
+
206
+ it "should not get a global role" do
207
+ @moderator.has_role?("admin").should be(false)
208
+ end
209
+
210
+ it "should not get the same role on another resource" do
211
+ Rolify.role_cname.create(:name => "moderator", :resource => Forum.last)
212
+ @moderator.has_role?("moderator", Forum.last).should be(false)
213
+ end
214
+
215
+ it "should not get the another role on the same resource" do
216
+ Rolify.role_cname.create(:name => "tourist", :resource => Forum.first)
217
+ @moderator.has_role?("tourist", Forum.first).should be(false)
218
+ @moderator.has_role?("tourist", :any).should be(false)
219
+ end
220
+
221
+ it "should not get inexisting role" do
222
+ @moderator.has_role?("dummy", Forum.last).should be(false)
223
+ @moderator.has_role?("dumber").should be(false)
224
+ end
225
+
226
+ it "should check if user has all of a scoped roles set" do
227
+ @moderator.has_all_roles?({ :name => "visitor", :resource => Forum.last }).should be(true)
228
+ @moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first },
229
+ { :name => "visitor", :resource => Forum.last }).should be(true)
230
+ @moderator.has_all_roles?({ :name => "moderator", :resource => Forum.first },
231
+ { :name => "dummy", :resource => Forum.last }).should be(false)
232
+ @moderator.has_all_roles?({ :name => "dummy", :resource => Forum.first },
233
+ { :name => "dumber", :resource => Forum.last }).should be(false)
234
+ end
235
+
236
+ it "should check if user has any of a scoped roles set" do
237
+ @moderator.has_any_role?( { :name => "visitor", :resource => Forum.last }).should be(true)
238
+ @moderator.has_any_role?( { :name => "moderator", :resource => Forum.first },
239
+ { :name => "visitor", :resource => Forum.last }).should be(true)
240
+ @moderator.has_any_role?( { :name => "moderator", :resource => Forum.first },
241
+ { :name => "dummy", :resource => Forum.last }).should be(true)
242
+ @moderator.has_any_role?( { :name => "dummy", :resource => Forum.first },
243
+ { :name => "dumber", :resource => Forum.last }).should be(false)
244
+ end
245
+
246
+ it "should not remove a global role of a user" do
247
+ expect { @moderator.has_no_role("soldier", Forum.first) }.not_to change{ @moderator.roles.size }
248
+ end
249
+
250
+ it "should remove a scoped role of a user" do
251
+ expect { @moderator.has_no_role("moderator", Forum.first) }.to change{ @moderator.roles.size }.by(-1)
252
+ @moderator.has_role?("moderator", Forum.first).should be(false)
253
+ @moderator.has_role?("soldier").should be(true)
254
+ end
255
+
256
+ it "should not remove another scoped role" do
257
+ expect { @moderator.has_no_role("visitor", Forum.first) }.not_to change{ @moderator.roles.size }
258
+ end
259
+ end
260
+
261
+ context "with a class scoped role" do
262
+ before do
263
+ @manager = Rolify.user_cname.find(3)
264
+ @manager.has_role "manager", Forum
265
+ @manager.has_role "moderator", Forum.first
266
+ @manager.has_role "moderator", Forum.last
267
+ @manager.has_role "warrior"
268
+ end
269
+
270
+ it "should set a class scoped role" do
271
+ expect { @manager.has_role "player", Forum }.to change{ Rolify.role_cname.count }.by(1)
272
+ player = Rolify.role_cname.last
273
+ player.name.should eq("player")
274
+ player.resource_type.should eq(Forum.to_s)
275
+ end
276
+
277
+ it "should not create another role if already existing" do
278
+ expect { @manager.has_role "manager", Forum }.not_to change{ Rolify.role_cname.count }
279
+ expect { @manager.has_role "manager", Forum }.not_to change{ @manager.roles.size }
280
+ end
281
+
282
+ it "should get a class scoped role" do
283
+ @manager.has_role?("manager", Forum).should be(true)
284
+ @manager.has_role?("manager", Forum.first).should be(true)
285
+ end
286
+
287
+ it "should get any of class scoped role" do
288
+ @manager.has_role?("manager", :any).should be(true)
289
+ end
290
+
291
+ it "should not get a scoped role when asking for a global" do
292
+ @manager.has_role?("manager").should be(false)
293
+ end
294
+
295
+ it "should be able to use dynamic shortcut", :if => dynamic do
296
+ @manager.is_manager?.should be(false)
297
+ @manager.is_manager_of?(Forum.first).should be(true)
298
+ @manager.is_manager_of?(Forum.last).should be(true)
299
+ @manager.is_manager_of?(Forum).should be(true)
300
+ @manager.is_manager_of?(Group).should be(false)
301
+ end
302
+
303
+ it "should not get a global role" do
304
+ @manager.has_role?("admin").should be(false)
305
+ end
306
+
307
+ it "should not get the same role on another resource" do
308
+ Rolify.role_cname.create(:name => "manager", :resource_type => "Group")
309
+ @manager.has_role?("manager", Group).should be(false)
310
+ end
311
+
312
+ it "should not get the another role on the same resource" do
313
+ Rolify.role_cname.create(:name => "member", :resource_type => "Forum")
314
+ @manager.has_role?("member", Forum).should be(false)
315
+ @manager.has_role?("member", :any).should be(false)
316
+ end
317
+
318
+ it "should not get inexisting role" do
319
+ @manager.has_role?("dummy", Forum).should be(false)
320
+ @manager.has_role?("dumber").should be(false)
321
+ end
322
+
323
+ it "should check if user has all of a scoped roles set" do
324
+ @manager.has_all_roles?({ :name => "player", :resource => Forum }).should be(true)
325
+ @manager.has_all_roles?({ :name => "manager", :resource => Forum },
326
+ { :name => "player", :resource => Forum }).should be(true)
327
+ @manager.has_all_roles?({ :name => "manager", :resource => Forum },
328
+ { :name => "dummy", :resource => Forum }).should be(false)
329
+ @manager.has_all_roles?({ :name => "dummy", :resource => Forum },
330
+ { :name => "dumber", :resource => Group }).should be(false)
331
+ end
332
+
333
+ it "should check if user has any of a scoped roles set" do
334
+ @manager.has_any_role?( { :name => "player", :resource => Forum }).should be(true)
335
+ @manager.has_any_role?( { :name => "manager", :resource => Forum },
336
+ { :name => "player", :resource => Forum }).should be(true)
337
+ @manager.has_any_role?( { :name => "manager", :resource => Forum },
338
+ { :name => "dummy", :resource => Forum }).should be(true)
339
+ @manager.has_any_role?( { :name => "dummy", :resource => Forum },
340
+ { :name => "dumber", :resource => Group }).should be(false)
341
+ end
342
+
343
+ it "should not remove a global role of a user" do
344
+ expect { @manager.has_no_role("warrior", Forum) }.not_to change{ @manager.roles.size }
345
+ end
346
+
347
+ it "should remove a class scoped role of a user" do
348
+ expect { @manager.has_no_role("manager", Forum) }.to change{ @manager.roles.size }.by(-1)
349
+ @manager.has_role?("manager", Forum).should be(false)
350
+ @manager.has_role?("moderator", Forum.first).should be(true)
351
+ @manager.has_role?("moderator", Forum.last).should be(true)
352
+ @manager.has_role?("warrior").should be(true)
353
+ end
244
354
 
245
- it "should check if user has all of a mix of global and scoped roles set" do
246
- @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }).should be(true)
247
- @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.last }).should be(false)
248
- @user.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.first }).should be(true)
249
- @user.has_all_roles?("dummy", { :name => "dumber", :resource => Forum.last }).should be(false)
250
- end
251
-
252
- it "should check if user has any of a mix of global and scoped roles set" do
253
- @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.first }).should be(true)
254
- @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }).should be(true)
255
- @user.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.last }).should be(true)
256
- @user.has_any_role?("dummy", { :name => "dumber", :resource => Forum.last }).should be(false)
257
- end
355
+ it "should remove two instance scoped roles of a user" do
356
+ expect { @manager.has_no_role("moderator", Forum) }.to change{ @manager.roles.size }.by(-2)
357
+ @manager.has_role?("manager", Forum).should be(true)
358
+ @manager.has_role?("moderator", Forum.first).should be(false)
359
+ @manager.has_role?("moderator", Forum.last).should be(false)
360
+ @manager.has_role?("warrior").should be(true)
361
+ end
362
+
363
+ it "should not remove another scoped role" do
364
+ expect { @manager.has_no_role("visitor", Forum.first) }.not_to change{ @manager.roles.size }
365
+ end
366
+ end
367
+
368
+ context "with different roles" do
369
+ before do
370
+ @user = Rolify.user_cname.find(4)
371
+ @user.has_role "admin"
372
+ @user.has_role "anonymous"
373
+ @user.has_role "moderator", Forum.first
374
+ @user.has_role "visitor", Forum.last
375
+ @user.has_role "manager", Forum
376
+ @user.has_role "leader", Group
377
+ end
378
+
379
+ it "should get a global role" do
380
+ @user.has_role?("admin").should be(true)
381
+ @user.has_role?("anonymous").should be(true)
258
382
  end
259
383
 
384
+ it "should get an instance scoped role" do
385
+ @user.has_role?("moderator", Forum.first).should be(true)
386
+ @user.has_role?("visitor", Forum.last).should be(true)
387
+ end
388
+
389
+ it "should get an class scoped role" do
390
+ @user.has_role?("manager", Forum).should be(true)
391
+ @user.has_role?("leader", Group).should be(true)
392
+ end
393
+
394
+ it "should check if user has all of a mix of global and scoped roles set" do
395
+ @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
396
+ @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(false)
397
+ @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Group }).should be(false)
398
+ @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Group.first }).should be(false)
399
+ @user.has_all_roles?({ :name => "admin", :resource => Forum }, { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
400
+ @user.has_all_roles?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
401
+ @user.has_all_roles?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum.first }).should be(true)
402
+ @user.has_all_roles?("dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
403
+ end
404
+
405
+ it "should check if user has any of a mix of global and scoped roles set" do
406
+ @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.first }, { :name => "manager", :resource => Forum }).should be(true)
407
+ @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
408
+ @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Group }).should be(true)
409
+ @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Group.first }).should be(true)
410
+ @user.has_any_role?({ :name => "admin", :resource => Forum }, { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
411
+ @user.has_any_role?({ :name => "admin", :resource => Forum.first }, { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum }).should be(true)
412
+ @user.has_any_role?("admin", { :name => "moderator", :resource => Forum.last }, { :name => "manager", :resource => Forum.first }).should be(true)
413
+ @user.has_any_role?("dummy", { :name => "dumber", :resource => Forum.last }, { :name => "dumberer", :resource => Forum }).should be(false)
414
+ end
415
+ end
416
+
260
417
  end
261
418
 
262
419
  describe Rolify do
data/spec/spec_helper.rb CHANGED
@@ -2,8 +2,9 @@ require 'rubygems'
2
2
  require 'bundler/setup'
3
3
 
4
4
  Bundler.require(:default, :test)
5
-
6
5
  require 'rolify'
6
+ require 'ammeter/init'
7
+
7
8
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
8
9
 
9
10
  load File.dirname(__FILE__) + '/support/schema.rb'
data/spec/support/data.rb CHANGED
@@ -1,9 +1,16 @@
1
+ # Users
1
2
  User.create(:login => "admin")
2
3
  User.create(:login => "moderator")
3
4
  User.create(:login => "god")
5
+ User.create(:login => "zombie")
6
+ Customer.create(:login => "customer VIP")
7
+ Customer.create(:login => "customer Doe")
8
+ Customer.create(:login => "customer John")
9
+ Customer.create(:login => "customer Edgar")
10
+
11
+ # Resources
4
12
  Forum.create(:name => "forum 1")
5
13
  Forum.create(:name => "forum 2")
6
14
  Forum.create(:name => "forum 3")
7
-
8
- Customer.create(:login => "customer VIP")
9
- Customer.create(:login => "customer Doe")
15
+ Group.create(:name => "group 1")
16
+ Group.create(:name => "group 2")
@@ -12,6 +12,9 @@ end
12
12
  class Forum < ActiveRecord::Base
13
13
  end
14
14
 
15
+ class Group < ActiveRecord::Base
16
+ end
17
+
15
18
  class Customer < ActiveRecord::Base
16
19
  has_and_belongs_to_many :roles, :join_table => :customers_privileges, :class_name => "Privilege"
17
20
  include Rolify::Roles
@@ -20,6 +20,10 @@ ActiveRecord::Schema.define do
20
20
  create_table(:forums) do |t|
21
21
  t.string :name
22
22
  end
23
+
24
+ create_table(:groups) do |t|
25
+ t.string :name
26
+ end
23
27
 
24
28
  create_table(:privileges) do |t|
25
29
  t.string :name
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rolify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,23 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-26 00:00:00.000000000Z
12
+ date: 2011-10-14 00:00:00.000000000 -04:00
13
+ default_executable:
13
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activerecord
17
+ requirement: &2152413060 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: 3.1.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *2152413060
14
26
  - !ruby/object:Gem::Dependency
15
27
  name: sqlite3
16
- requirement: &79887380 !ruby/object:Gem::Requirement
28
+ requirement: &2152483900 !ruby/object:Gem::Requirement
17
29
  none: false
18
30
  requirements:
19
31
  - - ! '>='
@@ -21,18 +33,51 @@ dependencies:
21
33
  version: '0'
22
34
  type: :development
23
35
  prerelease: false
24
- version_requirements: *79887380
36
+ version_requirements: *2152483900
25
37
  - !ruby/object:Gem::Dependency
26
- name: activerecord
27
- requirement: &79887130 !ruby/object:Gem::Requirement
38
+ name: ammeter
39
+ requirement: &2152578220 !ruby/object:Gem::Requirement
28
40
  none: false
29
41
  requirements:
30
- - - ~>
42
+ - - ! '>='
31
43
  - !ruby/object:Gem::Version
32
- version: 3.1.0.rc1
33
- type: :runtime
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *2152578220
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ requirement: &2160177360 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
34
57
  prerelease: false
35
- version_requirements: *79887130
58
+ version_requirements: *2160177360
59
+ - !ruby/object:Gem::Dependency
60
+ name: rspec
61
+ requirement: &2160394640 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *2160394640
70
+ - !ruby/object:Gem::Dependency
71
+ name: bundler
72
+ requirement: &2160528120 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *2160528120
36
81
  description: ! 'Very simple Roles library without any authorization enforcement (built
37
82
  to use with cancan) supporting scope on resource: user.is_moderator?(Forum.first)
38
83
  => # return false if user is moderator of another Forum '
@@ -57,12 +102,13 @@ files:
57
102
  - lib/rolify/role.rb
58
103
  - lib/rolify/version.rb
59
104
  - rolify.gemspec
105
+ - spec/generators/rolify/role/role_generator_spec.rb
60
106
  - spec/rolify/role_spec.rb
61
- - spec/spec.opts
62
107
  - spec/spec_helper.rb
63
108
  - spec/support/data.rb
64
109
  - spec/support/models.rb
65
110
  - spec/support/schema.rb
111
+ has_rdoc: true
66
112
  homepage: https://github.com/EppO/rolify
67
113
  licenses: []
68
114
  post_install_message:
@@ -83,8 +129,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
83
129
  version: '0'
84
130
  requirements: []
85
131
  rubyforge_project: rolify
86
- rubygems_version: 1.8.5
132
+ rubygems_version: 1.6.2
87
133
  signing_key:
88
134
  specification_version: 3
89
135
  summary: Roles library with resource scoping
90
- test_files: []
136
+ test_files:
137
+ - spec/generators/rolify/role/role_generator_spec.rb
138
+ - spec/rolify/role_spec.rb
139
+ - spec/spec_helper.rb
140
+ - spec/support/data.rb
141
+ - spec/support/models.rb
142
+ - spec/support/schema.rb
data/spec/spec.opts DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --backtrace