roleable 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/CHANGELOG CHANGED
@@ -4,4 +4,16 @@
4
4
 
5
5
  ## v0.0.2
6
6
 
7
- * Fix a bug that allowed users not associated with a resource to be listed in Resource#users_with_role.
7
+ * Fix a bug that allowed users not associated with a resource to be listed in Resource#users_with_role.
8
+
9
+ ## v0.1.0
10
+
11
+ * Allow resource_with_role and users_with_role to accept an array of role names.
12
+
13
+ ## v0.2.0
14
+
15
+ * Allow the subject class name to be customized so that it does not always have to be "User".
16
+
17
+ ## v0.2.1
18
+
19
+ * Ensure applied_roles are destroyed when an associated subject or resource is destroyed.
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/mcrowe/roleable.png?branch=master)](http://travis-ci.org/mcrowe/roleable)
4
4
 
5
- A flexible roles solution for active-record-backed Rails 3 applications. Allows for multiple roles scoped to instances of any model, as well as global roles (admin, for example).
5
+ A flexible roles solution for active-record-backed Rails 3 applications. Allows for multiple roles scoped to instances of any model, as well as global roles (admin, for example).
6
6
 
7
7
  Roleable is designed to be ultra simple and obvious, letting you build upon it to satisfy your needs. It is also designed to be efficient: using database indices, and well-crafted queries so that it can handle a huge number of roles.
8
8
 
@@ -21,15 +21,15 @@ And then execute:
21
21
  Run the generator to create the `Role` and `AppliedRole` models, migrations, and a configuration initializer:
22
22
 
23
23
  $ rails g roleable:install
24
-
24
+
25
25
  And then run the migrations:
26
26
 
27
27
  $ rake db:migrate
28
-
28
+
29
29
  (This will create the `roles` and `applied_roles` tables, together with the appropriate database indices.)
30
30
 
31
31
  ## Setup
32
-
32
+
33
33
  Include `Roleable::Subject` into your subject model, e.g.:
34
34
 
35
35
  ```ruby
@@ -37,7 +37,7 @@ class User < ActiveRecord::Base
37
37
  include Roleable::Subject
38
38
  ...
39
39
  end
40
- ```
40
+ ```
41
41
 
42
42
  Include `Roleable::Resource` into any models you want to relate a subject role to (resource), e.g.:
43
43
 
@@ -67,11 +67,11 @@ Remove a role:
67
67
  ```ruby
68
68
  # global
69
69
  user.remove_role(:admin)
70
-
70
+
71
71
  # resource-scoped
72
72
  user.remove_role(:editor, page)
73
73
  ```
74
-
74
+
75
75
  Query a role:
76
76
 
77
77
  ```ruby
@@ -81,7 +81,7 @@ user.has_role?(:admin)
81
81
  # resource-scoped
82
82
  user.has_role?(:editor, page)
83
83
  ```
84
-
84
+
85
85
  Find the resources of a given class for which a user has a given role:
86
86
 
87
87
  ```ruby
@@ -105,7 +105,7 @@ Or, all the global roles for a user:
105
105
  ```ruby
106
106
  user.roles_for_resource(nil)
107
107
  ```
108
-
108
+
109
109
  ### Resource
110
110
 
111
111
  Find subjects (users) with a given role:
@@ -114,6 +114,12 @@ Find subjects (users) with a given role:
114
114
  page.subjects_with_role(:editor)
115
115
  ```
116
116
 
117
+ Find subjects matching _any_ of a list of roles:
118
+
119
+ ```ruby
120
+ page.subjects_with_role([:editor, :author])
121
+ ```
122
+
117
123
  ## Customization
118
124
 
119
125
  By default, roleable assumes that your subject model is called `User`. You can customize this by modifying the generated configuration intializer located at `config/initializers/roleable.rb`, e.g.:
@@ -124,14 +130,8 @@ Roleable.configure do |config|
124
130
  end
125
131
  ```
126
132
 
127
- Find users matching _any_ of a list of roles:
128
-
129
- ```ruby
130
- page.users_with_role([:editor, :author])
131
- ```
132
-
133
133
  For more details check out the [API documentation](http://rubydoc.info/github/mcrowe/roleable/master/frames) on rubydoc.info.
134
-
134
+
135
135
  ## Requirements
136
136
 
137
137
  Rails 3, ActiveRecord, Ruby >= 1.8.7
@@ -142,4 +142,4 @@ Rails 3, ActiveRecord, Ruby >= 1.8.7
142
142
  2. Create your feature branch (`git checkout -b my-new-feature`)
143
143
  3. Commit your changes (`git commit -am 'Added some feature'`)
144
144
  4. Push to the branch (`git push origin my-new-feature`)
145
- 5. Create new Pull Request
145
+ 5. Create new Pull Request
@@ -13,11 +13,11 @@ module Roleable
13
13
  copy_file 'initializer.rb', 'config/initializers/roleable.rb'
14
14
  migration_template 'migration.rb', 'db/migrate/roleable_create_roles_and_applied_roles.rb'
15
15
  end
16
-
16
+
17
17
  def self.next_migration_number(path)
18
18
  Time.now.utc.strftime("%Y%m%d%H%M%S")
19
19
  end
20
-
20
+
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -1,5 +1,5 @@
1
1
  class AppliedRole < ActiveRecord::Base
2
-
2
+
3
3
  extend Roleable::AppliedRole
4
-
5
- end
4
+
5
+ end
@@ -1,8 +1,8 @@
1
1
  class RoleableCreateRolesAndAppliedRoles < ActiveRecord::Migration
2
-
2
+
3
3
  def change
4
4
  create_table :roles do |t|
5
- t.string :name
5
+ t.string :name
6
6
  t.timestamps
7
7
  end
8
8
 
@@ -12,9 +12,9 @@ class RoleableCreateRolesAndAppliedRoles < ActiveRecord::Migration
12
12
  t.references :resource, :polymorphic => true
13
13
  t.timestamps
14
14
  end
15
-
15
+
16
16
  add_index :applied_roles, :subject_id
17
17
  add_index :applied_roles, [:resource_type, :resource_id]
18
18
  end
19
-
20
- end
19
+
20
+ end
@@ -1,5 +1,5 @@
1
1
  class Role < ActiveRecord::Base
2
-
2
+
3
3
  extend Roleable::Role
4
-
5
- end
4
+
5
+ end
@@ -6,13 +6,13 @@ require 'roleable/applied_role'
6
6
  require 'roleable/configuration'
7
7
 
8
8
  module Roleable
9
-
9
+
10
10
  def self.configuration
11
11
  @configuration ||= Roleable::Configuration.new
12
12
  end
13
-
13
+
14
14
  def self.configure
15
15
  yield configuration if block_given?
16
16
  end
17
-
18
- end
17
+
18
+ end
@@ -1,10 +1,10 @@
1
1
  module Roleable::AppliedRole
2
-
2
+
3
3
  def self.extended(base)
4
4
  base.belongs_to :subject, :class_name => Roleable.configuration.subject_class_name
5
5
  base.belongs_to :role
6
6
  base.belongs_to :resource, :polymorphic => true
7
-
7
+
8
8
  base.attr_accessible :role, :subject_id, :resource
9
9
  end
10
10
 
@@ -29,18 +29,18 @@ module Roleable::AppliedRole
29
29
  def with_resource_class(resource_class)
30
30
  where(:resource_type => resource_type_from_class(resource_class))
31
31
  end
32
-
32
+
33
33
  # Create a record with the given attributes if there are no records
34
34
  # that already have those attributes.
35
35
  #
36
36
  # Returns the record if it was saved, otherwise nil.
37
- def create_if_unique!(attributes)
37
+ def create_if_unique!(attributes)
38
38
  applied_role = new(attributes)
39
39
 
40
- record_attributes = applied_role.attributes.reject do |k, v|
40
+ record_attributes = applied_role.attributes.reject do |k, v|
41
41
  %w(id updated_at created_at).include?(k)
42
42
  end
43
-
43
+
44
44
  if !exists?(record_attributes) && applied_role.save
45
45
  applied_role
46
46
  else
@@ -57,5 +57,5 @@ module Roleable::AppliedRole
57
57
  def resource_type_from_class(resource_class)
58
58
  resource_class.name
59
59
  end
60
-
61
- end
60
+
61
+ end
@@ -1,9 +1,9 @@
1
1
  class Roleable::Configuration
2
-
2
+
3
3
  attr_accessor :subject_class_name
4
4
 
5
5
  def initialize
6
6
  @subject_class_name = 'User'
7
7
  end
8
-
9
- end
8
+
9
+ end
@@ -1,7 +1,7 @@
1
1
  module Roleable::Resource
2
2
 
3
3
  def self.included(base)
4
- base.has_many :applied_roles, :as => :resource
4
+ base.has_many :applied_roles, :as => :resource, :dependent => :destroy
5
5
  end
6
6
 
7
7
  # Return a list of users that have the given role for this resource.
@@ -16,11 +16,11 @@ module Roleable::Resource
16
16
  subject_class.joins(:applied_roles).
17
17
  merge( ::AppliedRole.with_role_name(role_name).with_resource(self) )
18
18
  end
19
-
19
+
20
20
  private
21
-
21
+
22
22
  def subject_class
23
23
  Roleable.configuration.subject_class_name.classify.constantize
24
24
  end
25
-
26
- end
25
+
26
+ end
@@ -1,9 +1,9 @@
1
1
  module Roleable::Role
2
2
 
3
- def self.extended(base)
3
+ def self.extended(base)
4
4
  base.has_many :applied_roles
5
5
 
6
6
  base.attr_accessible :name
7
7
  end
8
-
9
- end
8
+
9
+ end
@@ -1,7 +1,7 @@
1
1
  module Roleable::Subject
2
-
2
+
3
3
  def self.included(base)
4
- base.has_many :applied_roles, :foreign_key => 'subject_id'
4
+ base.has_many :applied_roles, :foreign_key => 'subject_id', :dependent => :destroy
5
5
  end
6
6
 
7
7
  # Add a role to the subject scoped to the given resource or global if no resource given.
@@ -16,8 +16,8 @@ module Roleable::Subject
16
16
  #
17
17
  def add_role(role_name, resource = nil)
18
18
  role = ::Role.find_by_name(role_name) or return
19
-
20
- ::AppliedRole.create_if_unique!(:subject_id => self.id, :role => role, :resource => resource)
19
+
20
+ ::AppliedRole.create_if_unique!(:subject_id => self.id, :role => role, :resource => resource)
21
21
  end
22
22
 
23
23
  # Check if the subject has the given role for the given resource, or if they have the role globally
@@ -37,7 +37,7 @@ module Roleable::Subject
37
37
  with_role_name(role_name).
38
38
  exists?
39
39
  end
40
-
40
+
41
41
  # Remove the given role from the subject for the given resource, or globally if no resource given.
42
42
  #
43
43
  # Returns <tt>true</tt> if the role was found and deleted, <tt>false</tt> otherwise.
@@ -49,12 +49,12 @@ module Roleable::Subject
49
49
  #
50
50
  def remove_role(role_name, resource = nil)
51
51
  applied_roles = ::AppliedRole.with_subject(self).with_resource(resource).with_role_name(role_name)
52
-
52
+
53
53
  deleted_count = applied_roles.delete_all
54
-
54
+
55
55
  deleted_count > 0
56
56
  end
57
-
57
+
58
58
  # Return a list of resources of the given class, for which the subject has the given role.
59
59
  # If passed an array or roles, returns resources for which the subject has any of the roles.
60
60
  #
@@ -67,16 +67,16 @@ module Roleable::Subject
67
67
  applied_roles = ::AppliedRole.with_subject(self).with_role_name(role_name).with_resource_class(resource_class)
68
68
  resource_class.includes(:applied_roles).merge(applied_roles)
69
69
  end
70
-
70
+
71
71
  # Return a list of roles that the subject has for the given resource.
72
72
  #
73
73
  # ==== Examples
74
74
  #
75
75
  # user.roles_for_resource(page) # => [role1, role2, ...]
76
- #
76
+ #
77
77
  def roles_for_resource(resource)
78
- applied_roles = ::AppliedRole.with_subject(self).with_resource(resource)
78
+ applied_roles = ::AppliedRole.with_subject(self).with_resource(resource)
79
79
  ::Role.includes(:applied_roles).merge(applied_roles)
80
80
  end
81
-
82
- end
81
+
82
+ end
@@ -1,3 +1,3 @@
1
1
  module Roleable
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -14,7 +14,7 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "roleable"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Roleable::VERSION
17
-
17
+
18
18
  gem.add_development_dependency 'rake', '~> 0.9'
19
19
  gem.add_development_dependency 'rspec', '~> 2.8'
20
20
  gem.add_development_dependency 'sqlite3', '~> 1.3'
@@ -3,62 +3,72 @@ require 'spec_helper'
3
3
  describe Roleable::Resource do
4
4
 
5
5
  include_context 'with models'
6
-
6
+
7
+ before do
8
+ @page = Page.create
9
+ @editor_role = Role.create(:name => 'editor')
10
+ @author_role = Role.create(:name => 'author')
11
+ end
12
+
7
13
  describe '#subjects_with_role' do
8
-
9
- before do
10
- @page = Page.create
11
- @editor_role = Role.create(:name => 'editor')
12
- @author_role = Role.create(:name => 'author')
13
- end
14
14
 
15
15
  context 'with a single role' do
16
-
16
+
17
17
  context 'with a role that doesnt exist' do
18
18
  it 'returns an empty list' do
19
19
  @page.subjects_with_role(:notarole).should be_empty
20
20
  end
21
21
  end
22
-
22
+
23
23
  context 'when multiple users have the given role' do
24
-
24
+
25
25
  before do
26
26
  3.times { User.create.add_role(:editor, @page) }
27
- end
28
-
27
+ end
28
+
29
29
 
30
- it 'returns a list of the users' do
30
+ it 'returns a list of the users' do
31
31
  users = @page.subjects_with_role(:editor)
32
-
32
+
33
33
  users.length.should == 3
34
34
  users.first.should be_a(User)
35
35
  end
36
-
36
+
37
37
  it 'doesnt return users that dont have the role' do
38
38
  other_page = Page.create
39
39
  other_user = User.create.add_role(:editor, other_page)
40
40
 
41
41
  users = @page.subjects_with_role(:editor)
42
-
42
+
43
43
  users.length.should == 3
44
44
  end
45
-
45
+
46
46
  end
47
-
47
+
48
48
  end
49
-
49
+
50
50
  context 'with a list of roles' do
51
51
  it 'returns a list of users that have any of the given roles for this resource' do
52
52
  3.times { User.create.add_role(:editor, @page) }
53
53
  2.times { User.create.add_role(:author, @page) }
54
54
  User.create
55
-
55
+
56
56
  users = @page.subjects_with_role([:editor, :author])
57
-
57
+
58
58
  users.length.should == 5
59
59
  end
60
60
  end
61
-
61
+
62
62
  end
63
63
 
64
- end
64
+ describe '#destroy' do
65
+
66
+ it 'destroys any associated applied_roles' do
67
+ User.create.add_role(:editor, @page)
68
+
69
+ expect { @page.destroy }.to change { AppliedRole.count}.by(-1)
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Roleable::Subject do
4
4
 
5
5
  include_context 'with models'
6
-
6
+
7
7
  before do
8
8
  @user = User.create
9
9
  @admin_role = Role.create(:name => 'admin')
@@ -12,66 +12,66 @@ describe Roleable::Subject do
12
12
  end
13
13
 
14
14
  describe '#add_role' do
15
-
15
+
16
16
  context 'with a role that doesnt exist' do
17
-
17
+
18
18
  before do
19
19
  @result = @user.add_role(:notarole)
20
20
  end
21
-
21
+
22
22
  it 'returns false' do
23
23
  @result.should be_false
24
24
  end
25
-
25
+
26
26
  it 'doesnt create a new applied_role' do
27
27
  AppliedRole.count.should == 0
28
28
  end
29
-
29
+
30
30
  end
31
-
31
+
32
32
  context 'without a resource' do
33
-
33
+
34
34
  before do
35
35
  @user_role = @user.add_role(:admin)
36
36
  end
37
-
37
+
38
38
  it 'creates a new user role' do
39
39
  AppliedRole.count.should == 1
40
40
  end
41
-
41
+
42
42
  it 'associates the user role with the given user' do
43
43
  @user_role.subject.should == @user
44
- end
44
+ end
45
45
 
46
46
  it 'associates the user role with the given role' do
47
47
  @user_role.role.should == @admin_role
48
48
  end
49
-
49
+
50
50
  it 'sets the resource to nil' do
51
51
  @user_role.resource.should == nil
52
52
  end
53
-
53
+
54
54
  end
55
-
55
+
56
56
  context 'with a resource' do
57
-
57
+
58
58
  before do
59
59
  @page = Page.create
60
60
  @user_role = @user.add_role(:admin, @page)
61
61
  end
62
-
62
+
63
63
  it 'associates the user role with the given resource' do
64
64
  @user_role.resource.should == @page
65
65
  end
66
-
66
+
67
67
  context 'when the user already has the given role for the resource' do
68
68
  it 'doesnt create another user role' do
69
69
  expect { @user.add_role(:admin, @page) }.to_not change(AppliedRole, :count)
70
70
  end
71
71
  end
72
-
72
+
73
73
  end
74
-
74
+
75
75
  end
76
76
 
77
77
  describe '#has_role?' do
@@ -83,47 +83,47 @@ describe Roleable::Subject do
83
83
  end
84
84
 
85
85
  context 'without a resource' do
86
-
87
- context 'when the user DOESNT have the given role' do
86
+
87
+ context 'when the user DOESNT have the given role' do
88
88
  it 'is false' do
89
89
  @user.has_role?(:admin).should be_false
90
90
  end
91
91
  end
92
-
92
+
93
93
  context 'when the user DOES have the given role' do
94
94
  it 'is true' do
95
95
  @user.add_role(:admin)
96
96
  @user.has_role?(:admin).should be_true
97
97
  end
98
98
  end
99
-
99
+
100
100
  end
101
-
101
+
102
102
  context 'with a resource' do
103
-
103
+
104
104
  before do
105
105
  @page = Page.create
106
106
  end
107
-
107
+
108
108
  context 'when the user DOESNT have the role for that resource' do
109
109
  it 'is false' do
110
110
  @user.has_role?(:editor, @page).should be_false
111
111
  end
112
112
  end
113
-
113
+
114
114
  context 'when the user DOES have the role for that resource' do
115
115
  it 'is true' do
116
116
  @user.add_role(:editor, @page)
117
117
  @user.has_role?(:editor, @page).should be_true
118
118
  end
119
119
  end
120
-
120
+
121
121
  end
122
-
122
+
123
123
  end
124
124
 
125
125
  describe '#remove_role' do
126
-
126
+
127
127
  context 'global' do
128
128
 
129
129
  context 'when the user doesnt have the role' do
@@ -131,69 +131,69 @@ describe Roleable::Subject do
131
131
  @user.remove_role(:admin).should be_false
132
132
  end
133
133
  end
134
-
134
+
135
135
  context 'when the role doesnt exist' do
136
136
  it 'is false' do
137
137
  @user.remove_role(:notarole).should be_false
138
138
  end
139
139
  end
140
-
140
+
141
141
  context 'when the user has the given role' do
142
-
142
+
143
143
  before do
144
144
  @user.add_role(:admin)
145
145
  @result = @user.remove_role(:admin)
146
146
  end
147
-
147
+
148
148
  it 'is true' do
149
149
  @result.should be_true
150
150
  end
151
-
151
+
152
152
  it 'removes the given role' do
153
153
  @user.has_role?(:admin).should be_false
154
154
  end
155
-
155
+
156
156
  end
157
-
157
+
158
158
  end
159
-
159
+
160
160
  end
161
161
 
162
162
  describe '#resources_with_role' do
163
-
163
+
164
164
  context 'with a single role' do
165
-
165
+
166
166
  context 'when the user has the given role for several resources of the given class' do
167
167
  it 'returns a list containing those resources' do
168
168
  3.times { @user.add_role(:editor, Page.create) }
169
-
169
+
170
170
  pages = @user.resources_with_role(:editor, Page)
171
-
171
+
172
172
  pages.length.should == 3
173
173
  pages.first.should be_a(Page)
174
174
  end
175
175
  end
176
-
176
+
177
177
  context 'when the user doesnt have the given role for any resources of the given class' do
178
178
  it 'returns an empty list' do
179
- @user.resources_with_role(:editor, Page).should be_empty
179
+ @user.resources_with_role(:editor, Page).should be_empty
180
180
  end
181
181
  end
182
-
182
+
183
183
  end
184
-
184
+
185
185
  context 'with a list of roles' do
186
186
  it 'returns a list of resources the user has those roles for' do
187
187
  3.times { @user.add_role(:editor, Page.create) }
188
188
  2.times { @user.add_role(:author, Page.create) }
189
189
  Page.create
190
-
190
+
191
191
  pages = @user.resources_with_role([:editor, :author], Page)
192
-
193
- pages.length.should == 5
192
+
193
+ pages.length.should == 5
194
194
  end
195
195
  end
196
-
196
+
197
197
  end
198
198
 
199
199
  describe '#roles_for_resource' do
@@ -201,11 +201,21 @@ describe Roleable::Subject do
201
201
  page = Page.create
202
202
  @user.add_role(:editor, page)
203
203
  @user.add_role(:admin, page)
204
-
204
+
205
205
  roles = @user.roles_for_resource(page)
206
206
  roles.length.should == 2
207
207
  roles.first.should be_a(Role)
208
208
  end
209
209
  end
210
-
210
+
211
+ describe '#destroy' do
212
+
213
+ it 'destroys any associated applied_roles' do
214
+ @user.add_role(:admin)
215
+
216
+ expect { @user.destroy }.to change { AppliedRole.count}.by(-1)
217
+ end
218
+
219
+ end
220
+
211
221
  end
@@ -10,6 +10,6 @@ Dir['spec/support/**/*.rb'].each { |f| require File.expand_path("../../#{f}", __
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.extend WithModel
13
-
13
+
14
14
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
15
- end
15
+ end
@@ -19,10 +19,10 @@ shared_context 'with models' do
19
19
  t.integer :role_id
20
20
  t.integer :resource_id
21
21
  t.string :resource_type
22
-
22
+
23
23
  t.timestamps
24
24
  end
25
25
  model { extend Roleable::AppliedRole }
26
26
  end
27
-
28
- end
27
+
28
+ end
metadata CHANGED
@@ -1,78 +1,108 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: roleable
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Mitch Crowe
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-05-11 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rake
16
- requirement: &2162720700 !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-05-23 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ requirement: &id001 !ruby/object:Gem::Requirement
17
23
  none: false
18
- requirements:
24
+ requirements:
19
25
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '0.9'
26
+ - !ruby/object:Gem::Version
27
+ hash: 25
28
+ segments:
29
+ - 0
30
+ - 9
31
+ version: "0.9"
32
+ prerelease: false
33
+ name: rake
34
+ version_requirements: *id001
22
35
  type: :development
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ hash: 19
43
+ segments:
44
+ - 2
45
+ - 8
46
+ version: "2.8"
23
47
  prerelease: false
24
- version_requirements: *2162720700
25
- - !ruby/object:Gem::Dependency
26
48
  name: rspec
27
- requirement: &2162719820 !ruby/object:Gem::Requirement
49
+ version_requirements: *id002
50
+ type: :development
51
+ - !ruby/object:Gem::Dependency
52
+ requirement: &id003 !ruby/object:Gem::Requirement
28
53
  none: false
29
- requirements:
54
+ requirements:
30
55
  - - ~>
31
- - !ruby/object:Gem::Version
32
- version: '2.8'
33
- type: :development
56
+ - !ruby/object:Gem::Version
57
+ hash: 9
58
+ segments:
59
+ - 1
60
+ - 3
61
+ version: "1.3"
34
62
  prerelease: false
35
- version_requirements: *2162719820
36
- - !ruby/object:Gem::Dependency
37
63
  name: sqlite3
38
- requirement: &2162719040 !ruby/object:Gem::Requirement
64
+ version_requirements: *id003
65
+ type: :development
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
39
68
  none: false
40
- requirements:
69
+ requirements:
41
70
  - - ~>
42
- - !ruby/object:Gem::Version
43
- version: '1.3'
44
- type: :development
71
+ - !ruby/object:Gem::Version
72
+ hash: 7
73
+ segments:
74
+ - 3
75
+ - 0
76
+ version: "3.0"
45
77
  prerelease: false
46
- version_requirements: *2162719040
47
- - !ruby/object:Gem::Dependency
48
78
  name: activerecord
49
- requirement: &2162718020 !ruby/object:Gem::Requirement
79
+ version_requirements: *id004
80
+ type: :development
81
+ - !ruby/object:Gem::Dependency
82
+ requirement: &id005 !ruby/object:Gem::Requirement
50
83
  none: false
51
- requirements:
84
+ requirements:
52
85
  - - ~>
53
- - !ruby/object:Gem::Version
54
- version: '3.0'
55
- type: :development
86
+ - !ruby/object:Gem::Version
87
+ hash: 15
88
+ segments:
89
+ - 0
90
+ - 2
91
+ version: "0.2"
56
92
  prerelease: false
57
- version_requirements: *2162718020
58
- - !ruby/object:Gem::Dependency
59
93
  name: with_model
60
- requirement: &2162717140 !ruby/object:Gem::Requirement
61
- none: false
62
- requirements:
63
- - - ~>
64
- - !ruby/object:Gem::Version
65
- version: '0.2'
94
+ version_requirements: *id005
66
95
  type: :development
67
- prerelease: false
68
- version_requirements: *2162717140
69
96
  description: Roles solution for active-record-backed Rails 3 applications
70
- email:
97
+ email:
71
98
  - crowe.mitch@gmail.com
72
99
  executables: []
100
+
73
101
  extensions: []
102
+
74
103
  extra_rdoc_files: []
75
- files:
104
+
105
+ files:
76
106
  - .gitignore
77
107
  - .rspec
78
108
  - .travis.yml
@@ -99,37 +129,41 @@ files:
99
129
  - spec/roleable/subject_spec.rb
100
130
  - spec/spec_helper.rb
101
131
  - spec/support/shared_contexts.rb
132
+ has_rdoc: true
102
133
  homepage: https://github.com/mcrowe/roleable
103
134
  licenses: []
135
+
104
136
  post_install_message:
105
137
  rdoc_options: []
106
- require_paths:
138
+
139
+ require_paths:
107
140
  - lib
108
- required_ruby_version: !ruby/object:Gem::Requirement
141
+ required_ruby_version: !ruby/object:Gem::Requirement
109
142
  none: false
110
- requirements:
111
- - - ! '>='
112
- - !ruby/object:Gem::Version
113
- version: '0'
114
- segments:
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ hash: 3
147
+ segments:
115
148
  - 0
116
- hash: 3443296545749404592
117
- required_rubygems_version: !ruby/object:Gem::Requirement
149
+ version: "0"
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
151
  none: false
119
- requirements:
120
- - - ! '>='
121
- - !ruby/object:Gem::Version
122
- version: '0'
123
- segments:
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ hash: 3
156
+ segments:
124
157
  - 0
125
- hash: 3443296545749404592
158
+ version: "0"
126
159
  requirements: []
160
+
127
161
  rubyforge_project:
128
- rubygems_version: 1.8.10
162
+ rubygems_version: 1.3.9.4
129
163
  signing_key:
130
164
  specification_version: 3
131
165
  summary: Roles solution for active-record-backed Rails 3 applications
132
- test_files:
166
+ test_files:
133
167
  - spec/roleable/resource_spec.rb
134
168
  - spec/roleable/subject_spec.rb
135
169
  - spec/spec_helper.rb