cancan-permits 0.3.2 → 0.3.4

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/README.markdown CHANGED
@@ -6,6 +6,8 @@ Role specific Permits for use with [CanCan](http://github.com/ryanb/cancan) perm
6
6
 
7
7
  See Changelog.txt (Major updates as per Nov 24. 2010)
8
8
 
9
+ Nov 28: Added Generators to create individual Permit and License!
10
+
9
11
  ## Install
10
12
 
11
13
  <code>gem install cancan-permits</code>
@@ -18,7 +20,39 @@ Gemfile
18
20
  Update gem bundle in terminal:
19
21
  <code>$ bundle install</code>
20
22
 
21
- See Generator section below. Also see [CanCan permits demo app](https://github.com/kristianmandrup/cancan-permits-demo)
23
+ See Generator section below.
24
+
25
+ See [CanCan permits demo app](https://github.com/kristianmandrup/cancan-permits-demo) for more info on how to set up a Rails 3 app with CanCan permits!
26
+
27
+ ## Rails 3 configuration
28
+
29
+ Create a rails initializer with the following code:
30
+ <code>
31
+ module Cream
32
+ # specify all roles available in your app!
33
+ def self.available_roles
34
+ [:guest, :admin]
35
+ end
36
+ end
37
+ </code>
38
+
39
+ Modify the User model in 'models/user.rb' (optional)
40
+ <code>
41
+ class User
42
+ def self.roles
43
+ Cream.available_roles
44
+ end
45
+
46
+ def has_role? role
47
+ (self.role || 'guest').to_sym == role.to_sym
48
+ end
49
+ end
50
+ </code>
51
+
52
+ ### User Roles
53
+
54
+ CanCan permits requires that you have some kind of Role system in place and that User#has_role? uses this Role system.
55
+ You can either add a 'role' field directly to User or fx use a [Roles Generic ](https://github.com/kristianmandrup/roles_generic) role strategy.
22
56
 
23
57
  ## Usage
24
58
 
@@ -32,23 +66,27 @@ To add Roles to your app, you might consider using a *roles* gem such as [Roles
32
66
  ### Define which Roles are available
33
67
 
34
68
  You can override the default configuration here:
35
-
36
69
  <pre>
37
70
  module Permits::Roles
38
71
  def self.available
39
- # return symbols array of Roles available to users
72
+ if defined? ::Cream
73
+ Cream.available_roles
74
+ elsif defined? ::User
75
+ User.roles
76
+ else
77
+ [:admin, :guest]
78
+ end
40
79
  end
41
80
  end
42
- </pre>
43
-
44
- By default it returns User.roles if such exists, otherwise it returns [:guest, :admin] by default.
81
+ </pre>
45
82
 
46
83
  ### Define a Permit for each Role.
47
84
 
48
85
  _Note:_ You might consider using the Permits generator in order to generate your permits for you (see below)
49
86
 
50
- <pre>
51
- class AdminPermit < Permit::Base
87
+ Permit example:
88
+ <pre><code>
89
+ class AdminPermit - Permit::Base
52
90
  def initialize(ability, options = {})
53
91
  super
54
92
  end
@@ -60,7 +98,7 @@ _Note:_ You might consider using the Permits generator in order to generate your
60
98
  can :manage, :all
61
99
  end
62
100
  end
63
- </pre>
101
+ </code></pre>
64
102
 
65
103
  ## Special Permits
66
104
 
@@ -100,8 +138,8 @@ The generator will create a licenses.rb file in the permits folder where you can
100
138
  licenses subfolder where you put your license files.
101
139
 
102
140
  License example:
103
- <pre>
104
- class BloggingLicense < License::Base
141
+ <pre><code>
142
+ class BloggingLicense - License::Base
105
143
  def initialize name
106
144
  super
107
145
  end
@@ -112,12 +150,13 @@ License example:
112
150
  owns(user, Post)
113
151
  end
114
152
  end
115
- </pre>
153
+ </code></pre>
116
154
 
117
- Usage example:
155
+ Note: for some reason I had problems with markdown parsing the inheritance symbol "<" :(
118
156
 
119
- <pre>
120
- class GuestPermit < Permit::Base
157
+ Usage example:
158
+ <pre><code>
159
+ class GuestPermit - Permit::Base
121
160
  def initialize(ability, options = {})
122
161
  super
123
162
  end
@@ -130,7 +169,7 @@ Usage example:
130
169
  end
131
170
  end
132
171
  end
133
- </pre>
172
+ </code></pre>
134
173
 
135
174
  By convention the permits system will try to find a license named UserAdminLicense and BloggingLicense in this example and call enforce! on each license.
136
175
 
@@ -189,7 +228,9 @@ Please provide suggestions and feedback on how to improve this :)
189
228
  The gem comes with the following generators
190
229
 
191
230
  * cancan:permits
231
+ * cancan:permit
192
232
  * cancan:licenses
233
+ * cancan:license
193
234
 
194
235
  ## Permits Generator
195
236
 
@@ -239,6 +280,40 @@ To get an understanding of what the generator generates for a Rails 3 applicatio
239
280
  In the file <code>licenses_generator_spec.rb</code> make the following change <code>config.remove_temp_dir = false</code>
240
281
  This will prevent the rails /tmp dir from being deleted after the test run, so you can inspect what is generated in the Rails app.
241
282
 
283
+ ## License Generator
284
+
285
+ <code>rails g cancan:license [NAME]</code>
286
+
287
+ Options
288
+ * --creates : The models that have 'creates' permission for the holder of this license
289
+ * --owns : The models that have 'owns' permission for the holder of this license
290
+ * --manages : The models that have 'manages' permission for the holder of this license
291
+ * --read : The models that have 'read' permission for the holder of this license
292
+
293
+ Run examples:
294
+
295
+ Generate licenses:
296
+
297
+ <code>$ rails g cancan:license blog_editing --owns article post --read blog --licenses blogging</code>
298
+
299
+ ## Permit Generator
300
+
301
+ Generate a named permit
302
+
303
+ <code>rails g cancan:permit [ROLE]</code>
304
+
305
+ Options
306
+ * --creates : The models that have 'creates' permission for the holder of this license
307
+ * --owns : The models that have 'owns' permission for the holder of this license
308
+ * --manages : The models that have 'manages' permission for the holder of this license
309
+ * --read : The models that have 'read' permission for the holder of this license
310
+
311
+ Run examples:
312
+
313
+ Generate licenses:
314
+
315
+ <code>$ rails g cancan:permit editor --owns article post --read blog --licenses blog_editing</code>
316
+
242
317
  # TODO ?
243
318
 
244
319
  The Permits generator should attempt to attempt to uncover which roles are currently defined as available to the system (Generic Roles API, User#roles etc.) and generate permits for those roles. Any roles specified in the --roles option should be merged with the roles available in the app.
data/Rakefile CHANGED
@@ -8,8 +8,8 @@ begin
8
8
  gem.homepage = "http://github.com/kristianmandrup/cancan-permits"
9
9
  gem.authors = ["Kristian Mandrup"]
10
10
  gem.add_development_dependency "rspec", ">= 2.0.1"
11
- gem.add_development_dependency 'code-spec', "~> 0.2.5"
12
- gem.add_development_dependency 'rails-app-spec', "~> 0.3.0"
11
+ gem.add_development_dependency 'code-spec', "~> 0.2.9"
12
+ gem.add_development_dependency 'rails-app-spec', "~> 0.3.1"
13
13
 
14
14
  gem.add_dependency 'cancan', "~> 1.4.1"
15
15
  gem.add_dependency 'require_all', "~> 1.2.0"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.4
@@ -1,147 +1,153 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cancan-permits}
8
- s.version = "0.3.2"
8
+ s.version = "0.3.4"
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-11-25}
12
+ s.date = %q{2010-11-28}
13
13
  s.description = %q{Role specific Permits for use with CanCan permission system}
14
14
  s.email = %q{kmandrup@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.markdown"
17
+ "README.markdown"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- ".rspec",
23
- "Changelog.txt",
24
- "LICENSE",
25
- "README.markdown",
26
- "Rakefile",
27
- "VERSION",
28
- "cancan-permits.gemspec",
29
- "development.sqlite3",
30
- "lib/cancan-permits.rb",
31
- "lib/cancan-permits/license/base_license.rb",
32
- "lib/cancan-permits/main.rb",
33
- "lib/cancan-permits/namespaces.rb",
34
- "lib/cancan-permits/permit/base_permit.rb",
35
- "lib/cancan-permits/permit/util.rb",
36
- "lib/cancan-permits/permits/ability.rb",
37
- "lib/cancan-permits/permits/configuration.rb",
38
- "lib/cancan-permits/permits/roles.rb",
39
- "lib/cancan-permits/rspec.rb",
40
- "lib/cancan-permits/rspec/config.rb",
41
- "lib/cancan-permits/rspec/matchers/have_license.rb",
42
- "lib/cancan-permits/rspec/matchers/have_license_class.rb",
43
- "lib/cancan-permits/rspec/matchers/have_license_file.rb",
44
- "lib/generators/cancan/licenses/licenses_generator.rb",
45
- "lib/generators/cancan/licenses/templates/blogging_license.rb",
46
- "lib/generators/cancan/licenses/templates/license.rb",
47
- "lib/generators/cancan/licenses/templates/user_admin_license.rb",
48
- "lib/generators/cancan/permits/permits_generator.rb",
49
- "lib/generators/cancan/permits/templates/permit.rb",
50
- "spec/active_record/db/database.yml",
51
- "spec/active_record/migrations/001_create_user.rb",
52
- "spec/active_record/migrations/002_create_comment.rb",
53
- "spec/active_record/migrations/003_create_post.rb",
54
- "spec/active_record/migrations/004_create_article.rb",
55
- "spec/active_record/models/all_models.rb",
56
- "spec/active_record/owner_permits_spec.rb",
57
- "spec/active_record/permits_spec.rb",
58
- "spec/active_record/spec_helper.rb",
59
- "spec/data_mapper/models/all_models.rb",
60
- "spec/data_mapper/owner_permits_spec.rb",
61
- "spec/data_mapper/permits_spec.rb",
62
- "spec/data_mapper/spec_helper.rb",
63
- "spec/fixtures/permits/admin_permit.rb",
64
- "spec/fixtures/permits/any_permit.rb",
65
- "spec/fixtures/permits/editor_permit.rb",
66
- "spec/fixtures/permits/guest_permit.rb",
67
- "spec/fixtures/permits/super_admin_permit.rb",
68
- "spec/fixtures/permits/system_permit.rb",
69
- "spec/generators/cancan/licenses_generator_spec.rb",
70
- "spec/generators/cancan/permits_generator_spec.rb",
71
- "spec/generic/api/basic/config.rb",
72
- "spec/generic/api/basic/xgroup.rb",
73
- "spec/generic/api/basic/xgroup_orm.rb",
74
- "spec/generic/api/owner/config.rb",
75
- "spec/generic/api/owner/xgroup.rb",
76
- "spec/generic/api/owner/xgroup_orm.rb",
77
- "spec/generic/models/all_models.rb",
78
- "spec/generic/owner_permits_spec.rb",
79
- "spec/generic/permits_spec.rb",
80
- "spec/generic/spec_helper.rb",
81
- "spec/mongo_mapper/models/all_models.rb",
82
- "spec/mongo_mapper/owner_permits_spec.rb",
83
- "spec/mongo_mapper/permits_spec.rb",
84
- "spec/mongo_mapper/spec_helper.rb",
85
- "spec/mongoid/models/all_models.rb",
86
- "spec/mongoid/owner_permits_spec.rb",
87
- "spec/mongoid/permits_spec.rb",
88
- "spec/mongoid/spec_helper.rb",
89
- "spec/simply_stored/CouchDB.txt",
90
- "spec/simply_stored/models/all_models.rb",
91
- "spec/simply_stored/owner_permits_spec.rb",
92
- "spec/simply_stored/permits_spec.rb",
93
- "spec/simply_stored/spec_helper.rb",
94
- "spec/spec_helper.rb"
21
+ ".rspec",
22
+ "Changelog.txt",
23
+ "LICENSE",
24
+ "README.markdown",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "cancan-permits.gemspec",
28
+ "development.sqlite3",
29
+ "lib/cancan-permits.rb",
30
+ "lib/cancan-permits/license/base_license.rb",
31
+ "lib/cancan-permits/main.rb",
32
+ "lib/cancan-permits/namespaces.rb",
33
+ "lib/cancan-permits/permit/base_permit.rb",
34
+ "lib/cancan-permits/permit/util.rb",
35
+ "lib/cancan-permits/permits/ability.rb",
36
+ "lib/cancan-permits/permits/configuration.rb",
37
+ "lib/cancan-permits/permits/roles.rb",
38
+ "lib/cancan-permits/rspec.rb",
39
+ "lib/cancan-permits/rspec/config.rb",
40
+ "lib/cancan-permits/rspec/matchers/have_license.rb",
41
+ "lib/cancan-permits/rspec/matchers/have_license_class.rb",
42
+ "lib/cancan-permits/rspec/matchers/have_license_file.rb",
43
+ "lib/generators/cancan/license/license_generator.rb",
44
+ "lib/generators/cancan/license/templates/license.rb",
45
+ "lib/generators/cancan/licenses/licenses_generator.rb",
46
+ "lib/generators/cancan/licenses/templates/base_license.rb",
47
+ "lib/generators/cancan/licenses/templates/blogging_license.rb",
48
+ "lib/generators/cancan/licenses/templates/user_admin_license.rb",
49
+ "lib/generators/cancan/permit/permit_generator.rb",
50
+ "lib/generators/cancan/permit/templates/role_permit.rb",
51
+ "lib/generators/cancan/permits/permits_generator.rb",
52
+ "lib/generators/cancan/permits/templates/permit.rb",
53
+ "spec/active_record/db/database.yml",
54
+ "spec/active_record/migrations/001_create_user.rb",
55
+ "spec/active_record/migrations/002_create_comment.rb",
56
+ "spec/active_record/migrations/003_create_post.rb",
57
+ "spec/active_record/migrations/004_create_article.rb",
58
+ "spec/active_record/models/all_models.rb",
59
+ "spec/active_record/owner_permits_spec.rb",
60
+ "spec/active_record/permits_spec.rb",
61
+ "spec/active_record/spec_helper.rb",
62
+ "spec/data_mapper/models/all_models.rb",
63
+ "spec/data_mapper/owner_permits_spec.rb",
64
+ "spec/data_mapper/permits_spec.rb",
65
+ "spec/data_mapper/spec_helper.rb",
66
+ "spec/fixtures/permits/admin_permit.rb",
67
+ "spec/fixtures/permits/any_permit.rb",
68
+ "spec/fixtures/permits/editor_permit.rb",
69
+ "spec/fixtures/permits/guest_permit.rb",
70
+ "spec/fixtures/permits/super_admin_permit.rb",
71
+ "spec/fixtures/permits/system_permit.rb",
72
+ "spec/generators/cancan/license_generator_spec.rb",
73
+ "spec/generators/cancan/licenses_generator_spec.rb",
74
+ "spec/generators/cancan/permit_generator_spec.rb",
75
+ "spec/generators/cancan/permits_generator_spec.rb",
76
+ "spec/generic/api/basic/config.rb",
77
+ "spec/generic/api/basic/xgroup.rb",
78
+ "spec/generic/api/basic/xgroup_orm.rb",
79
+ "spec/generic/api/owner/config.rb",
80
+ "spec/generic/api/owner/xgroup.rb",
81
+ "spec/generic/api/owner/xgroup_orm.rb",
82
+ "spec/generic/models/all_models.rb",
83
+ "spec/generic/owner_permits_spec.rb",
84
+ "spec/generic/permits_spec.rb",
85
+ "spec/generic/spec_helper.rb",
86
+ "spec/mongo_mapper/models/all_models.rb",
87
+ "spec/mongo_mapper/owner_permits_spec.rb",
88
+ "spec/mongo_mapper/permits_spec.rb",
89
+ "spec/mongo_mapper/spec_helper.rb",
90
+ "spec/mongoid/models/all_models.rb",
91
+ "spec/mongoid/owner_permits_spec.rb",
92
+ "spec/mongoid/permits_spec.rb",
93
+ "spec/mongoid/spec_helper.rb",
94
+ "spec/simply_stored/CouchDB.txt",
95
+ "spec/simply_stored/models/all_models.rb",
96
+ "spec/simply_stored/owner_permits_spec.rb",
97
+ "spec/simply_stored/permits_spec.rb",
98
+ "spec/simply_stored/spec_helper.rb",
99
+ "spec/spec_helper.rb"
95
100
  ]
96
101
  s.homepage = %q{http://github.com/kristianmandrup/cancan-permits}
97
- s.rdoc_options = ["--charset=UTF-8"]
98
102
  s.require_paths = ["lib"]
99
103
  s.rubygems_version = %q{1.3.7}
100
104
  s.summary = %q{Permits for use with CanCan}
101
105
  s.test_files = [
102
106
  "spec/active_record/migrations/001_create_user.rb",
103
- "spec/active_record/migrations/002_create_comment.rb",
104
- "spec/active_record/migrations/003_create_post.rb",
105
- "spec/active_record/migrations/004_create_article.rb",
106
- "spec/active_record/models/all_models.rb",
107
- "spec/active_record/owner_permits_spec.rb",
108
- "spec/active_record/permits_spec.rb",
109
- "spec/active_record/spec_helper.rb",
110
- "spec/data_mapper/models/all_models.rb",
111
- "spec/data_mapper/owner_permits_spec.rb",
112
- "spec/data_mapper/permits_spec.rb",
113
- "spec/data_mapper/spec_helper.rb",
114
- "spec/fixtures/permits/admin_permit.rb",
115
- "spec/fixtures/permits/any_permit.rb",
116
- "spec/fixtures/permits/editor_permit.rb",
117
- "spec/fixtures/permits/guest_permit.rb",
118
- "spec/fixtures/permits/super_admin_permit.rb",
119
- "spec/fixtures/permits/system_permit.rb",
120
- "spec/generators/cancan/licenses_generator_spec.rb",
121
- "spec/generators/cancan/permits_generator_spec.rb",
122
- "spec/generic/api/basic/config.rb",
123
- "spec/generic/api/basic/xgroup.rb",
124
- "spec/generic/api/basic/xgroup_orm.rb",
125
- "spec/generic/api/owner/config.rb",
126
- "spec/generic/api/owner/xgroup.rb",
127
- "spec/generic/api/owner/xgroup_orm.rb",
128
- "spec/generic/models/all_models.rb",
129
- "spec/generic/owner_permits_spec.rb",
130
- "spec/generic/permits_spec.rb",
131
- "spec/generic/spec_helper.rb",
132
- "spec/mongo_mapper/models/all_models.rb",
133
- "spec/mongo_mapper/owner_permits_spec.rb",
134
- "spec/mongo_mapper/permits_spec.rb",
135
- "spec/mongo_mapper/spec_helper.rb",
136
- "spec/mongoid/models/all_models.rb",
137
- "spec/mongoid/owner_permits_spec.rb",
138
- "spec/mongoid/permits_spec.rb",
139
- "spec/mongoid/spec_helper.rb",
140
- "spec/simply_stored/models/all_models.rb",
141
- "spec/simply_stored/owner_permits_spec.rb",
142
- "spec/simply_stored/permits_spec.rb",
143
- "spec/simply_stored/spec_helper.rb",
144
- "spec/spec_helper.rb"
107
+ "spec/active_record/migrations/002_create_comment.rb",
108
+ "spec/active_record/migrations/003_create_post.rb",
109
+ "spec/active_record/migrations/004_create_article.rb",
110
+ "spec/active_record/models/all_models.rb",
111
+ "spec/active_record/owner_permits_spec.rb",
112
+ "spec/active_record/permits_spec.rb",
113
+ "spec/active_record/spec_helper.rb",
114
+ "spec/data_mapper/models/all_models.rb",
115
+ "spec/data_mapper/owner_permits_spec.rb",
116
+ "spec/data_mapper/permits_spec.rb",
117
+ "spec/data_mapper/spec_helper.rb",
118
+ "spec/fixtures/permits/admin_permit.rb",
119
+ "spec/fixtures/permits/any_permit.rb",
120
+ "spec/fixtures/permits/editor_permit.rb",
121
+ "spec/fixtures/permits/guest_permit.rb",
122
+ "spec/fixtures/permits/super_admin_permit.rb",
123
+ "spec/fixtures/permits/system_permit.rb",
124
+ "spec/generators/cancan/license_generator_spec.rb",
125
+ "spec/generators/cancan/licenses_generator_spec.rb",
126
+ "spec/generators/cancan/permit_generator_spec.rb",
127
+ "spec/generators/cancan/permits_generator_spec.rb",
128
+ "spec/generic/api/basic/config.rb",
129
+ "spec/generic/api/basic/xgroup.rb",
130
+ "spec/generic/api/basic/xgroup_orm.rb",
131
+ "spec/generic/api/owner/config.rb",
132
+ "spec/generic/api/owner/xgroup.rb",
133
+ "spec/generic/api/owner/xgroup_orm.rb",
134
+ "spec/generic/models/all_models.rb",
135
+ "spec/generic/owner_permits_spec.rb",
136
+ "spec/generic/permits_spec.rb",
137
+ "spec/generic/spec_helper.rb",
138
+ "spec/mongo_mapper/models/all_models.rb",
139
+ "spec/mongo_mapper/owner_permits_spec.rb",
140
+ "spec/mongo_mapper/permits_spec.rb",
141
+ "spec/mongo_mapper/spec_helper.rb",
142
+ "spec/mongoid/models/all_models.rb",
143
+ "spec/mongoid/owner_permits_spec.rb",
144
+ "spec/mongoid/permits_spec.rb",
145
+ "spec/mongoid/spec_helper.rb",
146
+ "spec/simply_stored/models/all_models.rb",
147
+ "spec/simply_stored/owner_permits_spec.rb",
148
+ "spec/simply_stored/permits_spec.rb",
149
+ "spec/simply_stored/spec_helper.rb",
150
+ "spec/spec_helper.rb"
145
151
  ]
146
152
 
147
153
  if s.respond_to? :specification_version then
@@ -150,8 +156,8 @@ Gem::Specification.new do |s|
150
156
 
151
157
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
152
158
  s.add_development_dependency(%q<rspec>, [">= 2.0.1"])
153
- s.add_development_dependency(%q<code-spec>, ["~> 0.2.5"])
154
- s.add_development_dependency(%q<rails-app-spec>, ["~> 0.3.0"])
159
+ s.add_development_dependency(%q<code-spec>, ["~> 0.2.9"])
160
+ s.add_development_dependency(%q<rails-app-spec>, ["~> 0.3.1"])
155
161
  s.add_runtime_dependency(%q<cancan>, ["~> 1.4.1"])
156
162
  s.add_runtime_dependency(%q<require_all>, ["~> 1.2.0"])
157
163
  s.add_runtime_dependency(%q<sugar-high>, ["~> 0.3.0"])
@@ -160,8 +166,8 @@ Gem::Specification.new do |s|
160
166
  s.add_runtime_dependency(%q<logging_assist>, [">= 0.1.6"])
161
167
  else
162
168
  s.add_dependency(%q<rspec>, [">= 2.0.1"])
163
- s.add_dependency(%q<code-spec>, ["~> 0.2.5"])
164
- s.add_dependency(%q<rails-app-spec>, ["~> 0.3.0"])
169
+ s.add_dependency(%q<code-spec>, ["~> 0.2.9"])
170
+ s.add_dependency(%q<rails-app-spec>, ["~> 0.3.1"])
165
171
  s.add_dependency(%q<cancan>, ["~> 1.4.1"])
166
172
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
167
173
  s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
@@ -171,8 +177,8 @@ Gem::Specification.new do |s|
171
177
  end
172
178
  else
173
179
  s.add_dependency(%q<rspec>, [">= 2.0.1"])
174
- s.add_dependency(%q<code-spec>, ["~> 0.2.5"])
175
- s.add_dependency(%q<rails-app-spec>, ["~> 0.3.0"])
180
+ s.add_dependency(%q<code-spec>, ["~> 0.2.9"])
181
+ s.add_dependency(%q<rails-app-spec>, ["~> 0.3.1"])
176
182
  s.add_dependency(%q<cancan>, ["~> 1.4.1"])
177
183
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
178
184
  s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
@@ -1,10 +1,11 @@
1
1
  module Permits::Roles
2
2
  def self.available
3
- if Module.const_defined? :User
4
- [:guest, :admin]
5
- #User.defined_roles if User.respond_to? :defined_roles
3
+ if defined? ::Cream
4
+ Cream.available_roles
5
+ elsif defined? ::User
6
+ User.roles
6
7
  else
7
- [:guest, :admin]
8
+ [:admin, :guest]
8
9
  end
9
10
  end
10
11
  end
@@ -0,0 +1,76 @@
1
+ require 'rails/generators/base'
2
+ require 'sugar-high/array'
3
+ require 'active_support/inflector'
4
+ require 'rails3_artifactor'
5
+ require 'logging_assist'
6
+
7
+ module Cancan
8
+ module Generators
9
+ class LicenseGenerator < Rails::Generators::Base
10
+ desc "Creates a License for a Permit in 'app/licenses' with reusable permissions"
11
+
12
+ argument :name, :type => :string, :default => '', :desc => "Name of license"
13
+
14
+ class_option :creates, :type => :array, :default => [], :desc => "Models allowed to create"
15
+ class_option :manages, :type => :array, :default => [], :desc => "Models allowed to manage"
16
+ class_option :reads, :type => :array, :default => [], :desc => "Models allowed to read"
17
+ class_option :owns, :type => :array, :default => [], :desc => "Models allowed to own"
18
+
19
+ class_option :licenses, :type => :array, :default => [], :desc => "Sub licenses"
20
+
21
+ source_root File.dirname(__FILE__) + '/templates'
22
+
23
+ def main_flow
24
+ return if name.empty?
25
+ create_license
26
+ end
27
+
28
+ protected
29
+
30
+ include Rails3::Assist::BasicLogger
31
+
32
+ def creates
33
+ options[:creates]
34
+ end
35
+
36
+ def manages
37
+ options[:manages]
38
+ end
39
+
40
+ def licenses
41
+ options[:licenses]
42
+ end
43
+
44
+ def reads
45
+ options[:reads]
46
+ end
47
+
48
+ def owns
49
+ options[:owns]
50
+ end
51
+
52
+ def create_license
53
+ template "license.rb", "app/licenses/#{name}_license.rb"
54
+ end
55
+
56
+ def enforce_logic
57
+ [:creates, :manages, :owns, :reads].map do |a|
58
+ options[a].map do |c|
59
+ "can(:#{a.to_s.singularize}, #{act_model(c)})"
60
+ end.join("\n ")
61
+ end.join("\n ")
62
+ end
63
+
64
+ def act_model name
65
+ return ':all' if name == 'all'
66
+ name.camelize
67
+ end
68
+
69
+ def license_logic
70
+ return '' if licenses.empty?
71
+ ls = licenses.map{|c| ":#{c}"}.join(", ")
72
+ "licenses #{ls}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,10 @@
1
+ class <%= name.to_s.camelize %>License < License::Base
2
+ def initialize name
3
+ super
4
+ end
5
+
6
+ def enforce!
7
+ <%= enforce_logic.strip %>
8
+ <%= license_logic %>
9
+ end
10
+ end
@@ -7,7 +7,7 @@ require 'logging_assist'
7
7
  module Cancan
8
8
  module Generators
9
9
  class LicensesGenerator < Rails::Generators::Base
10
- desc "Creates Licenses for use with CanCan and Permits"
10
+ desc "Creates Licenses for use with CanCan Permits"
11
11
 
12
12
  argument :licenses, :type => :array, :default => [], :desc => "Licenses"
13
13
  class_option :default_licenses, :type => :boolean, :default => true, :desc => "Create default exemplar licenses"
@@ -27,9 +27,6 @@ module Cancan
27
27
  protected
28
28
 
29
29
  include Rails3::Assist::BasicLogger
30
- extend Rails3::Assist::UseMacro
31
-
32
- use_helpers :app, :file, :special
33
30
 
34
31
  attr_accessor :license_name
35
32
 
@@ -47,7 +44,7 @@ module Cancan
47
44
 
48
45
  def template_license name
49
46
  self.license_name = name
50
- template "license.rb", "app/licenses/#{name}_license.rb"
47
+ template "base_license.rb", "app/licenses/#{name}_license.rb"
51
48
  end
52
49
 
53
50
  def default_license name
@@ -0,0 +1,76 @@
1
+ require 'rails/generators/base'
2
+ require 'sugar-high/array'
3
+ require 'active_support/inflector'
4
+ require 'rails3_artifactor'
5
+ require 'logging_assist'
6
+
7
+ module Cancan
8
+ module Generators
9
+ class PermitGenerator < Rails::Generators::Base
10
+ desc "Creates a Permit for a role in 'app/permits' with specific permissions and/or licenses"
11
+
12
+ argument :role, :type => :string, :default => '', :desc => "Role to create permit for"
13
+
14
+ class_option :licenses, :type => :array, :default => [], :desc => "Licenses to use in Permit"
15
+
16
+ class_option :creates, :type => :array, :default => [], :desc => "Models allowed to create"
17
+ class_option :manages, :type => :array, :default => [], :desc => "Models allowed to manage"
18
+ class_option :reads, :type => :array, :default => [], :desc => "Models allowed to read"
19
+ class_option :owns, :type => :array, :default => [], :desc => "Models allowed to own"
20
+
21
+ source_root File.dirname(__FILE__) + '/templates'
22
+
23
+ def main_flow
24
+ return if role.empty?
25
+ template_permit
26
+ end
27
+
28
+ protected
29
+
30
+ include Rails3::Assist::BasicLogger
31
+
32
+ def creates
33
+ options[:creates]
34
+ end
35
+
36
+ def manages
37
+ options[:manages]
38
+ end
39
+
40
+ def licenses
41
+ options[:licenses]
42
+ end
43
+
44
+ def reads
45
+ options[:reads]
46
+ end
47
+
48
+ def owns
49
+ options[:owns]
50
+ end
51
+
52
+ def template_permit
53
+ template "role_permit.rb", "app/permits/#{role}_permit.rb"
54
+ end
55
+
56
+ def act_model name
57
+ return ':all' if name == 'all'
58
+ name.camelize
59
+ end
60
+
61
+ def permit_logic
62
+ [:creates, :manages, :owns, :reads].map do |a|
63
+ options[a].map do |c|
64
+ "can(:#{a.to_s.singularize}, #{act_model(c)})"
65
+ end.join("\n ")
66
+ end.join("\n ")
67
+ end
68
+
69
+ def license_logic
70
+ return '' if licenses.empty?
71
+ ls = licenses.map{|c| ":#{c}"}.join(", ")
72
+ "licenses #{ls}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,12 @@
1
+ class <%= role.to_s.camelize %>Permit < Permit::Base
2
+ def initialize(ability, options = {})
3
+ super
4
+ end
5
+
6
+ def permit?(user, options = {})
7
+ super
8
+ return if !role_match? user
9
+ <%= permit_logic.strip %>
10
+ <%= license_logic %>
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+ require 'generator-spec'
3
+
4
+ require_generator :cancan => :license
5
+
6
+ RSpec::Generator.configure do |config|
7
+ config.debug = true
8
+ config.remove_temp_dir = true #false
9
+ config.default_rails_root(__FILE__)
10
+ config.lib = File.dirname(__FILE__) + '/../lib'
11
+ config.logger = :stdout # :file
12
+ end
13
+
14
+
15
+ describe 'License generator' do
16
+ use_helpers :special, :file
17
+
18
+ setup_generator :license do
19
+ tests Cancan::Generators::LicenseGenerator
20
+ end
21
+
22
+ describe "License: Profile Administration" do
23
+ before :each do
24
+ @generator = with_generator do |g|
25
+ g.run_generator "profile_administration --owns article --reads all --licenses blogging".args
26
+ end
27
+ end
28
+
29
+ it "should have created license files" do
30
+ @generator.should have_license_file :profile_administration
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+ require 'generator-spec'
3
+
4
+ require_generator :cancan => :permit
5
+
6
+ RSpec::Generator.configure do |config|
7
+ config.debug = true
8
+ config.remove_temp_dir = true #false
9
+ config.default_rails_root(__FILE__)
10
+ config.lib = File.dirname(__FILE__) + '/../lib'
11
+ config.logger = :stdout # :file
12
+ end
13
+
14
+
15
+ describe 'Permit generator' do
16
+ use_helpers :special, :file
17
+
18
+ setup_generator :permit do
19
+ tests Cancan::Generators::PermitGenerator
20
+ end
21
+
22
+ describe 'Run Permit generator' do
23
+ before :each do
24
+ @generator = with_generator do |g|
25
+ g.run_generator "admin --owns article --reads all --licenses blogging user_admin".args
26
+ end
27
+ end
28
+
29
+ describe 'result of running Permit generator' do
30
+ it "should create Admin permit" do
31
+ @generator.should generate_permit :admin
32
+ end
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 4
9
+ version: 0.3.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kristian Mandrup
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-25 00:00:00 +01:00
17
+ date: 2010-11-28 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,8 +43,8 @@ dependencies:
43
43
  segments:
44
44
  - 0
45
45
  - 2
46
- - 5
47
- version: 0.2.5
46
+ - 9
47
+ version: 0.2.9
48
48
  type: :development
49
49
  version_requirements: *id002
50
50
  - !ruby/object:Gem::Dependency
@@ -58,8 +58,8 @@ dependencies:
58
58
  segments:
59
59
  - 0
60
60
  - 3
61
- - 0
62
- version: 0.3.0
61
+ - 1
62
+ version: 0.3.1
63
63
  type: :development
64
64
  version_requirements: *id003
65
65
  - !ruby/object:Gem::Dependency
@@ -163,7 +163,6 @@ extra_rdoc_files:
163
163
  - README.markdown
164
164
  files:
165
165
  - .document
166
- - .gitignore
167
166
  - .rspec
168
167
  - Changelog.txt
169
168
  - LICENSE
@@ -186,10 +185,14 @@ files:
186
185
  - lib/cancan-permits/rspec/matchers/have_license.rb
187
186
  - lib/cancan-permits/rspec/matchers/have_license_class.rb
188
187
  - lib/cancan-permits/rspec/matchers/have_license_file.rb
188
+ - lib/generators/cancan/license/license_generator.rb
189
+ - lib/generators/cancan/license/templates/license.rb
189
190
  - lib/generators/cancan/licenses/licenses_generator.rb
191
+ - lib/generators/cancan/licenses/templates/base_license.rb
190
192
  - lib/generators/cancan/licenses/templates/blogging_license.rb
191
- - lib/generators/cancan/licenses/templates/license.rb
192
193
  - lib/generators/cancan/licenses/templates/user_admin_license.rb
194
+ - lib/generators/cancan/permit/permit_generator.rb
195
+ - lib/generators/cancan/permit/templates/role_permit.rb
193
196
  - lib/generators/cancan/permits/permits_generator.rb
194
197
  - lib/generators/cancan/permits/templates/permit.rb
195
198
  - spec/active_record/db/database.yml
@@ -211,7 +214,9 @@ files:
211
214
  - spec/fixtures/permits/guest_permit.rb
212
215
  - spec/fixtures/permits/super_admin_permit.rb
213
216
  - spec/fixtures/permits/system_permit.rb
217
+ - spec/generators/cancan/license_generator_spec.rb
214
218
  - spec/generators/cancan/licenses_generator_spec.rb
219
+ - spec/generators/cancan/permit_generator_spec.rb
215
220
  - spec/generators/cancan/permits_generator_spec.rb
216
221
  - spec/generic/api/basic/config.rb
217
222
  - spec/generic/api/basic/xgroup.rb
@@ -242,8 +247,8 @@ homepage: http://github.com/kristianmandrup/cancan-permits
242
247
  licenses: []
243
248
 
244
249
  post_install_message:
245
- rdoc_options:
246
- - --charset=UTF-8
250
+ rdoc_options: []
251
+
247
252
  require_paths:
248
253
  - lib
249
254
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -288,7 +293,9 @@ test_files:
288
293
  - spec/fixtures/permits/guest_permit.rb
289
294
  - spec/fixtures/permits/super_admin_permit.rb
290
295
  - spec/fixtures/permits/system_permit.rb
296
+ - spec/generators/cancan/license_generator_spec.rb
291
297
  - spec/generators/cancan/licenses_generator_spec.rb
298
+ - spec/generators/cancan/permit_generator_spec.rb
292
299
  - spec/generators/cancan/permits_generator_spec.rb
293
300
  - spec/generic/api/basic/config.rb
294
301
  - spec/generic/api/basic/xgroup.rb
data/.gitignore DELETED
@@ -1,23 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- *.orig
22
-
23
- ## PROJECT::SPECIFIC