braai 1.0.1 → 1.1.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.
- data/Gemfile.lock +1 -1
- data/README.md +17 -21
- data/lib/braai/configuration.rb +2 -8
- data/lib/braai/context.rb +14 -49
- data/lib/braai/matchers.rb +40 -0
- data/lib/braai/template.rb +6 -15
- data/lib/braai/version.rb +1 -1
- data/lib/braai.rb +1 -2
- data/spec/braai/matchers_spec.rb +55 -0
- data/spec/braai/readme_spec.rb +72 -0
- data/spec/braai/template_spec.rb +17 -71
- metadata +7 -6
- data/lib/braai/errors.rb +0 -7
- data/lib/braai/handlers.rb +0 -33
- data/spec/braai/handlers_spec.rb +0 -55
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -23,12 +23,12 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
Braai comes shipped with two simple matchers for you, but you can easily add your own.
|
25
25
|
|
26
|
-
The first matcher is a simple <code>to_s</code>
|
26
|
+
The first matcher is a simple <code>to_s</code> matcher. It will match a single variable and then call <code>to_s</code> on it:
|
27
27
|
|
28
28
|
<pre><code>
|
29
29
|
template = "Hi {{ name }}!"
|
30
30
|
response = Braai::Template.new(template).render(name: "Mark")
|
31
|
-
response
|
31
|
+
response.should eql "Hi Mark!"
|
32
32
|
</code></pre>
|
33
33
|
|
34
34
|
The second matcher will call a method on the variable.
|
@@ -36,7 +36,7 @@ The second matcher will call a method on the variable.
|
|
36
36
|
<pre><code>
|
37
37
|
template = "Hi {{ name.upcase }}!"
|
38
38
|
response = Braai::Template.new(template).render(name: "Mark")
|
39
|
-
response
|
39
|
+
response.should eql "Hi MARK!"
|
40
40
|
</code></pre>
|
41
41
|
|
42
42
|
### Custom Matchers
|
@@ -45,15 +45,16 @@ Braai let's you easily define your own matchers to do whatever you would like to
|
|
45
45
|
|
46
46
|
<pre><code>
|
47
47
|
template = "I'm {{ name }} and {{ mmm... bbq }}!"
|
48
|
-
Braai::Template.map(/mmm\.\.\. bbq/i) do |template, key, matches|
|
48
|
+
Braai::Template.map(/({{\s*mmm\.\.\. bbq\s*}})/i) do |template, key, matches|
|
49
49
|
"Damn, I love BBQ!"
|
50
50
|
end
|
51
51
|
|
52
|
-
Braai::Template.map(/name/i) do |template, key, matches|
|
53
|
-
template.attributes[
|
52
|
+
Braai::Template.map(/({{\s*name\s*}})/i) do |template, key, matches|
|
53
|
+
template.attributes[:name].upcase
|
54
54
|
end
|
55
55
|
|
56
|
-
Braai::Template.new(template).render
|
56
|
+
response = Braai::Template.new(template).render(name: "mark")
|
57
|
+
response.should eql "I'm MARK and Damn, I love BBQ!!"
|
57
58
|
</code></pre>
|
58
59
|
|
59
60
|
### For Loops
|
@@ -61,7 +62,7 @@ Braai::Template.new(template).render # => "I'm MARK and Damn, I love BBQ!!"
|
|
61
62
|
Braai supports looping right out of the box.
|
62
63
|
|
63
64
|
<pre><code>
|
64
|
-
template =
|
65
|
+
template = <<-EOF
|
65
66
|
<h1>{{ greet }}</h1>
|
66
67
|
<ul>
|
67
68
|
{{ for product in products }}
|
@@ -76,19 +77,14 @@ template = <<-EOF
|
|
76
77
|
<h2>{{greet.upcase}}</h2>
|
77
78
|
EOF
|
78
79
|
|
79
|
-
Braai::Template.new(template).render(greet: "mark", products: %w{car boat truck}, foods: %w{apple orange})
|
80
|
-
|
81
|
-
"<
|
82
|
-
<
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
</
|
87
|
-
<div>
|
88
|
-
<p>apple</p>
|
89
|
-
<p>orange</p>
|
90
|
-
</div>
|
91
|
-
<h2>MARK</h2>"
|
80
|
+
res = Braai::Template.new(template).render(greet: "mark", products: %w{car boat truck}, foods: %w{apple orange})
|
81
|
+
res.should match("<h1>mark</h1>")
|
82
|
+
res.should match("<li>car</li>")
|
83
|
+
res.should match("<li>boat</li>")
|
84
|
+
res.should match("<li>truck</li>")
|
85
|
+
res.should match("<p>apple</p>")
|
86
|
+
res.should match("<p>orange</p>")
|
87
|
+
res.should match("<h2>MARK</h2>")
|
92
88
|
</code></pre>
|
93
89
|
|
94
90
|
## Contributing
|
data/lib/braai/configuration.rb
CHANGED
@@ -1,16 +1,10 @@
|
|
1
1
|
class Braai::Configuration
|
2
2
|
|
3
3
|
attr_accessor :logger
|
4
|
-
attr_accessor :
|
5
|
-
attr_accessor :swallow_handler_errors
|
6
|
-
attr_accessor :for_loop_regex
|
7
|
-
attr_accessor :handler_regex
|
4
|
+
attr_accessor :swallow_matcher_errors
|
8
5
|
|
9
6
|
def initialize
|
10
|
-
self.
|
11
|
-
self.swallow_handler_errors = true
|
12
|
-
self.handler_regex = /{{\s*[^}]+\s*}}/i
|
13
|
-
self.for_loop_regex = /({{\s*for (\w+) in (\w+)\s*}}(.+?){{\s*\/for\s*}})/im
|
7
|
+
self.swallow_matcher_errors = true
|
14
8
|
end
|
15
9
|
|
16
10
|
def logger
|
data/lib/braai/context.rb
CHANGED
@@ -2,65 +2,30 @@ class Braai::Context
|
|
2
2
|
|
3
3
|
attr_accessor :attributes
|
4
4
|
attr_accessor :template
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :matchers
|
6
6
|
|
7
|
-
def initialize(template,
|
7
|
+
def initialize(template, matchers, attributes = {})
|
8
8
|
self.attributes = HashWithIndifferentAccess.new(attributes)
|
9
9
|
self.template = template.dup
|
10
|
-
self.
|
10
|
+
self.matchers = matchers
|
11
11
|
end
|
12
12
|
|
13
13
|
def render
|
14
14
|
begin
|
15
|
-
self.
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def render!
|
23
|
-
self.process_loops
|
24
|
-
self.process_keys
|
25
|
-
return self.template
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
def process_loops
|
30
|
-
loops = self.template.scan(Braai.config.for_loop_regex)
|
31
|
-
loops.each do |loop|
|
32
|
-
res = []
|
33
|
-
self.attributes[loop[2]].each do |val|
|
34
|
-
res << Braai::Context.new(loop[3], self.handlers, self.attributes.merge(loop[1] => val)).render!
|
35
|
-
end
|
36
|
-
self.template.gsub!(loop[0], res.join("\n"))
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def process_keys
|
41
|
-
keys = self.template.scan(Braai.config.handler_regex).flatten.uniq
|
42
|
-
keys.each do |key|
|
43
|
-
self.handle_key(key)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def handle_key(key)
|
48
|
-
stripped_key = key.gsub(/({|})/, "").strip
|
49
|
-
matched = false
|
50
|
-
self.handlers.each do |regex, handler|
|
51
|
-
regex = Regexp.new(regex)
|
52
|
-
if regex.match(stripped_key)
|
53
|
-
begin
|
54
|
-
val = handler.call(self, stripped_key, stripped_key.scan(regex).flatten)
|
55
|
-
self.template.gsub!(key, val.to_s) if val
|
56
|
-
rescue Exception => e
|
57
|
-
raise e unless Braai.config.swallow_handler_errors
|
15
|
+
self.matchers.each do |regex, matcher|
|
16
|
+
regex = Regexp.new(regex)
|
17
|
+
matches = self.template.scan(regex)
|
18
|
+
matches.each do |set|
|
19
|
+
val = matcher.call(self, set[0], set)
|
20
|
+
self.template.gsub!(set[0], val.to_s) if val
|
58
21
|
end
|
59
|
-
matched = true
|
60
|
-
break
|
61
22
|
end
|
23
|
+
return self.template
|
24
|
+
rescue Exception => e
|
25
|
+
puts e.inspect
|
26
|
+
Braai.logger.error(e)
|
27
|
+
raise e unless Braai.config.swallow_matcher_errors
|
62
28
|
end
|
63
|
-
raise Braai::MissingHandlerError.new(stripped_key) if !matched && Braai.config.raise_on_missing_handler
|
64
29
|
end
|
65
30
|
|
66
31
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Braai::Matchers
|
2
|
+
|
3
|
+
def matchers
|
4
|
+
@matchers ||= reset!
|
5
|
+
end
|
6
|
+
|
7
|
+
def map(regex, &block)
|
8
|
+
@matchers = {regex.to_s => block}.merge(self.matchers)
|
9
|
+
end
|
10
|
+
|
11
|
+
def unmap(regex)
|
12
|
+
self.matchers.delete(regex.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
def clear!
|
16
|
+
self.matchers.clear
|
17
|
+
end
|
18
|
+
|
19
|
+
def reset!
|
20
|
+
@matchers = {
|
21
|
+
/({{\s*for (\w+) in (\w+)\s*}}(.+?){{\s*\/for\s*}})/im => ->(template, key, matches) {
|
22
|
+
res = []
|
23
|
+
template.attributes[matches[2]].each do |val|
|
24
|
+
res << Braai::Context.new(matches[3], template.matchers, template.attributes.merge(matches[1] => val)).render
|
25
|
+
end
|
26
|
+
res.join("\n")
|
27
|
+
},
|
28
|
+
/({{\s*([\w]+)\.([\w]+)\s*}})/i => ->(template, key, matches) {
|
29
|
+
attr = template.attributes[matches[1]]
|
30
|
+
attr ? attr.send(matches[2]) : nil
|
31
|
+
},
|
32
|
+
/({{\s*([\w]+)\s*}})/i => ->(template, key, matches) {
|
33
|
+
attr = template.attributes[matches.last]
|
34
|
+
attr ? attr.to_s : nil
|
35
|
+
}
|
36
|
+
}
|
37
|
+
return @matchers
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
data/lib/braai/template.rb
CHANGED
@@ -1,27 +1,18 @@
|
|
1
1
|
class Braai::Template
|
2
|
-
extend Braai::
|
3
|
-
include Braai::
|
2
|
+
extend Braai::Matchers
|
3
|
+
include Braai::Matchers
|
4
4
|
|
5
5
|
attr_accessor :attributes
|
6
6
|
attr_accessor :template
|
7
7
|
|
8
|
-
def initialize(template,
|
8
|
+
def initialize(template, matchers = {})
|
9
9
|
self.template = template
|
10
|
-
@
|
10
|
+
@matchers = self.class.matchers.merge(matchers)
|
11
11
|
end
|
12
12
|
|
13
13
|
def render(attributes = {})
|
14
|
-
|
15
|
-
|
16
|
-
rescue Exception => e
|
17
|
-
Braai.logger.error(e)
|
18
|
-
raise e
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def render!(attributes)
|
23
|
-
context = Braai::Context.new(self.template, self.handlers, attributes)
|
24
|
-
context.render!
|
14
|
+
context = Braai::Context.new(self.template, self.matchers, attributes)
|
15
|
+
context.render
|
25
16
|
end
|
26
17
|
|
27
18
|
end
|
data/lib/braai/version.rb
CHANGED
data/lib/braai.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Braai::Matchers do
|
4
|
+
include Braai::Matchers
|
5
|
+
|
6
|
+
describe 'map' do
|
7
|
+
|
8
|
+
it "maps a new matcher" do
|
9
|
+
map("foo") {}
|
10
|
+
matchers.should include("foo")
|
11
|
+
end
|
12
|
+
|
13
|
+
it "makes the latest matcher the first matcher in the list" do
|
14
|
+
map("foo") {}
|
15
|
+
map("bar") {}
|
16
|
+
matchers.keys.first.should eql("bar")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'unmap' do
|
22
|
+
|
23
|
+
it "unmaps a matcher" do
|
24
|
+
map("foo") {}
|
25
|
+
matchers.should include("foo")
|
26
|
+
unmap("foo")
|
27
|
+
matchers.should_not include("foo")
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'clear!' do
|
33
|
+
|
34
|
+
it "removes all of the matchers" do
|
35
|
+
map("foo") {}
|
36
|
+
matchers.should_not be_empty
|
37
|
+
clear!
|
38
|
+
matchers.should be_empty
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'reset!' do
|
44
|
+
|
45
|
+
it "resets the matchers to their original state" do
|
46
|
+
matchers.should have(3).matchers
|
47
|
+
map("foo") {}
|
48
|
+
matchers.should have(4).matchers
|
49
|
+
reset!
|
50
|
+
matchers.should have(3).matchers
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'README' do
|
4
|
+
|
5
|
+
it "simple example" do
|
6
|
+
template = "Hi {{ name }}!"
|
7
|
+
response = Braai::Template.new(template).render(name: "Mark")
|
8
|
+
response.should eql "Hi Mark!"
|
9
|
+
end
|
10
|
+
|
11
|
+
it "simple method call example" do
|
12
|
+
template = "Hi {{ name.upcase }}!"
|
13
|
+
response = Braai::Template.new(template).render(name: "Mark")
|
14
|
+
response.should eql "Hi MARK!"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "custom matcher example" do
|
18
|
+
template = "I'm {{ name }} and {{ mmm... bbq }}!"
|
19
|
+
Braai::Template.map(/({{\s*mmm\.\.\. bbq\s*}})/i) do |template, key, matches|
|
20
|
+
"Damn, I love BBQ!"
|
21
|
+
end
|
22
|
+
|
23
|
+
Braai::Template.map(/({{\s*name\s*}})/i) do |template, key, matches|
|
24
|
+
template.attributes[:name].upcase
|
25
|
+
end
|
26
|
+
|
27
|
+
response = Braai::Template.new(template).render(name: "mark")
|
28
|
+
response.should eql "I'm MARK and Damn, I love BBQ!!"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "for loop example" do
|
32
|
+
template = <<-EOF
|
33
|
+
<h1>{{ greet }}</h1>
|
34
|
+
<ul>
|
35
|
+
{{ for product in products }}
|
36
|
+
<li>{{ product }}</li>
|
37
|
+
{{ /for }}
|
38
|
+
</ul>
|
39
|
+
<div>
|
40
|
+
{{ for food in foods }}
|
41
|
+
<p>{{ food }}</p>
|
42
|
+
{{ /for }}
|
43
|
+
</div>
|
44
|
+
<h2>{{greet.upcase}}</h2>
|
45
|
+
EOF
|
46
|
+
|
47
|
+
res = Braai::Template.new(template).render(greet: "mark", products: %w{car boat truck}, foods: %w{apple orange})
|
48
|
+
res.should match("<h1>mark</h1>")
|
49
|
+
res.should match("<li>car</li>")
|
50
|
+
res.should match("<li>boat</li>")
|
51
|
+
res.should match("<li>truck</li>")
|
52
|
+
res.should match("<p>apple</p>")
|
53
|
+
res.should match("<p>orange</p>")
|
54
|
+
res.should match("<h2>MARK</h2>")
|
55
|
+
end
|
56
|
+
|
57
|
+
# it "description" do
|
58
|
+
# template = "I'm {{ name }} and {{ mmm... bbq }}!"
|
59
|
+
# Braai::Template.map(/mmm\.\.\. bbq/i) do |template, key, matches|
|
60
|
+
# puts "key: #{key.inspect}"
|
61
|
+
# puts "matches: #{matches.inspect}"
|
62
|
+
# "Damn, I love BBQ!"
|
63
|
+
# end
|
64
|
+
|
65
|
+
# Braai::Template.map(/name/i) do |template, key, matches|
|
66
|
+
# template.attributes[matches.first].upcase
|
67
|
+
# end
|
68
|
+
|
69
|
+
# puts Braai::Template.new(template).render(name: "Mark")
|
70
|
+
# end
|
71
|
+
|
72
|
+
end
|
data/spec/braai/template_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Braai::Template do
|
4
4
|
|
5
5
|
let(:greet_regex) { /^greet$/i }
|
6
|
-
let(:
|
6
|
+
let(:greet_matcher) do
|
7
7
|
->(view, key, matches) {
|
8
8
|
view.attributes[:greet]
|
9
9
|
}
|
@@ -11,10 +11,10 @@ describe Braai::Template do
|
|
11
11
|
|
12
12
|
describe '.map' do
|
13
13
|
|
14
|
-
it "let's you register a
|
15
|
-
Braai::Template.
|
16
|
-
Braai::Template.map(greet_regex, &
|
17
|
-
Braai::Template.
|
14
|
+
it "let's you register a matcher" do
|
15
|
+
Braai::Template.matchers.should_not have_key(greet_regex.to_s)
|
16
|
+
Braai::Template.map(greet_regex, &greet_matcher)
|
17
|
+
Braai::Template.matchers.should have_key(greet_regex.to_s)
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -22,7 +22,7 @@ describe Braai::Template do
|
|
22
22
|
describe '#render' do
|
23
23
|
|
24
24
|
before(:each) do
|
25
|
-
Braai::Template.map(greet_regex, &
|
25
|
+
Braai::Template.map(greet_regex, &greet_matcher)
|
26
26
|
end
|
27
27
|
|
28
28
|
it "renders a simple template" do
|
@@ -57,7 +57,6 @@ EOF
|
|
57
57
|
|
58
58
|
it "renders the loop" do
|
59
59
|
res = Braai::Template.new(template).render(greet: "mark", products: %w{car boat truck}, foods: %w{apple orange})
|
60
|
-
puts res
|
61
60
|
res.should match("<h1>mark</h1>")
|
62
61
|
res.should match("<li>car</li>")
|
63
62
|
res.should match("<li>boat</li>")
|
@@ -67,28 +66,13 @@ EOF
|
|
67
66
|
res.should match("<h2>MARK</h2>")
|
68
67
|
end
|
69
68
|
|
70
|
-
# it "description" do
|
71
|
-
# template = "I'm {{ name }} and {{ mmm... bbq }}!"
|
72
|
-
# Braai::Template.map(/mmm\.\.\. bbq/i) do |template, key, matches|
|
73
|
-
# puts "key: #{key.inspect}"
|
74
|
-
# puts "matches: #{matches.inspect}"
|
75
|
-
# "Damn, I love BBQ!"
|
76
|
-
# end
|
77
|
-
|
78
|
-
# Braai::Template.map(/name/i) do |template, key, matches|
|
79
|
-
# template.attributes[matches.first].upcase
|
80
|
-
# end
|
81
|
-
|
82
|
-
# puts Braai::Template.new(template).render(name: "Mark")
|
83
|
-
# end
|
84
|
-
|
85
69
|
end
|
86
70
|
|
87
|
-
context "default
|
71
|
+
context "default matcher" do
|
88
72
|
|
89
73
|
let(:template) { "{{ greet }} {{ name.upcase }}" }
|
90
74
|
|
91
|
-
it "uses the default
|
75
|
+
it "uses the default matcher to render" do
|
92
76
|
res = Braai::Template.new(template).render(greet: "Hi", name: "mark")
|
93
77
|
res.should eql("Hi MARK")
|
94
78
|
end
|
@@ -100,73 +84,35 @@ EOF
|
|
100
84
|
|
101
85
|
end
|
102
86
|
|
103
|
-
context "
|
104
|
-
|
105
|
-
before(:each) do
|
106
|
-
Braai::Template.reset!
|
107
|
-
end
|
108
|
-
|
109
|
-
after(:each) do
|
110
|
-
Braai.config.raise_on_missing_handler = false
|
111
|
-
end
|
112
|
-
|
113
|
-
context "raise_on_missing_handler is true" do
|
114
|
-
|
115
|
-
before(:each) do
|
116
|
-
Braai.config.raise_on_missing_handler = true
|
117
|
-
end
|
118
|
-
|
119
|
-
it "raises an error" do
|
120
|
-
expect {
|
121
|
-
Braai::Template.new("{{ please.greet.me }}").render(greet: "Hi Mark")
|
122
|
-
}.to raise_error(Braai::MissingHandlerError)
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
|
127
|
-
context "raise_on_missing_handler is false" do
|
128
|
-
|
129
|
-
it "does not raise an error" do
|
130
|
-
expect {
|
131
|
-
res = Braai::Template.new("{{ greet }}").render(greet: "Hi Mark")
|
132
|
-
res.should eql("{{ greet }}")
|
133
|
-
}.to_not raise_error(Braai::MissingHandlerError)
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
139
|
-
|
140
|
-
context "handler errors" do
|
87
|
+
context "matcher errors" do
|
141
88
|
|
142
89
|
before(:each) do
|
143
|
-
Braai::Template.map(
|
90
|
+
Braai::Template.map(/foo/) do |view, key, matches|
|
144
91
|
raise ArgumentError
|
145
92
|
end
|
146
93
|
end
|
147
94
|
|
148
|
-
let(:template) { "
|
95
|
+
let(:template) { "foo" }
|
149
96
|
|
150
|
-
context "
|
97
|
+
context "swallow_matcher_errors is true" do
|
151
98
|
|
152
|
-
it "swallows errors in the
|
99
|
+
it "swallows errors in the matcher" do
|
153
100
|
expect {
|
154
101
|
res = Braai::Template.new(template).render()
|
155
|
-
res.should eql template
|
156
102
|
}.to_not raise_error
|
157
103
|
end
|
158
104
|
|
159
105
|
end
|
160
106
|
|
161
|
-
context "
|
107
|
+
context "swallow_matcher_errors is false" do
|
162
108
|
|
163
109
|
before(:each) do
|
164
|
-
Braai.config.
|
110
|
+
Braai.config.swallow_matcher_errors = false
|
165
111
|
end
|
166
112
|
|
167
|
-
it "raises the errors from the
|
113
|
+
it "raises the errors from the matcher" do
|
168
114
|
expect {
|
169
|
-
Braai::Template.new(template).render
|
115
|
+
res = Braai::Template.new(template).render
|
170
116
|
}.to raise_error(ArgumentError)
|
171
117
|
end
|
172
118
|
|
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.0
|
4
|
+
version: 1.1.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: 2012-08-
|
12
|
+
date: 2012-08-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -44,11 +44,11 @@ files:
|
|
44
44
|
- lib/braai.rb
|
45
45
|
- lib/braai/configuration.rb
|
46
46
|
- lib/braai/context.rb
|
47
|
-
- lib/braai/
|
48
|
-
- lib/braai/handlers.rb
|
47
|
+
- lib/braai/matchers.rb
|
49
48
|
- lib/braai/template.rb
|
50
49
|
- lib/braai/version.rb
|
51
|
-
- spec/braai/
|
50
|
+
- spec/braai/matchers_spec.rb
|
51
|
+
- spec/braai/readme_spec.rb
|
52
52
|
- spec/braai/template_spec.rb
|
53
53
|
- spec/spec_helper.rb
|
54
54
|
homepage: ''
|
@@ -76,6 +76,7 @@ signing_key:
|
|
76
76
|
specification_version: 3
|
77
77
|
summary: Fully extensible templating system.
|
78
78
|
test_files:
|
79
|
-
- spec/braai/
|
79
|
+
- spec/braai/matchers_spec.rb
|
80
|
+
- spec/braai/readme_spec.rb
|
80
81
|
- spec/braai/template_spec.rb
|
81
82
|
- spec/spec_helper.rb
|
data/lib/braai/errors.rb
DELETED
data/lib/braai/handlers.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Braai::Handlers
|
2
|
-
|
3
|
-
def handlers
|
4
|
-
@handlers ||= reset!
|
5
|
-
end
|
6
|
-
|
7
|
-
def map(regex, &block)
|
8
|
-
@handlers = {regex.to_s => block}.merge(self.handlers)
|
9
|
-
end
|
10
|
-
|
11
|
-
def unmap(regex)
|
12
|
-
self.handlers.delete(regex.to_s)
|
13
|
-
end
|
14
|
-
|
15
|
-
def clear!
|
16
|
-
self.handlers.clear
|
17
|
-
end
|
18
|
-
|
19
|
-
def reset!
|
20
|
-
@handlers = {
|
21
|
-
/^([\w]+)\.([\w]+)$/i => ->(template, key, matches) {
|
22
|
-
attr = template.attributes[matches.first]
|
23
|
-
attr ? attr.send(matches.last) : nil
|
24
|
-
},
|
25
|
-
/^(\w+)$/i => ->(template, key, matches) {
|
26
|
-
attr = template.attributes[matches.first]
|
27
|
-
attr ? attr.to_s : nil
|
28
|
-
}
|
29
|
-
}
|
30
|
-
return @handlers
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
data/spec/braai/handlers_spec.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Braai::Handlers do
|
4
|
-
include Braai::Handlers
|
5
|
-
|
6
|
-
describe 'map' do
|
7
|
-
|
8
|
-
it "maps a new handler" do
|
9
|
-
map("foo") {}
|
10
|
-
handlers.should include("foo")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "makes the latest handler the first handler in the list" do
|
14
|
-
map("foo") {}
|
15
|
-
map("bar") {}
|
16
|
-
handlers.keys.first.should eql("bar")
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
describe 'unmap' do
|
22
|
-
|
23
|
-
it "unmaps a handler" do
|
24
|
-
map("foo") {}
|
25
|
-
handlers.should include("foo")
|
26
|
-
unmap("foo")
|
27
|
-
handlers.should_not include("foo")
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
describe 'clear!' do
|
33
|
-
|
34
|
-
it "removes all of the handlers" do
|
35
|
-
map("foo") {}
|
36
|
-
handlers.should_not be_empty
|
37
|
-
clear!
|
38
|
-
handlers.should be_empty
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
describe 'reset!' do
|
44
|
-
|
45
|
-
it "resets the handlers to their original state" do
|
46
|
-
handlers.should have(2).handlers
|
47
|
-
map("foo") {}
|
48
|
-
handlers.should have(3).handlers
|
49
|
-
reset!
|
50
|
-
handlers.should have(2).handlers
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|