three 1.0.1 → 1.1.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.
- checksums.yaml +4 -4
- data/README.markdown +17 -0
- data/lib/three/evaluator.rb +10 -3
- data/lib/three/version.rb +1 -1
- data/spec/three/evaluator_spec.rb +89 -0
- metadata +3 -3
- data/Gemfile.lock +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4018a469715b0050959db01c36db56f214d9ccd
|
4
|
+
data.tar.gz: bd36ca9b6b88aad4869562354fae9d518e88c194
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4deed1807609d3bac89dfc02501d5995cc116d66699d763a79e4c1a6674cd397ec9351c42f34c1629981a9b70e34194d21395d9a960443d2db7ff8e2ab3d7f2
|
7
|
+
data.tar.gz: 4a35b37082a40d2e5209f03875287acd110297cdc4da31dcf256bc138676de5148e0895ca84960b70e129b59c07415df07da59cf961b2e350e6a9cedcdc2f1a6
|
data/README.markdown
CHANGED
@@ -151,3 +151,20 @@ The "prevented" method works just like "allowed," except that it will remove the
|
|
151
151
|
|
152
152
|
The "prevented" method is the only only feature added with six.
|
153
153
|
|
154
|
+
### Errors
|
155
|
+
|
156
|
+
By default, errors in a rule or calling a rule is turned off. This means that you don't have to declare "allowed" or "prevented" on your rules, and you can have clean examples like the one above.
|
157
|
+
|
158
|
+
However, sometimes you may not want to run your production code through blanket rescue statements. So, you can disable this using:
|
159
|
+
|
160
|
+
```ruby
|
161
|
+
|
162
|
+
module RulesMissingMethods
|
163
|
+
end
|
164
|
+
|
165
|
+
evaluator = Three.evaluator_for RulesMissingMethods
|
166
|
+
evaluator.rescue_errors = false
|
167
|
+
|
168
|
+
evaluator.allowed? nil, :watch_out # POW an error was raised
|
169
|
+
|
170
|
+
```
|
data/lib/three/evaluator.rb
CHANGED
@@ -2,7 +2,10 @@ module Three
|
|
2
2
|
|
3
3
|
class Evaluator
|
4
4
|
|
5
|
+
attr_accessor :rescue_errors
|
6
|
+
|
5
7
|
def initialize(rules)
|
8
|
+
@rescue_errors = true
|
6
9
|
@rules = a_single_array_was_provided?(rules) ? rules[0] : rules
|
7
10
|
end
|
8
11
|
|
@@ -55,10 +58,14 @@ module Three
|
|
55
58
|
end
|
56
59
|
|
57
60
|
def execute_rule rule, method, subject, target
|
58
|
-
|
61
|
+
if rescue_errors
|
62
|
+
begin
|
63
|
+
rule.send(method, subject, target)
|
64
|
+
rescue
|
65
|
+
[]
|
66
|
+
end
|
67
|
+
else
|
59
68
|
rule.send(method, subject, target)
|
60
|
-
rescue
|
61
|
-
[]
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
data/lib/three/version.rb
CHANGED
@@ -0,0 +1,89 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Three::Evaluator do
|
4
|
+
|
5
|
+
describe "rescuing failures" do
|
6
|
+
|
7
|
+
describe "allowed" do
|
8
|
+
|
9
|
+
it "should return false if the rule returns an error" do
|
10
|
+
|
11
|
+
good_rule, missing_rule, failing_rule = Object.new, Object.new, Object.new
|
12
|
+
good_rule.stubs(:allowed).returns [:something]
|
13
|
+
missing_rule.stubs(:allowed).returns [:something_else]
|
14
|
+
failing_rule.stubs(:allowed).raises 'error'
|
15
|
+
|
16
|
+
Three.evaluator_for(good_rule).allowed?(nil, :something).must_equal true
|
17
|
+
Three.evaluator_for(missing_rule).allowed?(nil, :something).must_equal false
|
18
|
+
Three.evaluator_for(failing_rule).allowed?(nil, :something).must_equal false
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "the error checking is disabled" do
|
23
|
+
|
24
|
+
it "should throw if the rule returns an error" do
|
25
|
+
|
26
|
+
failing_rule = Object.new
|
27
|
+
failing_rule.stubs(:allowed).raises 'error'
|
28
|
+
failing_rule.stubs(:prevented).returns []
|
29
|
+
|
30
|
+
begin
|
31
|
+
evaluator = Three.evaluator_for(failing_rule)
|
32
|
+
evaluator.rescue_errors = false
|
33
|
+
evaluator.allowed? nil, :something
|
34
|
+
rescue
|
35
|
+
error_hit = true
|
36
|
+
end
|
37
|
+
|
38
|
+
error_hit.must_equal true
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "prevented" do
|
47
|
+
|
48
|
+
it "should return not block the permission if it returns an error" do
|
49
|
+
|
50
|
+
good_rule, bad_rule = Object.new, Object.new
|
51
|
+
|
52
|
+
good_rule.stubs(:allowed).returns [:apple]
|
53
|
+
good_rule.stubs(:prevented).returns [:apple]
|
54
|
+
|
55
|
+
bad_rule.stubs(:allowed).returns [:apple]
|
56
|
+
bad_rule.stubs(:prevented).raises 'k'
|
57
|
+
|
58
|
+
Three.evaluator_for(good_rule).allowed?(nil, :apple).must_equal false
|
59
|
+
Three.evaluator_for(bad_rule).allowed?(nil, :apple).must_equal true
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "the error checking is disabled" do
|
64
|
+
|
65
|
+
it "should throw if the prevented rule returns an error" do
|
66
|
+
|
67
|
+
failing_rule = Object.new
|
68
|
+
failing_rule.stubs(:allowed).returns [:sigh]
|
69
|
+
failing_rule.stubs(:prevented).raises 'k'
|
70
|
+
|
71
|
+
begin
|
72
|
+
evaluator = Three.evaluator_for(failing_rule)
|
73
|
+
evaluator.rescue_errors = false
|
74
|
+
evaluator.allowed? nil, :sigh
|
75
|
+
rescue
|
76
|
+
error_hit = true
|
77
|
+
end
|
78
|
+
|
79
|
+
error_hit.must_equal true
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: three
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darren Cauthon
|
@@ -48,7 +48,6 @@ files:
|
|
48
48
|
- .rspec
|
49
49
|
- .travis.yml
|
50
50
|
- Gemfile
|
51
|
-
- Gemfile.lock
|
52
51
|
- LICENSE
|
53
52
|
- ORIGINAL_LICENSE
|
54
53
|
- README.markdown
|
@@ -57,6 +56,7 @@ files:
|
|
57
56
|
- lib/three/evaluator.rb
|
58
57
|
- lib/three/version.rb
|
59
58
|
- spec/spec_helper.rb
|
59
|
+
- spec/three/evaluator_spec.rb
|
60
60
|
- spec/three_spec.rb
|
61
61
|
- three.gemspec
|
62
62
|
homepage: https://github.com/darrencauthon/three
|
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
78
|
version: '0'
|
79
79
|
requirements: []
|
80
80
|
rubyforge_project:
|
81
|
-
rubygems_version: 2.
|
81
|
+
rubygems_version: 2.2.2
|
82
82
|
signing_key:
|
83
83
|
specification_version: 4
|
84
84
|
summary: three
|
data/Gemfile.lock
DELETED