braai 1.4.0 → 1.4.1

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.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