braai 1.4.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- braai (1.4.1)
4
+ braai (1.5.0)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -1,3 +1,19 @@
1
1
  require 'braai/handlers/base'
2
2
  require 'braai/handlers/default'
3
3
  require 'braai/handlers/iteration'
4
+
5
+ module Braai
6
+ module Handlers
7
+
8
+ class << self
9
+ def rescue_from(klass, handler)
10
+ self.rescuers.unshift({klass: klass, handler: handler})
11
+ end
12
+
13
+ def rescuers
14
+ @rescuers ||= []
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -1,4 +1,9 @@
1
+ # Braai.rescue_from Exception, ->{}
2
+ # Braai.rescue_from ArgumentError, ->{}
3
+
4
+
1
5
  module Braai::Handlers
6
+
2
7
  class Base
3
8
  attr_accessor :template, :key, :matches
4
9
 
@@ -10,8 +15,6 @@ module Braai::Handlers
10
15
 
11
16
  class << self
12
17
 
13
- attr_accessor :error_handler, :nomatch_handler
14
-
15
18
  def call(template, key, matches)
16
19
  handler = self.new(template, key, matches)
17
20
  handler.safe_perform
@@ -24,11 +27,6 @@ module Braai::Handlers
24
27
  rescue => e
25
28
  rescue_from_error(e)
26
29
  end
27
-
28
- if [key, nil].include?(value) && self.class.nomatch_handler
29
- value = self.class.nomatch_handler.call(key)
30
- end
31
-
32
30
  value
33
31
  end
34
32
 
@@ -38,11 +36,12 @@ module Braai::Handlers
38
36
  end
39
37
 
40
38
  def rescue_from_error(e)
41
- if self.class.error_handler
42
- self.class.error_handler.call(e)
43
- else
44
- key
39
+ Braai::Handlers.rescuers.each do |rescuer|
40
+ if e.is_a?(rescuer[:klass])
41
+ return rescuer[:handler].call(self)
42
+ end
45
43
  end
44
+ raise e
46
45
  end
47
46
  end
48
47
  end
@@ -1,3 +1,3 @@
1
1
  module Braai
2
- VERSION = "1.4.1"
2
+ VERSION = "1.5.0"
3
3
  end
@@ -12,8 +12,7 @@ describe Braai::Handlers::Base do
12
12
  let(:handler) { Braai::Handlers::Base.new(template, key, matches) }
13
13
 
14
14
  before do
15
- Braai::Handlers::Base.error_handler = nil
16
- Braai::Handlers::Base.nomatch_handler = nil
15
+ Braai::Handlers.rescuers.clear
17
16
  end
18
17
 
19
18
  describe '.call' do
@@ -55,22 +54,27 @@ describe Braai::Handlers::Base do
55
54
  handler.safe_perform.must_equal('<!-- foo -->')
56
55
  end
57
56
 
58
- it 'falls back on an optional nomatch handler' do
59
- Braai::Handlers::Base.nomatch_handler = ->(value) { "<!-- no match for #{value} -->" }
60
- handler.safe_perform.must_equal("<!-- no match for {{ person.name }} -->")
61
- end
62
57
  end
63
58
 
64
59
  describe '#rescue_from_error' do
65
60
 
66
- it 'defaults to returning the unmodified template' do
67
- handler.rescue_from_error(ArgumentError).must_equal('{{ person.name }}')
61
+ it 'calls a user-defined error handler if specified' do
62
+ Braai::Handlers.rescue_from ArgumentError, ->(e) { "<!-- #{key} -->" }
63
+ handler.rescue_from_error(ArgumentError.new).must_equal('<!-- {{ person.name }} -->')
68
64
  end
69
65
 
70
- it 'calls a user-defined error handler if specified' do
71
- Braai::Handlers::Base.error_handler = ->(e) { "<!-- #{key} -->" }
72
- handler.rescue_from_error(ArgumentError).must_equal('<!-- {{ person.name }} -->')
66
+ it "raises the error if there is not rescuer" do
67
+ ->{
68
+ handler.rescue_from_error(ArgumentError.new)
69
+ }.must_raise(ArgumentError)
73
70
  end
71
+
72
+ it "stops after the first matching rescuer" do
73
+ Braai::Handlers.rescue_from Exception, ->(e) { "!!! #{key} !!!" }
74
+ Braai::Handlers.rescue_from ArgumentError, ->(e) { "<!-- #{key} -->" }
75
+ handler.rescue_from_error(ArgumentError.new).must_equal('<!-- {{ person.name }} -->')
76
+ end
77
+
74
78
  end
75
79
 
76
80
  describe 'default template rendering' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braai
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-03 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport