cantango-core 0.1.5 → 0.1.6

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cantango-core}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Kristian Mandrup}, %q{Stanislaw Pankevich}]
12
- s.date = %q{2011-12-04}
12
+ s.date = %q{2011-12-06}
13
13
  s.description = %q{Define your permission rules as role- or role group specific permits.
14
14
  Integrates well with multiple Devise user acounts.
15
15
  Includes rules caching.
@@ -1,5 +1,5 @@
1
1
  module CanTango
2
2
  module Ability
3
- autoload_modules :Rules, :Callbacks, :Executor, :Base, :Cache, :Helper, :Mode
3
+ autoload_modules :Rules, :Callbacks, :Base, :Executor, :Cache, :Helper, :Mode
4
4
  end
5
5
  end
@@ -11,6 +11,7 @@ module CanTango
11
11
  def initialize candidate, options = {}
12
12
  raise "Candidate must be something!" if !candidate
13
13
  @candidate, @options = candidate, options
14
+ execute
14
15
  end
15
16
 
16
17
  def execute
@@ -20,9 +20,10 @@ module CanTango
20
20
  clear_rules!
21
21
  calculate_rules
22
22
  end
23
- return rules
24
23
  rescue Exception => e
25
24
  debug e.message
25
+ ensure
26
+ @executed = true
26
27
  rules
27
28
  end
28
29
  end
@@ -1,21 +1,21 @@
1
1
  module CanTango::Ability::Executor
2
- class Base
2
+ class Base < CanTango::Ability::Base
3
3
  include CanTango::Ability::Executor
4
4
  include CanTango::Ability::Callbacks
5
5
 
6
- attr_reader :candidate, :modes, :options
6
+ attr_reader :candidate, :modes, :options, :executed
7
7
 
8
8
  def initialize candidate, options = {}
9
9
  raise ArgumentError, "Candidate must be something!" if !candidate
10
10
  @candidate, @options = [candidate, options]
11
11
  end
12
12
 
13
- def rules
14
- raise NotImplementedError
13
+ def executed?
14
+ @executed
15
15
  end
16
16
 
17
17
  def calculate_rules
18
- raise NotImplementedError
18
+ super
19
19
  end
20
20
 
21
21
  def self.inherited(base)
@@ -5,6 +5,7 @@ module CanTango::Ability::Executor
5
5
  modes = [modes].flatten if modes
6
6
  raise ArgumentError, "Modes must be a list of modes to execute!" if modes.blank?
7
7
  @modes = modes
8
+ execute
8
9
  end
9
10
 
10
11
  def calculate_rules
@@ -16,11 +17,13 @@ module CanTango::Ability::Executor
16
17
  end
17
18
 
18
19
  def execute
20
+ return if executed?
19
21
  clear_rules!
20
22
  calculate_rules
21
- return rules
22
23
  rescue Exception => e
23
- debug e.message
24
+ debug e.message
25
+ ensure
26
+ @executed = true
24
27
  rules
25
28
  end
26
29
 
@@ -31,7 +34,6 @@ module CanTango::Ability::Executor
31
34
  protected
32
35
 
33
36
  def modal_rules mode
34
- puts "modal rules: #{mode}"
35
37
  mode?(mode) ? executor(mode).execute : []
36
38
  end
37
39
 
@@ -4,7 +4,9 @@ require 'fixtures/models'
4
4
  module CanTango::Ability
5
5
  class Base
6
6
  def calculate_rules
7
+ puts "calc"
7
8
  can :edit, Project
9
+ cannot :publish, Project
8
10
  end
9
11
  end
10
12
  end
@@ -16,5 +18,8 @@ describe CanTango::Ability::Base do
16
18
 
17
19
  subject { CanTango::Ability::Base.new @user }
18
20
 
21
+ specify { subject.can?(:edit, Project).should be_true }
22
+ specify { subject.cannot?(:publish, Project).should be_true }
23
+
19
24
  specify { subject.should be_allowed_to(:edit, Project) }
20
25
  end
@@ -25,4 +25,10 @@ describe CanTango::Ability::Executor::Base do
25
25
  lambda { subject.execute }.should raise_error
26
26
  end
27
27
  end
28
+
29
+ describe 'should not have ability' do
30
+ specify do
31
+ lambda { subject.ability }.should raise_error
32
+ end
33
+ end
28
34
  end
@@ -20,13 +20,10 @@ describe CanTango::Ability::Executor::Modal do
20
20
  CanTango::Ability::Executor::Modal.new @ability, :no_cache
21
21
  end
22
22
 
23
- its(:rules) { should be_empty }
23
+ specify { subject.should respond_to :can? }
24
+ specify { subject.should respond_to :cannot? }
24
25
 
25
- describe 'rules should be calculated on execute' do
26
- before do
27
- subject.execute
28
- end
29
-
26
+ describe 'rules should have been calculated' do
30
27
  specify { subject.rules.should_not be_empty }
31
28
  specify { subject.rules.size.should == 1 }
32
29
  specify { subject.rules.first.should be_a CanCan::Rule }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cantango-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-04 00:00:00.000000000Z
13
+ date: 2011-12-06 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &70246704091920 !ruby/object:Gem::Requirement
17
+ requirement: &70117229526600 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 3.0.1
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70246704091920
25
+ version_requirements: *70117229526600
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cancan
28
- requirement: &70246704089120 !ruby/object:Gem::Requirement
28
+ requirement: &70117229524800 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '1.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70246704089120
36
+ version_requirements: *70117229524800
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: sugar-high
39
- requirement: &70246704087260 !ruby/object:Gem::Requirement
39
+ requirement: &70117229523380 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.6.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *70246704087260
47
+ version_requirements: *70117229523380
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: sweetloader
50
- requirement: &70246704086340 !ruby/object:Gem::Requirement
50
+ requirement: &70117229522780 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.1.5
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *70246704086340
58
+ version_requirements: *70117229522780
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hashie
61
- requirement: &70246704079420 !ruby/object:Gem::Requirement
61
+ requirement: &70117229521720 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *70246704079420
69
+ version_requirements: *70117229521720
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rspec-rails
72
- requirement: &70246704078320 !ruby/object:Gem::Requirement
72
+ requirement: &70117229520600 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 2.6.1
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70246704078320
80
+ version_requirements: *70117229520600
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: forgery
83
- requirement: &70246704077240 !ruby/object:Gem::Requirement
83
+ requirement: &70117229514900 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0.3'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70246704077240
91
+ version_requirements: *70117229514900
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: factory_girl
94
- requirement: &70246704076140 !ruby/object:Gem::Requirement
94
+ requirement: &70117229508560 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *70246704076140
102
+ version_requirements: *70117229508560
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
- requirement: &70246704074560 !ruby/object:Gem::Requirement
105
+ requirement: &70117229503400 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *70246704074560
113
+ version_requirements: *70117229503400
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rspec
116
- requirement: &70246704057660 !ruby/object:Gem::Requirement
116
+ requirement: &70117229502040 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 2.6.0
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *70246704057660
124
+ version_requirements: *70117229502040
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: jeweler
127
- requirement: &70246704050840 !ruby/object:Gem::Requirement
127
+ requirement: &70117229501340 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 1.6.4
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *70246704050840
135
+ version_requirements: *70117229501340
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: bundler
138
- requirement: &70246704049820 !ruby/object:Gem::Requirement
138
+ requirement: &70117229500520 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: 1.1.rc
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *70246704049820
146
+ version_requirements: *70117229500520
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: rdoc
149
- requirement: &70246704048780 !ruby/object:Gem::Requirement
149
+ requirement: &70117229499740 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *70246704048780
157
+ version_requirements: *70117229499740
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: rake
160
- requirement: &70246704047900 !ruby/object:Gem::Requirement
160
+ requirement: &70117229498680 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,7 +165,7 @@ dependencies:
165
165
  version: 0.9.2.2
166
166
  type: :development
167
167
  prerelease: false
168
- version_requirements: *70246704047900
168
+ version_requirements: *70117229498680
169
169
  description: ! 'Define your permission rules as role- or role group specific permits.
170
170
 
171
171
  Integrates well with multiple Devise user acounts.
@@ -294,7 +294,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
294
294
  version: '0'
295
295
  segments:
296
296
  - 0
297
- hash: 2028541459112874735
297
+ hash: -4261502692778852496
298
298
  required_rubygems_version: !ruby/object:Gem::Requirement
299
299
  none: false
300
300
  requirements: