action-guard 1.1.0 → 1.2.0

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
- 1.1.0
1
+ 1.2.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "action-guard"
8
- s.version = "1.1.0"
8
+ s.version = "1.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rob Westgeest"]
12
- s.date = "2012-06-06"
12
+ s.date = "2012-10-01"
13
13
  s.description = "authorisation module of actions based on url-paths for usage in Rails and possibly other ruby based web frameworks"
14
14
  s.email = "rob.westgeest@qwan.it"
15
15
  s.extra_rdoc_files = [
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
43
43
  s.rdoc_options = ["--charset=UTF-8"]
44
44
  s.require_paths = ["lib"]
45
45
  s.rubygems_version = "1.8.24"
46
- s.summary = "Action guard-1.1.0"
46
+ s.summary = "Action guard-1.2.0"
47
47
 
48
48
  if s.respond_to? :specification_version then
49
49
  s.specification_version = 3
@@ -33,8 +33,8 @@ module ActionGuard
33
33
  rules[path_matcher] = LevelRule.new(from_role_value, to_role_value, self, &block)
34
34
  end
35
35
 
36
- def allow_rule(path_matcher)
37
- rules[path_matcher] = AllowRule.new
36
+ def allow_rule(path_matcher, &block)
37
+ rules[path_matcher] = AllowRule.new(&block)
38
38
  end
39
39
 
40
40
  def refuse_rule(path_matcher)
@@ -27,7 +27,11 @@ module ActionGuard
27
27
  end
28
28
 
29
29
  class AllowRule
30
+ def initialize(&block)
31
+ @additional_rule = block
32
+ end
30
33
  def allows?(person, request_params)
34
+ return @additional_rule.call(person, request_params) unless @additional_rule.nil?
31
35
  true
32
36
  end
33
37
  end
@@ -129,6 +129,39 @@ describe ActionGuard do
129
129
  end
130
130
  end
131
131
 
132
+ describe "on an allowance rule with a block" do
133
+ let!(:mock_block_body) { mock }
134
+
135
+ before do
136
+ guard.allow_rule('some_controller#some_action') do |*args|
137
+ mock_block_body.block_called(*args)
138
+ end
139
+ end
140
+
141
+ it "calls block" do
142
+ account = account_with_role(:worker)
143
+ mock_block_body.should_receive(:block_called).with(account, request_params_for('some_controller#some_action'))
144
+ guard.authorized?(account, a_request_for( 'some_controller#some_action'))
145
+ end
146
+
147
+ it "disallows when block returns false" do
148
+ account = account_with_role(:worker)
149
+
150
+ mock_block_body.stub(:block_called).and_return false
151
+
152
+ guard.authorized?(account, a_request_for('some_controller#some_action')).should be_false
153
+ end
154
+
155
+ it "allows when block returns true" do
156
+ account = account_with_role(:worker)
157
+
158
+ mock_block_body.stub(:block_called).and_return true
159
+
160
+ guard.authorized?(account, a_request_for('some_controller#some_action')).should be_true
161
+ end
162
+ end
163
+
164
+
132
165
  describe "on an exact rule" do
133
166
  before do
134
167
  guard.exact_role_rule 'home', :admin
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action-guard
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 1.1.0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rob Westgeest
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-06-06 00:00:00 Z
18
+ date: 2012-10-01 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  prerelease: false
@@ -173,6 +173,6 @@ rubyforge_project:
173
173
  rubygems_version: 1.8.24
174
174
  signing_key:
175
175
  specification_version: 3
176
- summary: Action guard-1.1.0
176
+ summary: Action guard-1.2.0
177
177
  test_files: []
178
178