mvz-ruby-handlebars 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
- require_relative 'spec_helper'
2
- require_relative '../lib/ruby-handlebars'
3
- require_relative '../lib/ruby-handlebars/escapers/dummy_escaper'
1
+ require_relative "spec_helper"
2
+ require_relative "../lib/ruby-handlebars"
3
+ require_relative "../lib/ruby-handlebars/escapers/dummy_escaper"
4
4
 
5
5
 
6
6
  describe Handlebars::Handlebars do
@@ -10,140 +10,140 @@ describe Handlebars::Handlebars do
10
10
  hbs.compile(template).call(args)
11
11
  end
12
12
 
13
- context 'evaluating' do
14
- it 'a dummy template' do
15
- expect(evaluate('My simple template')).to eq('My simple template')
13
+ context "evaluating" do
14
+ it "a dummy template" do
15
+ expect(evaluate("My simple template")).to eq("My simple template")
16
16
  end
17
17
 
18
- it 'a simple replacement' do
19
- expect(evaluate('Hello {{name}}', {name: 'world'})).to eq('Hello world')
18
+ it "a simple replacement" do
19
+ expect(evaluate("Hello {{name}}", {name: "world"})).to eq("Hello world")
20
20
  end
21
21
 
22
- it 'a double braces replacement with unsafe characters' do
23
- expect(evaluate('Hello {{name}}', {name: '<"\'>&'})).to eq('Hello &lt;&quot;&#39;&gt;&amp;')
22
+ it "a double braces replacement with unsafe characters" do
23
+ expect(evaluate("Hello {{name}}", {name: '<"\'>&'})).to eq("Hello &lt;&quot;&#39;&gt;&amp;")
24
24
  end
25
25
 
26
- it 'a double braces replacement with nil' do
27
- expect(evaluate('Hello {{name}}', {name: nil})).to eq('Hello ')
26
+ it "a double braces replacement with nil" do
27
+ expect(evaluate("Hello {{name}}", {name: nil})).to eq("Hello ")
28
28
  end
29
29
 
30
- it 'a triple braces replacement with unsafe characters' do
31
- expect(evaluate('Hello {{{name}}}', {name: '<"\'>&'})).to eq('Hello <"\'>&')
30
+ it "a triple braces replacement with unsafe characters" do
31
+ expect(evaluate("Hello {{{name}}}", {name: '<"\'>&'})).to eq('Hello <"\'>&')
32
32
  end
33
33
 
34
- it 'allows values specified by methods' do
35
- expect(evaluate('Hello {{name}}', double(name: 'world'))).to eq('Hello world')
34
+ it "allows values specified by methods" do
35
+ expect(evaluate("Hello {{name}}", double(name: "world"))).to eq("Hello world")
36
36
  end
37
37
 
38
- it 'prefers hash value over method value' do
39
- expect(evaluate('Hello {{name}}', double(name: 'world', '[]': 'dog', has_key?: true))).to eq('Hello dog')
38
+ it "prefers hash value over method value" do
39
+ expect(evaluate("Hello {{name}}", double(name: "world", '[]': "dog", has_key?: true))).to eq("Hello dog")
40
40
  end
41
41
 
42
- it 'handles object that implement #[] but not #has_key?' do
43
- expect(evaluate('Hello {{name}}', double(name: 'world', '[]': 'dog'))).to eq('Hello world')
42
+ it "handles object that implement #[] but not #has_key?" do
43
+ expect(evaluate("Hello {{name}}", double(name: "world", '[]': "dog"))).to eq("Hello world")
44
44
  end
45
45
 
46
- it 'a replacement with a path' do
47
- expect(evaluate('My simple template: {{person.name}}', {person: {name: 'Another name'}})).to eq('My simple template: Another name')
46
+ it "a replacement with a path" do
47
+ expect(evaluate("My simple template: {{person.name}}", {person: {name: "Another name"}})).to eq("My simple template: Another name")
48
48
  end
49
49
 
50
- it 'prefers a replacement even if its name matches a helper' do
51
- expect(evaluate('Hello {{each}}', {each: 'world'})).to eq('Hello world')
50
+ it "prefers a replacement even if its name matches a helper" do
51
+ expect(evaluate("Hello {{each}}", {each: "world"})).to eq("Hello world")
52
52
  end
