three 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db0908414cedec93c7f8f5cae166fad7b1b1ef9b
4
- data.tar.gz: 7cd6687d38c7ccc4d9ffef7daaf1d719f7b26aed
3
+ metadata.gz: c4018a469715b0050959db01c36db56f214d9ccd
4
+ data.tar.gz: bd36ca9b6b88aad4869562354fae9d518e88c194
5
5
  SHA512:
6
- metadata.gz: aa8cbc2fc7e2289a322eadefa7dca02afe0e2cf8d16edeef25087693d0f7e6ea0a793b6ea1d4085d6ac24c08b21010525a357dcacdc532d1cdca3067f50888bf
7
- data.tar.gz: 3a55795d388bf63dedb2403708a07dcc60ca1d0b4b16f1b4846fb80425b51ae0e59bee59d4797614571b29d8bf5f34d6e101cdc7a3db560361a4a65e1dcee1d1
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
+ ```
@@ -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
- begin
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
@@ -1,3 +1,3 @@
1
1
  module Three
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -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.1
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.0.14
81
+ rubygems_version: 2.2.2
82
82
  signing_key:
83
83
  specification_version: 4
84
84
  summary: three
data/Gemfile.lock DELETED
@@ -1,20 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- three (1.0.1)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- metaclass (0.0.4)
10
- mocha (1.1.0)
11
- metaclass (~> 0.0.1)
12
- rake (10.3.2)
13
-
14
- PLATFORMS
15
- ruby
16
-
17
- DEPENDENCIES
18
- mocha
19
- rake
20
- three!