cancan-permits 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -2,17 +2,6 @@
2
2
 
3
3
  Role specific Permits for use with [CanCan](http://github.com/ryanb/cancan) permission system.
4
4
 
5
- ## Changes
6
-
7
- See Changelog.txt (Major updates as per Nov 24. 2010)
8
-
9
- Nov 28:
10
- Added Generators to create individual Permit and License!
11
-
12
- Nov 29:
13
- Added ability to specify YAML files with configurations for Permits, Licenses and even Permissions for individual users.
14
- Thanks to 'ticktricktrack' for the request and suggestion. (I hope you can use this and move on from here...)
15
-
16
5
  ## Install
17
6
 
18
7
  <code>gem install cancan-permits</code>
@@ -31,58 +20,76 @@ See [CanCan permits demo app](https://github.com/kristianmandrup/cancan-permits-
31
20
 
32
21
  ## Rails 3 configuration
33
22
 
23
+ Note: This description does not apply to how CanCan-permits is used with [Cream](https://github.com/kristianmandrup/cream)
24
+
34
25
  Create a rails initializer with the following code:
35
- <code>
36
- module Cream
37
- # specify all roles available in your app!
38
- def self.available_roles
39
- [:guest, :admin]
40
- end
41
- end
42
- </code>
43
26
 
44
- Modify the User model in 'models/user.rb' (optional)
45
- <code>
46
- class User
47
- def self.roles
48
- Cream.available_roles
49
- end
50
-
51
- def has_role? role
52
- (self.role || 'guest').to_sym == role.to_sym
53
- end
27
+ <pre>module Cream
28
+ # specify all roles available in your app!
29
+ def self.available_roles
30
+ [:guest, :admin]
54
31
  end
55
- </code>
32
+ end
33
+ </pre>
34
+
35
+ Modify the User model in 'models/user.rb' (optional)
56
36
 
57
- ### Load Permissions from yml files
37
+ <pre>class User
38
+ def self.roles
39
+ Cream.available_roles
40
+ end
41
+
42
+ def has_role? role
43
+ (self.role || 'guest').to_sym == role.to_sym
44
+ end
45
+ end
46
+ </pre>
58
47
 
59
- *Individual user permissions:*
60
- - config/user_permissions.yml
48
+ ## Load Permissions from yaml files
61
49
 
62
- Each key at the top level is expected to match an email value for an existing user.
50
+ Permissions can be defined in yaml files in the config directory of your Rails app.
51
+ These permissions will then be applied at the appropriate point when calculation permissions of the user.
63
52
 
64
- Example yml config file:
65
- <code>
66
- abc@mail.ru:
53
+ * Individual user permissions
54
+ * Permits
55
+ * Licenses
56
+
57
+ ### Permission editor
58
+
59
+ A simple [Permits editor](https://github.com/kristianmandrup/permits_editor) is available. This is a Rails 3 app which provides a web interface to
60
+ edit the permits config files for: user permissions, permits and licenses.
61
+
62
+ I would like to have this editor refactored into an engine and later into a mountable app so that this administrative interface can easily be integrated into a Cream app.
63
+
64
+ _You are most welcome to help in this effort ;)_
65
+
66
+ ### Individual user permissions
67
+
68
+ You can define individual user permissions in a yaml file.
69
+
70
+ YAML file: _config/user_permissions.yml_
71
+
72
+ Each key at the top level is expected to match an email value for a user.
73
+
74
+ Example yaml config file:
75
+ <pre>abc@mail.ru:
67
76
  can:
68
77
  update: [Comment, Fruit, Car, Friendship]
69
78
  manage:
70
79
  - Article
71
80
  owns:
72
81
  - User
73
- mike.shedlock.com:
82
+ mike.shedlock@acc.com:
74
83
  can:
75
84
  read:
76
85
  - all
77
86
  cannot:
78
87
  update:
79
88
  - Post
80
- </code>
81
-
82
- Usage in a permit
89
+ </pre>
83
90
 
84
- <code>
85
- class AdminPermit < Permit::Base
91
+ Loading YAML user_permits file in a Permit:
92
+ <pre>class AdminPermit < Permit::Base
86
93
  def initialize(ability, options = {})
87
94
  super
88
95
  end
@@ -91,22 +98,23 @@ class AdminPermit < Permit::Base
91
98
  super
92
99
  return if !role_match? user
93
100
  can :manage, :all
101
+
94
102
  load_rules user
95
103
  end
96
104
  end
97
- </code>
105
+ </pre>
106
+
107
+ The call to #load_rules will call both _#load_user_roles_ and _#load_role_rules_. Hence by default it applies both the _user_permits_ and _permits_ config files.
108
+ If you want, you can call these methods individually in case only want to apply one set of rules.
98
109
 
99
- The call to #load_rules will call both #load_user_roles and #load_role_rules.
100
- If you want you can call these methods individually, fx if you only want to apply one set of rules.
110
+ ### Permit rules
101
111
 
102
- *Permit rules:*
103
- - config/permits.yml
112
+ YAML file: _config/permits.yml_
104
113
 
105
114
  Each key at the top level is expected to match a permit/role name.
106
115
 
107
116
  Example yml config file:
108
- <code>
109
- admin:
117
+ <pre>admin:
110
118
  can:
111
119
  manage:
112
120
  - Article
@@ -118,33 +126,19 @@ guest:
118
126
  cannot:
119
127
  manage:
120
128
  - User
121
- </code>
129
+ </pre>
122
130
 
123
- Usage in a license
131
+ As you can see
124
132
 
125
- <code>
126
- class GuestPermit < Permit::Base
127
- def initialize(ability, options = {})
128
- super
129
- end
133
+ ### License permissions
130
134
 
131
- def permit?(user, options = {})
132
- super
133
- return if !role_match? user
134
- can :manage, :all
135
- load_rules user
136
- end
137
- end
138
- </code>
139
-
140
- *License permissions:*
141
- - config/licenses.yml
135
+ YAML file: _config/licenses.yml_
142
136
 
143
137
  Each key at the top level is expected to match a license name.
144
138
 
145
139
  Example yml config file:
146
- <code>
147
- blogging:
140
+
141
+ <pre>blogging:
148
142
  can:
149
143
  manage:
150
144
  - Article
@@ -156,25 +150,24 @@ admin:
156
150
  cannot:
157
151
  manage:
158
152
  - User
159
- </code>
160
-
161
- Usage in a license
153
+ </pre>
162
154
 
163
- <code>
164
- class UserAdminLicense < License::Base
155
+ Usage in a license:
156
+ <pre>class UserAdminLicense < License::Base
165
157
  def initialize name
166
158
  super
167
159
  end
168
160
 
169
161
  def enforce!
170
162
  can(:manage, User)
163
+
171
164
  load_rules
172
165
  end
173
- </code>
166
+ </pre>
174
167
 
175
168
  ### User Roles
176
169
 
177
- CanCan permits requires that you have some kind of Role system in place and that User#has_role? uses this Role system.
170
+ _CanCan permits_ requires that you have some kind of Role system in place and that User#has_role? uses this Role system.
178
171
  You can either add a 'role' field directly to User or fx use a [Roles Generic ](https://github.com/kristianmandrup/roles_generic) role strategy.
179
172
 
180
173
  ## Usage
@@ -188,39 +181,42 @@ To add Roles to your app, you might consider using a *roles* gem such as [Roles
188
181
 
189
182
  ### Define which Roles are available
190
183
 
191
- You can override the default configuration here:
192
- <pre>
193
- module Permits::Roles
194
- def self.available
195
- if defined? ::Cream
196
- Cream.available_roles
197
- elsif defined? ::User
198
- User.roles
199
- else
200
- [:admin, :guest]
201
- end
184
+ Default configuration:
185
+ <pre>module Permits::Roles
186
+ def self.available
187
+ if defined? ::Cream
188
+ Cream.available_roles
189
+ elsif defined? ::User
190
+ User.roles
191
+ else
192
+ [:admin, :guest]
202
193
  end
203
194
  end
195
+ end
204
196
  </pre>
205
197
 
198
+ _CanCan permits_ will first try to assume it is used with Cream. If not it will fallback to try and get the roles from User#roles.
199
+ If all else fails, it will assume only the :guest and :admin roles are available.
200
+
201
+ You can always monkeypatch this configuration implementation to suit your own needs.
202
+
206
203
  ### Define a Permit for each Role.
207
204
 
208
- _Note:_ You might consider using the Permits generator in order to generate your permits for you (see below)
205
+ You can use the _Permits generator_ to generate your permits. Permits should be placed in the app/permits folder.
209
206
 
210
207
  Permit example:
211
- <pre><code>
212
- class AdminPermit - Permit::Base
213
- def initialize(ability, options = {})
214
- super
215
- end
216
-
217
- def permit?(user, options = {})
218
- super
219
- return if !role_match? user
220
- can :manage, :all
221
- end
208
+ <pre>class AdminPermit < Permit::Base
209
+ def initialize(ability, options = {})
210
+ super
222
211
  end
223
- </code></pre>
212
+
213
+ def permit?(user, options = {})
214
+ super
215
+ return if !role_match? user
216
+ can :manage, :all
217
+ end
218
+ end
219
+ </pre>
224
220
 
225
221
  ## Special Permits
226
222
 
@@ -232,9 +228,7 @@ The Any permit, can be used to set permissions that should hold true for a user
232
228
  F.ex, maybe in your app, any user should be able to read comments, articles and posts:
233
229
 
234
230
  For this to hold true, put the following permit logic in your Any permit.
235
- <pre>
236
- can :read, [Comment, Article, Post]
237
- </pre>
231
+ <pre>can :read, [Comment, Article, Post]</pre>
238
232
 
239
233
  ### System permit
240
234
 
@@ -242,9 +236,10 @@ The System permit is run before any of the other permits. This gives you a chanc
242
236
  By returning a value of :break you force a break-out from the permission flow, ensuring none of the other permits are run.
243
237
 
244
238
  Example:
245
- The system permit can be used to allow management of all resources given the request is from localhost (which usually means "in development mode"). By default this logic is setup and ready to go.
239
+ The system permit can be used to allow management of all resources when the request is from localhost (which usually means "in development mode").
240
+ By default this logic is setup and ready to go.
246
241
 
247
- You can be enable this simply by setting the following class instance variable:
242
+ You can configure this simply by setting the following boolean class variable:
248
243
 
249
244
  <code>Permits::Configuration.localhost_manager = true</code>
250
245
 
@@ -254,31 +249,27 @@ By default the permits for the roles System and Guest are also generated.
254
249
 
255
250
  ### Licenses
256
251
 
257
- Permits also supports creation more fine-grained permits through the use of Licenses.
258
- Licenses are a way to group logical fragments of permission statements to be reused across multiple permits.
259
- The generator will create a licenses.rb file in the permits folder where you can put your licenses. For more complex scenarios, you might want to have a separate
260
- licenses subfolder where you put your license files.
252
+ Permits support creation of more fine-grained permits through the use of _Licenses_.
253
+ Licenses are a way to group logical fragments of permission statements to be reused across multiple Permits.
261
254
 
262
- License example:
263
- <pre><code>
264
- class BloggingLicense - License::Base
265
- def initialize name
266
- super
267
- end
255
+ You can use the _License generator_ to generate your licenses. Lincenses should be placed in the _app/licenses_ folder.
268
256
 
269
- def enforce!
270
- can(:read, Blog)
271
- can(:create, Post)
272
- owns(user, Post)
273
- end
274
- end
275
- </code></pre>
257
+ License example:
258
+ <pre>class BloggingLicense < License::Base
259
+ def initialize name
260
+ super
261
+ end
276
262
 
277
- Note: for some reason I had problems with markdown parsing the inheritance symbol "<" :(
263
+ def enforce!
264
+ can(:read, Blog)
265
+ can(:create, Post)
266
+ owns(user, Post)
267
+ end
268
+ end
269
+ </pre>
278
270
 
279
271
  Usage example:
280
- <pre><code>
281
- class GuestPermit - Permit::Base
272
+ <pre>class GuestPermit < Permit::Base
282
273
  def initialize(ability, options = {})
283
274
  super
284
275
  end
@@ -291,9 +282,9 @@ Usage example:
291
282
  end
292
283
  end
293
284
  end
294
- </code></pre>
285
+ </pre>
295
286
 
296
- By convention the permits system will try to find a license named UserAdminLicense and BloggingLicense in this example and call enforce! on each license.
287
+ The permits system will try to find a license named UserAdminLicense and BloggingLicense in this example and then call _#enforce!_ on each license.
297
288
 
298
289
  ## ORMs
299
290
 
@@ -303,13 +294,19 @@ The easiest option is to directly set the orm as a class variable. An appropriat
303
294
  Permits::Ability.orm = :data_mapper
304
295
  </pre>
305
296
 
306
- Alternatively set it for the Ability instance for more fine grained control
307
- <pre>
308
- ability = Permits::Ability.new(@editor, :strategy => :string)
309
- </pre>
310
-
311
297
  The ORMs currently supported (and tested) are :active_record, :data_mapper, :mongoid, :mongo_mapper
312
298
 
299
+ For more fine grained control, you can set a :strategy option directly on the Ability instance. This way the ownership strategy is set explicitly.
300
+ The current valid values are :default and :string.
301
+
302
+ The strategy option :string can be used for most ORMs. Setting orm to :active_record or :generic makes use of the :default strategy.
303
+ All the other ORMs use the :string ownership strategy,
304
+
305
+ Note: You can dive into the code and implement your own strategy if needed.
306
+
307
+ Setting the ownership strategy directly:
308
+ <pre>ability = Permits::Ability.new(@editor, :strategy => :string)</pre>
309
+
313
310
  ## Advanced Permit options
314
311
 
315
312
  Note that the options hash (second argument of the initializer) can also be used to pass custom data for the permission system to use to determine whether an action
@@ -317,26 +314,23 @@ should be permitted. An example use of this is to pass in the HTTP request objec
317
314
 
318
315
  The ability would most likely be configured with the current request in a view helper or directly from within the controller.
319
316
 
320
- <code>
321
- editor_ability = Permits::Ability.new(@editor, :request => request)
322
- </code>
317
+ <code>editor_ability = Permits::Ability.new(@editor, :request => request)</code>
323
318
 
324
- A Permit can then use this information
325
-
326
- <code>
327
- def permit?(user, options = {})
328
- request = options[:request]
329
- if request && request.host.localhost? && localhost_manager?
330
- can(:manage, :all)
331
- return :break
332
- end
333
- end
334
- </code>
319
+ A Permit can then use this extra information
335
320
 
336
- Now, if a request object is present and the host is 'localhost' and Permits has been configured to allow localhost to manage objects, then:
337
- The user is allowed to manage all objects and no other Permits are evaluated (to avoid them overriding this full right permission).
321
+ Advanced #permit? functionality:
322
+ <pre>def permit?(user, options = {})
323
+ request = options[:request]
324
+ if request && request.host.localhost? && localhost_manager?
325
+ can(:manage, :all)
326
+ return :break
327
+ end
328
+ end
329
+ </pre>
330
+
331
+ ### Global manage permission for localhost
338
332
 
339
- In the code above, the built in <code>#localhost_manager?</code> method is used.
333
+ The Permits system allows a global setting in order to allow localhost to manage all objects. This can be useful in development or administration mode.
340
334
 
341
335
  To configure permits to allow localhost to manage objects:
342
336
  <code>
@@ -345,17 +339,28 @@ To configure permits to allow localhost to manage objects:
345
339
 
346
340
  Please provide suggestions and feedback on how to improve this :)
347
341
 
342
+ Assuming the following:
343
+ - a request object is present
344
+ - the host of the request is 'localhost'
345
+ - Permits::Configuration has been configured to allow localhost to manage objects:
346
+
347
+ Then the user is allowed to manage all objects and no other Permits will be evaluated to restrict further.
348
+
349
+ Note: In the code above, the built in <code>#localhost_manager?</code> method is used.
350
+
348
351
  ## Generators
349
352
 
350
353
  The gem comes with the following generators
351
354
 
352
- * cancan:permits
353
- * cancan:permit
354
- * cancan:licenses
355
- * cancan:license
355
+ * cancan:permits - generate multiple permits
356
+ * cancan:permit - generate a single permit
357
+ * cancan:licenses - generate multiple licenses
358
+ * cancan:license - generate a single license
356
359
 
357
360
  ## Permits Generator
358
361
 
362
+ Generates one or more permits in _app/permits_
363
+
359
364
  Options
360
365
  * --orm : The ORM to use (active_record, data_mapper, mongoid, mongo_mapper) - creates a Rails initializer
361
366
  * --initializer : A Rails 3 initializer file for Permits is generated by default. Use --no-initializer option to disable this
@@ -366,15 +371,18 @@ Options
366
371
 
367
372
  ### What does the generator generate?
368
373
 
369
- To get an understanding of what the generator generates for a Rails 3 application, try to run the spec permit_generator_spec.rb with rspec 2 as follows:
370
-
371
- <code>$ rspec spec/generators/cancan/permits_generator_spec.rb</code>
374
+ To get an understanding of what the generator generates for a Rails 3 application, try to run the spec _permit_generator_spec.rb_ with _RSpec 2_ as follows:
372
375
 
373
- In the file <code>permits_generator_spec.rb</code> make the following change <code>config.remove_temp_dir = false</code>
376
+ In the file _permits_generator_spec.rb_ make the following change <code>config.remove_temp_dir = false</code>
374
377
  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.
375
378
 
379
+ Now run the generator spec to see the result:
380
+ <code>$ rspec spec/generators/cancan/permits_generator_spec.rb</code>
381
+
376
382
  ## Licenses Generator
377
383
 
384
+ Generates one or more licenses in _app/licenses_
385
+
378
386
  Options
379
387
  * --licenses : The licenses to generate; default UserAdmin and Blogging licenses are generated
380
388
  * --default-licenses : By default exemplar licenses are generated. Use --no-default-licenses option to disable this
@@ -395,15 +403,19 @@ Create both specific and default licenses:
395
403
 
396
404
  ### What does the generator generate?
397
405
 
398
- To get an understanding of what the generator generates for a Rails 3 application, try to run the spec permit_generator_spec.rb with rspec 2 as follows:
406
+ To get an understanding of what the generator generates for a Rails 3 application, try to run the spec _licenses_generator_spec.rb_ with rspec 2 as follows:
399
407
 
408
+ In the file _licenses_generator_spec.rb_ make the following change <code>config.remove_temp_dir = false</code>
409
+ 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.
410
+
411
+ Now run the generator spec to see the result:
400
412
  <code>$ rspec spec/generators/cancan/licenses_generator_spec.rb</code>
401
413
 
402
- In the file <code>licenses_generator_spec.rb</code> make the following change <code>config.remove_temp_dir = false</code>
403
- 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.
404
414
 
405
415
  ## License Generator
406
416
 
417
+ Generates a single license in _app/licenses_
418
+
407
419
  <code>rails g cancan:license [NAME]</code>
408
420
 
409
421
  Options
@@ -420,7 +432,7 @@ Generate licenses:
420
432
 
421
433
  ## Permit Generator
422
434
 
423
- Generate a named permit
435
+ Generates a single license in _app/permits_
424
436
 
425
437
  <code>rails g cancan:permit [ROLE]</code>
426
438
 
@@ -436,9 +448,9 @@ Generate licenses:
436
448
 
437
449
  <code>$ rails g cancan:permit editor --owns article post --read blog --licenses blog_editing</code>
438
450
 
439
- # TODO ?
451
+ # TODO
440
452
 
441
- 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.
453
+ The Permits generator should attempt to attempt to uncover which roles are currently defined as available to the system, trying Cream#available_roles and then User#roles. It could then generate permits for those roles. Any roles specified in the --roles option should be merged with the roles available in the app.
442
454
 
443
455
  ## Note on Patches/Pull Requests
444
456
 
data/Rakefile CHANGED
@@ -15,7 +15,9 @@ begin
15
15
  gem.add_dependency 'require_all', "~> 1.2.0"
16
16
  gem.add_dependency 'sugar-high', "~> 0.3.0"
17
17
  gem.add_dependency 'rails3_artifactor', "~> 0.3.1"
18
+ gem.add_dependency 'activemodel', ">= 3.0.1"
18
19
  gem.add_dependency 'activesupport', ">= 3.0.1"
20
+ gem.add_dependency 'activeresource', ">= 3.0.1"
19
21
  gem.add_dependency 'logging_assist', ">= 0.1.6"
20
22
 
21
23
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.6
1
+ 0.3.7
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cancan-permits}
8
- s.version = "0.3.6"
8
+ s.version = "0.3.7"
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-30}
12
+ s.date = %q{2010-12-24}
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 = [
@@ -62,7 +62,9 @@ Gem::Specification.new do |s|
62
62
  "spec/active_record/owner_permits_spec.rb",
63
63
  "spec/active_record/permits_spec.rb",
64
64
  "spec/active_record/spec_helper.rb",
65
+ "spec/cancan-permits/license/save_license_spec.rb",
65
66
  "spec/cancan-permits/loader/config/licenses.yml",
67
+ "spec/cancan-permits/loader/config/permits.yml",
66
68
  "spec/cancan-permits/loader/config/user_permissions.yml",
67
69
  "spec/cancan-permits/loader/license_loader_spec.rb",
68
70
  "spec/cancan-permits/loader/permits_loader_spec.rb",
@@ -119,6 +121,7 @@ Gem::Specification.new do |s|
119
121
  "spec/active_record/owner_permits_spec.rb",
120
122
  "spec/active_record/permits_spec.rb",
121
123
  "spec/active_record/spec_helper.rb",
124
+ "spec/cancan-permits/license/save_license_spec.rb",
122
125
  "spec/cancan-permits/loader/license_loader_spec.rb",
123
126
  "spec/cancan-permits/loader/permits_loader_spec.rb",
124
127
  "spec/cancan-permits/loader/user_permissions_loader.rb",
@@ -173,7 +176,9 @@ Gem::Specification.new do |s|
173
176
  s.add_runtime_dependency(%q<require_all>, ["~> 1.2.0"])
174
177
  s.add_runtime_dependency(%q<sugar-high>, ["~> 0.3.0"])
175
178
  s.add_runtime_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
179
+ s.add_runtime_dependency(%q<activemodel>, [">= 3.0.1"])
176
180
  s.add_runtime_dependency(%q<activesupport>, [">= 3.0.1"])
181
+ s.add_runtime_dependency(%q<activeresource>, [">= 3.0.1"])
177
182
  s.add_runtime_dependency(%q<logging_assist>, [">= 0.1.6"])
178
183
  else
179
184
  s.add_dependency(%q<rspec>, [">= 2.0.1"])
@@ -183,7 +188,9 @@ Gem::Specification.new do |s|
183
188
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
184
189
  s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
185
190
  s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
191
+ s.add_dependency(%q<activemodel>, [">= 3.0.1"])
186
192
  s.add_dependency(%q<activesupport>, [">= 3.0.1"])
193
+ s.add_dependency(%q<activeresource>, [">= 3.0.1"])
187
194
  s.add_dependency(%q<logging_assist>, [">= 0.1.6"])
188
195
  end
189
196
  else
@@ -194,7 +201,9 @@ Gem::Specification.new do |s|
194
201
  s.add_dependency(%q<require_all>, ["~> 1.2.0"])
195
202
  s.add_dependency(%q<sugar-high>, ["~> 0.3.0"])
196
203
  s.add_dependency(%q<rails3_artifactor>, ["~> 0.3.1"])
204
+ s.add_dependency(%q<activemodel>, [">= 3.0.1"])
197
205
  s.add_dependency(%q<activesupport>, [">= 3.0.1"])
206
+ s.add_dependency(%q<activeresource>, [">= 3.0.1"])
198
207
  s.add_dependency(%q<logging_assist>, [">= 0.1.6"])
199
208
  end
200
209
  end
@@ -0,0 +1,23 @@
1
+ require 'rspec/core'
2
+ require 'cancan-permits'
3
+ require 'rails'
4
+
5
+ DIR = File.dirname(__FILE__)
6
+
7
+ require_all DIR + '/../../../app/models'
8
+
9
+ describe 'Save License to yaml' do
10
+ before :each do
11
+ @license = LicenseConfig.new :name => 'blogging'
12
+ @license.can = PermissionSet.new :read => ['Article', 'Post']
13
+ end
14
+
15
+ it "should save license to license.yml file" do
16
+ puts @license
17
+ puts @license.to_yaml
18
+ end
19
+ end
20
+
21
+
22
+
23
+
@@ -0,0 +1,12 @@
1
+ admin:
2
+ can:
3
+ manage:
4
+ - Article
5
+ - Post
6
+ guest:
7
+ can:
8
+ manage:
9
+ - all
10
+ cannot:
11
+ manage:
12
+ - User
data/spec/spec_helper.rb CHANGED
@@ -3,4 +3,6 @@ require 'cancan/matchers'
3
3
  require 'cancan-permits'
4
4
  require 'cancan-permits/rspec'
5
5
 
6
+ SPEC_DIR = File.dirname(__FILE__)
7
+
6
8
  require_all File.dirname(__FILE__) + '/fixtures/permits'
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 6
9
- version: 0.3.6
8
+ - 7
9
+ version: 0.3.7
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-30 00:00:00 +01:00
17
+ date: 2010-12-24 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -123,7 +123,7 @@ dependencies:
123
123
  type: :runtime
124
124
  version_requirements: *id007
125
125
  - !ruby/object:Gem::Dependency
126
- name: activesupport
126
+ name: activemodel
127
127
  prerelease: false
128
128
  requirement: &id008 !ruby/object:Gem::Requirement
129
129
  none: false
@@ -138,9 +138,39 @@ dependencies:
138
138
  type: :runtime
139
139
  version_requirements: *id008
140
140
  - !ruby/object:Gem::Dependency
141
- name: logging_assist
141
+ name: activesupport
142
142
  prerelease: false
143
143
  requirement: &id009 !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ segments:
149
+ - 3
150
+ - 0
151
+ - 1
152
+ version: 3.0.1
153
+ type: :runtime
154
+ version_requirements: *id009
155
+ - !ruby/object:Gem::Dependency
156
+ name: activeresource
157
+ prerelease: false
158
+ requirement: &id010 !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ segments:
164
+ - 3
165
+ - 0
166
+ - 1
167
+ version: 3.0.1
168
+ type: :runtime
169
+ version_requirements: *id010
170
+ - !ruby/object:Gem::Dependency
171
+ name: logging_assist
172
+ prerelease: false
173
+ requirement: &id011 !ruby/object:Gem::Requirement
144
174
  none: false
145
175
  requirements:
146
176
  - - ">="
@@ -151,7 +181,7 @@ dependencies:
151
181
  - 6
152
182
  version: 0.1.6
153
183
  type: :runtime
154
- version_requirements: *id009
184
+ version_requirements: *id011
155
185
  description: Role specific Permits for use with CanCan permission system
156
186
  email: kmandrup@gmail.com
157
187
  executables: []
@@ -207,7 +237,9 @@ files:
207
237
  - spec/active_record/owner_permits_spec.rb
208
238
  - spec/active_record/permits_spec.rb
209
239
  - spec/active_record/spec_helper.rb
240
+ - spec/cancan-permits/license/save_license_spec.rb
210
241
  - spec/cancan-permits/loader/config/licenses.yml
242
+ - spec/cancan-permits/loader/config/permits.yml
211
243
  - spec/cancan-permits/loader/config/user_permissions.yml
212
244
  - spec/cancan-permits/loader/license_loader_spec.rb
213
245
  - spec/cancan-permits/loader/permits_loader_spec.rb
@@ -291,6 +323,7 @@ test_files:
291
323
  - spec/active_record/owner_permits_spec.rb
292
324
  - spec/active_record/permits_spec.rb
293
325
  - spec/active_record/spec_helper.rb
326
+ - spec/cancan-permits/license/save_license_spec.rb
294
327
  - spec/cancan-permits/loader/license_loader_spec.rb
295
328
  - spec/cancan-permits/loader/permits_loader_spec.rb
296
329
  - spec/cancan-permits/loader/user_permissions_loader.rb