53
53
 
54
- it 'handles a parameter with a dash' do
55
- expect(evaluate('Hello {{first-name}}', double("first-name": 'world'))).to eq('Hello world')
54
+ it "handles a parameter with a dash" do
55
+ expect(evaluate("Hello {{first-name}}", double("first-name": "world"))).to eq("Hello world")
56
56
  end
57
57
 
58
- context 'partials' do
59
- it 'simple' do
60
- hbs.register_partial('plic', "Plic")
58
+ context "partials" do
59
+ it "simple" do
60
+ hbs.register_partial("plic", "Plic")
61
61
  expect(evaluate("Hello {{> plic}}")).to eq("Hello Plic")
62
62
  end
63
63
 
64
- it 'using a name with a slash' do
65
- hbs.register_partial('parent/plic', "Plic")
64
+ it "using a name with a slash" do
65
+ hbs.register_partial("parent/plic", "Plic")
66
66
  expect(evaluate("Hello {{> parent/plic}}")).to eq("Hello Plic")
67
67
  end
68
68
 
69
- it 'using a name that begins with a slash' do
70
- hbs.register_partial('/parent/plic', "Plic")
69
+ it "using a name that begins with a slash" do
70
+ hbs.register_partial("/parent/plic", "Plic")
71
71
  expect(evaluate("Hello {{> /parent/plic}}")).to eq("Hello Plic")
72
72
  end
73
73
 
74
- it 'using context' do
75
- hbs.register_partial('brackets', "[{{name}}]")
76
- expect(evaluate("Hello {{> brackets}}", {name: 'world'})).to eq("Hello [world]")
74
+ it "using context" do
75
+ hbs.register_partial("brackets", "[{{name}}]")
76
+ expect(evaluate("Hello {{> brackets}}", {name: "world"})).to eq("Hello [world]")
77
77
  end
78
78
 
79
- it 'with a string argument' do
80
- hbs.register_partial('with_args', "[{{name}}]")
79
+ it "with a string argument" do
80
+ hbs.register_partial("with_args", "[{{name}}]")
81
81
  expect(evaluate("Hello {{> with_args name='jon'}}")).to eq("Hello [jon]")
82
82
  end
83
83
 
84
- it 'with string arguments' do
85
- hbs.register_partial('with_args', "[{{fname}} {{lname}}]")
84
+ it "with string arguments" do
85
+ hbs.register_partial("with_args", "[{{fname}} {{lname}}]")
86
86
  expect(evaluate("Hello {{> with_args fname='jon' lname='doe'}}")).to eq("Hello [jon doe]")
87
87
  end
88
88
 
89
- it 'with variables in arguments' do
90
- hbs.register_partial('with_args', "[{{fname}} {{lname}}]")
91
- expect(evaluate("Hello {{> with_args fname='jon' lname=last_name}}", {last_name: 'doe'})).to eq("Hello [jon doe]")
89
+ it "with variables in arguments" do
90
+ hbs.register_partial("with_args", "[{{fname}} {{lname}}]")
91
+ expect(evaluate("Hello {{> with_args fname='jon' lname=last_name}}", {last_name: "doe"})).to eq("Hello [jon doe]")
92
92
  end
93
93
 
94
- it 'with a helper as an argument' do
95
- hbs.register_helper('wrap_parens') {|context, value| "(#{value})"}
96
- hbs.register_partial('with_args', "[{{fname}} {{lname}}]")
94
+ it "with a helper as an argument" do
95
+ hbs.register_helper("wrap_parens") {|context, value| "(#{value})"}
96
+ hbs.register_partial("with_args", "[{{fname}} {{lname}}]")
97
97
  expect(evaluate("Hello {{> with_args fname='jon' lname=(wrap_parens 'doe')}}")).to eq("Hello [jon (doe)]")
98
98
  end
99
99
  end
100
100
 
101
- context 'helpers' do
102
- it 'without any argument' do
103
- hbs.register_helper('rainbow') {|context| "-"}
101
+ context "helpers" do
102
+ it "without any argument" do
103
+ hbs.register_helper("rainbow") {|context| "-"}
104
104
  expect(evaluate("{{rainbow}}")).to eq("-")
105
105
  end
106
106
 
107
- it 'with a single argument' do
108
- hbs.register_helper('noah') {|context, value| value.gsub(/a/, '')}
107
+ it "with a single argument" do
108
+ hbs.register_helper("noah") {|context, value| value.gsub(/a/, "")}
109
109
 
110
- expect(evaluate("{{noah country}}", {country: 'Canada'})).to eq("Cnd")
110
+ expect(evaluate("{{noah country}}", {country: "Canada"})).to eq("Cnd")
111
111
  end
112
112
 
113
- it 'with multiple arguments, including strings' do
114
- hbs.register_helper('add') {|context, left, op, right| "#{left} #{op} #{right}"}
113
+ it "with multiple arguments, including strings" do
114
+ hbs.register_helper("add") {|context, left, op, right| "#{left} #{op} #{right}"}
115
115
 
116
- expect(evaluate("{{add left '&' right}}", {left: 'Law', right: 'Order'})).to eq("Law &amp; Order")
117
- expect(evaluate("{{{add left '&' right}}}", {left: 'Law', right: 'Order'})).to eq("Law & Order")
116
+ expect(evaluate("{{add left '&' right}}", {left: "Law", right: "Order"})).to eq("Law &amp; Order")
117
+ expect(evaluate("{{{add left '&' right}}}", {left: "Law", right: "Order"})).to eq("Law & Order")
118
118
  end
119
119
 
120
- it 'with optional arguments not specified' do
121
- hbs.register_helper('rainbow') {|context, *opts| "-"}
120
+ it "with optional arguments not specified" do
121
+ hbs.register_helper("rainbow") {|context, *opts| "-"}
122
122
  expect(evaluate("{{rainbow}}")).to eq("-")
123
123
  end
124
124
 
125
- it 'with an empty string argument' do
126
- hbs.register_helper('noah') {|context, value| value.to_s.gsub(/a/, '')}
125
+ it "with an empty string argument" do
126
+ hbs.register_helper("noah") {|context, value| value.to_s.gsub(/a/, "")}
127
127
 
128
128
  expect(evaluate("hey{{noah ''}}there", {})).to eq("heythere")
129
129
  end
130
130
 
131
- it 'with helpers as arguments' do
132
- hbs.register_helper('wrap_parens') {|context, value| "(#{value})"}
133
- hbs.register_helper('wrap_dashes') {|context, value| "-#{value}-"}
131
+ it "with helpers as arguments" do
132
+ hbs.register_helper("wrap_parens") {|context, value| "(#{value})"}
133
+ hbs.register_helper("wrap_dashes") {|context, value| "-#{value}-"}
134
134
 
135
135
  expect(evaluate('{{wrap_dashes (wrap_parens "hello")}}', {})).to eq("-(hello)-")
136
- expect(evaluate('{{wrap_dashes (wrap_parens world)}}', {world: "world"})).to eq("-(world)-")
136
+ expect(evaluate("{{wrap_dashes (wrap_parens world)}}", {world: "world"})).to eq("-(world)-")
137
137
  end
138
138
 
139
- it 'with an empty string argument' do
140
- hbs.register_helper('noah') {|context, value| value.to_s.gsub(/a/, '')}
139
+ it "with an empty string argument" do
140
+ hbs.register_helper("noah") {|context, value| value.to_s.gsub(/a/, "")}
141
141
 
142
142
  expect(evaluate("hey{{noah ''}}there", {})).to eq("heythere")
143
143
  end
144
144
 
145
- it 'block' do
146
- hbs.register_helper('comment') do |context, commenter, block|
145
+ it "block" do
146
+ hbs.register_helper("comment") do |context, commenter, block|
147
147
  block.fn(context).split("\n").map do |line|
148
148
  "#{commenter} #{line}"
149
149
  end.join("\n")
@@ -153,14 +153,14 @@ describe Handlebars::Handlebars do
153
153
  "Author: {{author.name}}, {{author.company}}",
154
154
  "Date: {{commit_date}}",
155
155
  "{{/comment}}"
156
- ].join("\n"), {author: {name: 'Vincent', company: 'Hiptest'}, commit_date: 'today'})).to eq([
156
+ ].join("\n"), {author: {name: "Vincent", company: "Hiptest"}, commit_date: "today"})).to eq([
157
157
  "// Author: Vincent, Hiptest",
158
158
  "// Date: today"
159
159
  ].join("\n"))
160
160
  end
161
161
  end
162
162
 
163
- it 'block without arguments' do
163
+ it "block without arguments" do
164
164
  template = [
165
165
  "<tr>{{#indent}}",
166
166
  "{{#each items}}<td>{{{ this }}}</td>",
@@ -169,13 +169,13 @@ describe Handlebars::Handlebars do
169
169
  "</tr>"
170
170
  ].join("\n")
171
171
 
172
- hbs.register_helper('indent') do |context, block|
172
+ hbs.register_helper("indent") do |context, block|
173
173
  block.fn(context).split("\n").map do |line|
174
174
  " #{line}"
175
175
  end.join("\n")
176
176
  end
177
177
 
178
- expect(evaluate(template, {items: ['a', 'b', 'c']})).to eq([
178
+ expect(evaluate(template, {items: ["a", "b", "c"]})).to eq([
179
179
  "<tr> ",
180
180
  " <td>a</td>",
181
181
  " <td>b</td>",
@@ -184,33 +184,33 @@ describe Handlebars::Handlebars do
184
184
  ].join("\n"))
185
185
  end
186
186
 
187
- it 'block parameters can be paths' do
188
- data = {company: {people: ['a', 'b', 'c']}}
189
- expect(evaluate("{{#each company.people}}{{{this}}}{{/each}}", data)).to eq('abc')
187
+ it "block parameters can be paths" do
188
+ data = {company: {people: ["a", "b", "c"]}}
189
+ expect(evaluate("{{#each company.people}}{{{this}}}{{/each}}", data)).to eq("abc")
190
190
  end
191
191
 
192
- it 'a else keyword out of a helper will raise an error' do
193
- expect { evaluate('My {{ else }} template') }.to raise_exception(Parslet::ParseFailed)
192
+ it "a else keyword out of a helper will raise an error" do
193
+ expect { evaluate("My {{ else }} template") }.to raise_exception(Parslet::ParseFailed)
194
194
  end
195
195
 
196
196
  it '"else" can be part of a path' do
197
- expect(evaluate('My {{ something.else }} template', { something: { else: 'awesome' }})).to eq('My awesome template')
197
+ expect(evaluate("My {{ something.else }} template", { something: { else: "awesome" }})).to eq("My awesome template")
198
198
  end
199
199
  end
200
200
 
201
- context 'as_helpers' do
202
- it 'can be used to have names parameters inside the block' do
203
- hbs.register_as_helper('test_with') do |context, value, name, block|
201
+ context "as_helpers" do
202
+ it "can be used to have names parameters inside the block" do
203
+ hbs.register_as_helper("test_with") do |context, value, name, block|
204
204
  context.with_temporary_context(name => value) do
205
205
  block.fn(context)
206
206
  end
207
207
  end
208
208
 
209
- expect(evaluate("{{#test_with name as |duck|}}Duck name is: {{duck}}{{/test_with}}", {name: "Dewey"})).to eq('Duck name is: Dewey')
209
+ expect(evaluate("{{#test_with name as |duck|}}Duck name is: {{duck}}{{/test_with}}", {name: "Dewey"})).to eq("Duck name is: Dewey")
210
210
  end
211
211
 
212
212
  it 'can have multiple "as" parameters' do
213
- hbs.register_as_helper('test_with') do |context, value1, value2, name1, name2, block|
213
+ hbs.register_as_helper("test_with") do |context, value1, value2, name1, name2, block|
214
214
  mapping = {}
215
215
  mapping[name1] = value1
216
216
  mapping[name2] = value2
@@ -220,47 +220,47 @@ describe Handlebars::Handlebars do
220
220
  end
221
221
  end
222
222
 
223
- expect(evaluate("{{#test_with name1 name2 as |duck1 duck2|}}Duck names are {{duck1}} and {{duck2}}{{/test_with}}", {name1: "Huey", name2: "Dewey"})).to eq('Duck names are Huey and Dewey')
223
+ expect(evaluate("{{#test_with name1 name2 as |duck1 duck2|}}Duck names are {{duck1}} and {{duck2}}{{/test_with}}", {name1: "Huey", name2: "Dewey"})).to eq("Duck names are Huey and Dewey")
224
224
  end
225
225
  end
226
226
  end
227
227
 
228
- context 'escaping characters' do
228
+ context "escaping characters" do
229
229
  let(:escaper) { nil }
230
230
  let(:name) { '<"\'>&' }
231
- let(:replacement_escaped) { evaluate('Hello {{ name }}', {name: name}) }
231
+ let(:replacement_escaped) { evaluate("Hello {{ name }}", {name: name}) }
232
232
  let(:helper_replacement_escaped) {
233
- hbs.register_helper('wrap_parens') {|context, value| "(#{value})"}
234
- evaluate('Hello {{wrap_parens name}}', {name: name})
233
+ hbs.register_helper("wrap_parens") {|context, value| "(#{value})"}
234
+ evaluate("Hello {{wrap_parens name}}", {name: name})
235
235
  }
236
236
 
237
237
  before do
238
238
  hbs.set_escaper(escaper)
239
239
  end
240
240
 
241
- context 'default escaper' do
242
- it 'escapes HTML characters in simple replacements' do
243
- expect(replacement_escaped).to eq('Hello &lt;&quot;&#39;&gt;&amp;')
241
+ context "default escaper" do
242
+ it "escapes HTML characters in simple replacements" do
243
+ expect(replacement_escaped).to eq("Hello &lt;&quot;&#39;&gt;&amp;")
244
244
  end
245
245
 
246
- it 'escapes HTML characters in helpers' do
247
- expect(helper_replacement_escaped).to eq('Hello (&lt;&quot;&#39;&gt;&amp;)')
246
+ it "escapes HTML characters in helpers" do
247
+ expect(helper_replacement_escaped).to eq("Hello (&lt;&quot;&#39;&gt;&amp;)")
248
248
  end
249
249
  end
250
250
 
251
- context 'DummyEscaper' do
251
+ context "DummyEscaper" do
252
252
  let(:escaper) { Handlebars::Escapers::DummyEscaper }
253
253
 
254
- it 'escapes nothing' do
254
+ it "escapes nothing" do
255
255
  expect(replacement_escaped).to eq('Hello <"\'>&')
256
256
  end
257
257
 
258
- it 'escapes nothing in helpers' do
258
+ it "escapes nothing in helpers" do
259
259
  expect(helper_replacement_escaped).to eq('Hello (<"\'>&)')
260
260
  end
261
261
  end
262
262
 
263
- context 'custom escaper' do
263
+ context "custom escaper" do
264
264
  class VowelEscaper
265
265
  def self.escape(value)
266
266
  value.gsub(/([aeiuo])/, '-\1')
@@ -268,14 +268,14 @@ describe Handlebars::Handlebars do
268
268
  end
269
269
 
270
270
  let(:escaper) { VowelEscaper }
271
- let(:name) { 'Her Serene Highness' }
271
+ let(:name) { "Her Serene Highness" }
272
272
 
273
- it 'applies the escaping' do
274
- expect(replacement_escaped).to eq('Hello H-er S-er-en-e H-ighn-ess')
273
+ it "applies the escaping" do
274
+ expect(replacement_escaped).to eq("Hello H-er S-er-en-e H-ighn-ess")
275
275
  end
276
276
 
277
- it 'applies the escaping in helpers' do
278
- expect(helper_replacement_escaped).to eq('Hello (H-er S-er-en-e H-ighn-ess)')
277
+ it "applies the escaping in helpers" do
278
+ expect(helper_replacement_escaped).to eq("Hello (H-er S-er-en-e H-ighn-ess)")
279
279
  end
280
280
  end
281
281
  end