can_i 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -78,3 +78,15 @@ You associate a role with the authorization system when you create your authoriz
78
78
  ```ruby
79
79
  App.delegate.authorization = CanI::Authorization.new :admin
80
80
  ```
81
+
82
+ ### Can Do Anything
83
+ For an admin role, you're most likely going to let the user do anything. There's a method for that too. Note that you can't override the all powerful setting in a subclass of the `AdminRole`.
84
+
85
+ ```ruby
86
+ class AdminRole < BaseRole
87
+ authorization_roles do
88
+ can_do_anything!
89
+ end
90
+ end
91
+ ```
92
+
@@ -30,10 +30,11 @@ module CanI
30
30
 
31
31
  def initialize(role=:authorization)
32
32
 
33
+ @can_do_anything = false
33
34
  klass = CanI.const_defined?("#{role}_role".camelize) ? CanI.const_get("#{role}_role".camelize) : Kernel.const_get("#{role}_role".camelize)
34
35
 
35
36
  @auth_role = klass.new
36
- auth_role.class.registration_blocks.each do |more_roles|
37
+ klass.registration_blocks.each do |more_roles|
37
38
  instance_eval &more_roles
38
39
  end
39
40
  end
@@ -43,13 +44,17 @@ module CanI
43
44
  end
44
45
 
45
46
  def can?(action)
46
- approved_actions.include? action.to_sym
47
+ can_do_anything? || approved_actions.include?(action.to_sym)
47
48
  end
48
49
 
49
50
  def cannot(action)
50
51
  approved_actions.delete action.to_sym
51
52
  end
52
53
 
54
+ def can_do_anything!
55
+ @can_do_anything = true
56
+ end
57
+
53
58
 
54
59
  private
55
60
 
@@ -57,5 +62,9 @@ module CanI
57
62
  @approved_actions ||= []
58
63
  end
59
64
 
65
+ def can_do_anything?
66
+ @can_do_anything
67
+ end
68
+
60
69
  end
61
70
  end
@@ -17,21 +17,32 @@ module CanI
17
17
  # @auth.can? :fire_people
18
18
  # => true
19
19
  #
20
+ # The above admin example would probably be more realistically written as:
21
+ # class AdminRole < CanI::AuthorizationRole
22
+ # authorization_roles do
23
+ # can_do_anything!
24
+ # end
25
+ # end
26
+ #
20
27
 
21
28
  class << self
22
29
 
30
+ # DSL to register a block to add more roles
23
31
  def authorization_roles(&block)
24
- registration_blocks << block
32
+ class_instance_blocks << block
25
33
  end
26
34
 
35
+ # Returns blocks for this subclass & all superclasses merged together
27
36
  def registration_blocks
28
- @@registration_blocks ||= []
29
- end
37
+ ancestors.select { |klass| klass <= CanI::AuthorizationRole }.map { |klass| klass.class_instance_blocks }.flatten
38
+ end
30
39
 
31
- end
40
+ # Stores the blocks registered just for this class
41
+ def class_instance_blocks
42
+ @class_instance_blocks ||= []
43
+ end
44
+ protected :class_instance_blocks
32
45
 
33
- # use to define additional rules in your subclass
34
- authorization_roles do
35
46
  end
36
47
 
37
48
  end
data/lib/can_i/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CanI
2
- Version = 0.1
2
+ Version = "0.1.1"
3
3
  end
@@ -11,15 +11,7 @@ describe "auth roles" do
11
11
  describe "custom auth roles" do
12
12
 
13
13
  before do
14
-
15
- class CustomRole < CanI::AuthorizationRole
16
- authorization_roles do
17
- can :my_role
18
- end
19
- end
20
-
21
14
  @auth = CanI::Authorization.new :custom
22
-
23
15
  end
24
16
 
25
17
  it "should respect my custom auth role" do
@@ -32,4 +24,15 @@ describe "auth roles" do
32
24
 
33
25
  end
34
26
 
27
+ describe "can do anything" do
28
+ before do
29
+ @auth = CanI::Authorization.new :admin
30
+ end
31
+
32
+ it "should let me do anything I want" do
33
+ @auth.can?(Time.now.to_i.to_s).should == true
34
+ end
35
+
36
+ end
37
+
35
38
  end
@@ -0,0 +1,5 @@
1
+ class AdminRole < CanI::AuthorizationRole
2
+ authorization_roles do
3
+ can_do_anything!
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class CustomRole < CanI::AuthorizationRole
2
+ authorization_roles do
3
+ can :my_role
4
+ end
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: can_i
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-14 00:00:00.000000000 Z
12
+ date: 2013-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bubble-wrap
@@ -48,6 +48,8 @@ files:
48
48
  - lib/can_i/version.rb
49
49
  - spec/authorization_roles_spec.rb
50
50
  - spec/helper_method_spec.rb
51
+ - spec/helpers/admin_role.rb
52
+ - spec/helpers/custom_role.rb
51
53
  - spec/helpers/helper_methods.rb
52
54
  - spec/main_spec.rb
53
55
  homepage: https://github.com/macfanatic/rubymotion_roles
@@ -64,7 +66,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
66
  version: '0'
65
67
  segments:
66
68
  - 0
67
- hash: 3259127327991234335
69
+ hash: -4423656251752888746
68
70
  required_rubygems_version: !ruby/object:Gem::Requirement
69
71
  none: false
70
72
  requirements:
@@ -81,5 +83,7 @@ summary: Provides an easy way to define roles for performing actions in your Rub
81
83
  test_files:
82
84
  - spec/authorization_roles_spec.rb
83
85
  - spec/helper_method_spec.rb
86
+ - spec/helpers/admin_role.rb
87
+ - spec/helpers/custom_role.rb
84
88
  - spec/helpers/helper_methods.rb
85
89
  - spec/main_spec.rb