braai 1.4.0 → 1.4.1

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.0)
4
+ braai (1.4.1)
5
5
  activesupport
6
6
 
7
7
  GEM
@@ -10,27 +10,39 @@ module Braai::Handlers
10
10
 
11
11
  class << self
12
12
 
13
+ attr_accessor :error_handler, :nomatch_handler
14
+
13
15
  def call(template, key, matches)
14
16
  handler = self.new(template, key, matches)
15
17
  handler.safe_perform
16
18
  end
17
-
18
19
  end
19
20
 
20
21
  def safe_perform
21
- begin
22
+ value = begin
22
23
  perform
23
24
  rescue => e
24
25
  rescue_from_error(e)
25
26
  end
27
+
28
+ if [key, nil].include?(value) && self.class.nomatch_handler
29
+ value = self.class.nomatch_handler.call(key)
30
+ end
31
+
32
+ value
26
33
  end
27
34
 
35
+ # override this method in your own handlers
28
36
  def perform
29
- template
37
+ key
30
38
  end
31
39
 
32
40
  def rescue_from_error(e)
33
- template
41
+ if self.class.error_handler
42
+ self.class.error_handler.call(e)
43
+ else
44
+ key
45
+ end
34
46
  end
35
47
  end
36
48
  end
@@ -1,5 +1,9 @@
1
1
  module Braai::Matchers
2
2
 
3
+ IterationMatcher = /({{\s*for (\w+) in (\w+)\s*}}(.+?){{\s*\/for\s*}})/im
4
+ DefaultMatcher = /({{\s*([\w\.]+)\s*}})/i
5
+ RegionMatcher = /({{\s*([\w]+)\s*}}(.*){{\s*\/([\w]+)\s*}})/mi
6
+
3
7
  def matchers
4
8
  @matchers ||= reset!
5
9
  end
@@ -22,8 +26,8 @@ module Braai::Matchers
22
26
  end
23
27
 
24
28
  def set_defaults
25
- map(/({{\s*for (\w+) in (\w+)\s*}}(.+?){{\s*\/for\s*}})/im, Braai::Handlers::Iteration)
26
- map(/({{\s*([\w\.]+)\s*}})/i, Braai::Handlers::Default)
29
+ map(IterationMatcher, Braai::Handlers::Iteration)
30
+ map(DefaultMatcher, Braai::Handlers::Default)
27
31
  end
28
32
 
29
33
  end
@@ -1,3 +1,3 @@
1
1
  module Braai
2
- VERSION = "1.4.0"
2
+ VERSION = "1.4.1"
3
3
  end
@@ -11,6 +11,11 @@ describe Braai::Handlers::Base do
11
11
  let(:matches) { [ "{{ person.name }}", "name" ] }
12
12
  let(:handler) { Braai::Handlers::Base.new(template, key, matches) }
13
13
 
14
+ before do
15
+ Braai::Handlers::Base.error_handler = nil
16
+ Braai::Handlers::Base.nomatch_handler = nil
17
+ end
18
+
14
19
  describe '.call' do
15
20
 
16
21
  it 'condition' do
@@ -32,8 +37,8 @@ describe Braai::Handlers::Base do
32
37
 
33
38
  describe '#perform' do
34
39
 
35
- it 'returns the original template by default' do
36
- handler.perform.must_equal("Hello {{ person.name }}")
40
+ it 'returns the key by default (should be overridden in implementations)' do
41
+ handler.perform.must_equal("{{ person.name }}")
37
42
  end
38
43
  end
39
44
 
@@ -44,16 +49,37 @@ describe Braai::Handlers::Base do
44
49
  handler.safe_perform
45
50
  end
46
51
 
47
- it 'should receive rescue_from_error when needed' do
52
+ it 'rescues from error when needed' do
48
53
  handler.stubs(:perform).raises(ArgumentError)
49
- handler.safe_perform.must_equal('Hello {{ person.name }}')
54
+ handler.expects(:rescue_from_error).returns('<!-- foo -->')
55
+ handler.safe_perform.must_equal('<!-- foo -->')
56
+ end
57
+
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 }} -->")
50
61
  end
51
62
  end
52
63
 
53
64
  describe '#rescue_from_error' do
54
65
 
55
- it 'call the class method of the same name' do
56
- handler.rescue_from_error(ArgumentError).must_equal('Hello {{ person.name }}')
66
+ it 'defaults to returning the unmodified template' do
67
+ handler.rescue_from_error(ArgumentError).must_equal('{{ person.name }}')
68
+ end
69
+
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 }} -->')
73
+ end
74
+ end
75
+
76
+ describe 'default template rendering' do
77
+
78
+ it 'performs no substitution' do
79
+ Braai::Template.clear!
80
+ Braai::Template.map(Braai::Matchers::DefaultMatcher, Braai::Handlers::Base)
81
+ res = Braai::Template.new("{{ greet }} my name is {{ name }}").render(greet: "Hello")
82
+ res.must_equal("{{ greet }} my name is {{ name }}")
57
83
  end
58
84
  end
59
85
  end
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.0
4
+ version: 1.4.1
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-01-30 00:00:00.000000000 Z
12
+ date: 2013-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport