braai 1.4.1 → 1.5.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.
@@ -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