can_i 0.1.1 → 0.1.2

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.md CHANGED
@@ -90,3 +90,17 @@ class AdminRole < BaseRole
90
90
  end
91
91
  ```
92
92
 
93
+ ## Changing Roles At Runtime
94
+ You can change a role at runtime without creating an entirely new `Authorization` object.
95
+
96
+ ```ruby
97
+
98
+ # Say we always start out with a "default" role in our app
99
+ @auth = CanI::Authorization.new :default
100
+
101
+ ### ...
102
+
103
+ # Now we realize we need to use a different role
104
+ @auth.reset_with_role! :admin
105
+
106
+ ```
@@ -28,15 +28,8 @@ module CanI
28
28
 
29
29
  attr_reader :auth_role
30
30
 
31
- def initialize(role=:authorization)
32
-
33
- @can_do_anything = false
34
- klass = CanI.const_defined?("#{role}_role".camelize) ? CanI.const_get("#{role}_role".camelize) : Kernel.const_get("#{role}_role".camelize)
35
-
36
- @auth_role = klass.new
37
- klass.registration_blocks.each do |more_roles|
38
- instance_eval &more_roles
39
- end
31
+ def initialize(role=:authorization)
32
+ reset_with_role! role
40
33
  end
41
34
 
42
35
  def can(action)
@@ -55,8 +48,17 @@ module CanI
55
48
  @can_do_anything = true
56
49
  end
57
50
 
51
+ def reset_with_role!(role)
52
+ @can_do_anything = false
53
+ @approved_actions = []
58
54
 
59
- private
55
+ klass = role_for_symbol(role)
56
+ @auth_role = klass.new
57
+ klass.registration_blocks.each { |b| instance_eval &b }
58
+ end
59
+
60
+
61
+ protected
60
62
 
61
63
  def approved_actions
62
64
  @approved_actions ||= []
@@ -66,5 +68,10 @@ module CanI
66
68
  @can_do_anything
67
69
  end
68
70
 
71
+ def role_for_symbol(sym)
72
+ role = "#{sym}_role".camelize
73
+ CanI.const_defined?(role) ? CanI.const_get(role) : Kernel.const_get(role)
74
+ end
75
+
69
76
  end
70
77
  end
data/lib/can_i/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CanI
2
- Version = "0.1.1"
2
+ Version = "0.1.2"
3
3
  end
@@ -35,4 +35,31 @@ describe "auth roles" do
35
35
 
36
36
  end
37
37
 
38
+ describe "resetting a role" do
39
+
40
+ before do
41
+ @auth = CanI::Authorization.new :admin
42
+ end
43
+
44
+ it "should be an admin role" do
45
+ @auth.auth_role.should.be.instance_of AdminRole
46
+ end
47
+
48
+ it "should let me reset back to the default role" do
49
+ @auth.reset_with_role! :authorization
50
+ @auth.auth_role.should.be.instance_of CanI::AuthorizationRole
51
+ end
52
+
53
+ it "should not have any allowed actions" do
54
+ @auth.reset_with_role! :authorization
55
+ @auth.send(:approved_actions).should == []
56
+ end
57
+
58
+ it "should return false for #can_do_anything?" do
59
+ @auth.reset_with_role! :authorization
60
+ @auth.send(:can_do_anything?).should == false
61
+ end
62
+
63
+ end
64
+
38
65
  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.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -66,7 +66,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
66
66
  version: '0'
67
67
  segments:
68
68
  - 0
69
- hash: -4423656251752888746
69
+ hash: -2984349318728766085
70
70
  required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements: