hogan_assets 1.5.1 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZTEyZTQxNDZlYWQ1MzA5NzAzZTZmZTAxOGMwZmI3M2VhZTU5MDBlZA==
5
+ data.tar.gz: !binary |-
6
+ M2UzMmZiMGU1YTRhNzU4ZDNkNzAzMWI1NDYwMzRjYmFiMWZlZjNlZA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ M2FiNzhkM2U3MzcxODI5ZTI1YWYxMjM1YjAwODZhMDJjMjhmOGNmMzNkNzc3
10
+ Y2VjZmViN2U4OTM3MDU5NmUyNTAyMTVhNzU2NWExMGQxMTdiYzAyMTk4OWVl
11
+ YjlkZTY5OGY4NzRkMDdkZGQ2OGFjOTljYjg3MzQ3OTY5ZjFiOGY=
12
+ data.tar.gz: !binary |-
13
+ NDA1ODgyYjBkMDQ2MjRmMWRkOGEyM2FlMmJiMDM0MGIxOGJjMTI1MjdjMWQ5
14
+ OTE3OGY4YzdlNjE1NGZjZDFlNzdjN2VhYzVlZjhmZTBkYjIzZmYzYzg1ZWU5
15
+ NTQwYmRjZmM3ZmZhYWJlODY5YmZlMTZmYzhmNzk0NGZmOTUwMDc=
data/.gitignore CHANGED
@@ -11,6 +11,7 @@ lib/bundler/man
11
11
  pkg
12
12
  rdoc
13
13
  spec/reports
14
+ tags
14
15
  test/tmp
15
16
  test/version_tmp
16
17
  tmp
@@ -1,3 +1,7 @@
1
+ ## 1.6.0 (2013-03-27)
2
+
3
+ * Update to `hogan.js` as of this [commit](https://github.com/twitter/hogan.js/commit/9a9eb1ab8fbbfedc9de73aeac4f9c1798d190a21)
4
+
1
5
  ## 1.5.1 (2013-2-26)
2
6
 
3
7
  * hamstache\_extensions and slimstache\_extensions options - @AlexRiedler
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hogan_assets (1.5.1)
4
+ hogan_assets (1.6.0)
5
5
  execjs (>= 1.2.9)
6
6
  sprockets (>= 2.0.3)
7
7
  tilt (>= 1.3.3)
@@ -21,8 +21,8 @@ GEM
21
21
  multi_json (~> 1.0)
22
22
  haml (3.1.6)
23
23
  hike (1.2.1)
24
- multi_json (1.3.5)
25
- rack (1.4.1)
24
+ multi_json (1.7.1)
25
+ rack (1.5.2)
26
26
  slim (1.3.4)
27
27
  temple (~> 0.5.5)
28
28
  tilt (~> 1.3.3)
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **hogan.js** is a templating engine developed at [Twitter](http://twitter.com) that follows the **mustache** spec and compiles the templates to JavaScript. The first bit is *cool*, since **mustache** is *cool*. The second bit is **awesome and full of win** because we can now compile our **mustache** templates on the server using the asset pipeline/sprockets.
6
6
 
7
- This gem contains **hogan.js v3.0.0**
7
+ This gem contains **hogan.js 3.0.0** as of this [commit](https://github.com/twitter/hogan.js/commit/9a9eb1ab8fbbfedc9de73aeac4f9c1798d190a21)
8
8
 
9
9
  ## Installation
10
10
 
@@ -1,3 +1,3 @@
1
1
  module HoganAssets
2
- VERSION = "1.5.1"
2
+ VERSION = "1.6.0"
3
3
  end
@@ -15,22 +15,24 @@ module HoganAssets
15
15
  def test_render
16
16
  scope = make_scope '/myapp/app/assets/javascripts', 'path/to/template.mustache'
17
17
 
18
- template = HoganAssets::Tilt.new(scope.s_path) { "This is {{mustache}}" }
18
+ source = "This is {{mustache}}"
19
+ template = HoganAssets::Tilt.new(scope.s_path) { source }
19
20
 
20
21
  assert_equal <<-END_EXPECTED, template.render(scope, {})
21
22
  this.HoganTemplates || (this.HoganTemplates = {});
22
- this.HoganTemplates[\"path/to/template\"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||\"\");t.b(\"This is \");t.b(t.v(t.f(\"mustache\",c,p,0)));return t.fl(); },partials: {}, subs: { }}, "", Hogan, {});
23
+ this.HoganTemplates["path/to/template"] = new Hogan.Template(#{compiled_template source}, "", Hogan, {});
23
24
  END_EXPECTED
24
25
  end
25
26
 
26
27
  def test_hamstache_render
27
28
  scope = make_scope '/myapp/app/assets/javascripts', 'path/to/template.hamstache'
28
29
 
29
- template = HoganAssets::Tilt.new(scope.s_path) { "%p This is {{hamstache}}" }
30
+ source = "%p This is {{mustache}}"
31
+ template = HoganAssets::Tilt.new(scope.s_path) { source }
30
32
 
31
33
  assert_equal <<-END_EXPECTED, template.render(scope, {})
32
34
  this.HoganTemplates || (this.HoganTemplates = {});
33
- this.HoganTemplates[\"path/to/template\"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||\"\");t.b(\"<p>This is \");t.b(t.v(t.f(\"hamstache\",c,p,0)));t.b(\"</p>\");t.b(\"\\n\");return t.fl(); },partials: {}, subs: { }}, \"\", Hogan, {});
35
+ this.HoganTemplates["path/to/template"] = new Hogan.Template(#{compiled_template haml_compiled scope, source}, "", Hogan, {});
34
36
  END_EXPECTED
35
37
  end
36
38
 
@@ -41,11 +43,12 @@ module HoganAssets
41
43
 
42
44
  scope = make_scope '/myapp/app/assets/javascripts', 'path/to/template.mustache'
43
45
 
44
- template = HoganAssets::Tilt.new(scope.s_path) { "This is {{mustache}}" }
46
+ source = "This is {{mustache}}"
47
+ template = HoganAssets::Tilt.new(scope.s_path) { source }
45
48
 
46
49
  assert_equal <<-END_EXPECTED, template.render(scope, {})
47
50
  this.HoganTemplates || (this.HoganTemplates = {});
48
- this.HoganTemplates[\"path/to/template\"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||\"\");t.b(\"This is \");t.b(t.v(t.f(\"mustache\",c,p,0)));return t.fl(); },partials: {}, subs: { }}, "This is {{mustache}}", Hogan, {});
51
+ this.HoganTemplates["path/to/template"] = new Hogan.Template(#{compiled_template source}, "This is {{mustache}}", Hogan, {});
49
52
  END_EXPECTED
50
53
  end
51
54
 
@@ -56,11 +59,12 @@ module HoganAssets
56
59
 
57
60
  scope = make_scope '/myapp/app/assets/javascripts', 'app/templates/template.mustache'
58
61
 
59
- template = HoganAssets::Tilt.new(scope.s_path) { "This is {{mustache}}" }
62
+ source = "This is {{mustache}}"
63
+ template = HoganAssets::Tilt.new(scope.s_path) { source }
60
64
 
61
65
  assert_equal <<-END_EXPECTED, template.render(scope, {})
62
66
  this.HoganTemplates || (this.HoganTemplates = {});
63
- this.HoganTemplates[\"template\"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||\"\");t.b(\"This is \");t.b(t.v(t.f(\"mustache\",c,p,0)));return t.fl(); },partials: {}, subs: { }}, "", Hogan, {});
67
+ this.HoganTemplates["template"] = new Hogan.Template(#{compiled_template source}, "", Hogan, {});
64
68
  END_EXPECTED
65
69
  end
66
70
 
@@ -71,11 +75,12 @@ module HoganAssets
71
75
 
72
76
  scope = make_scope '/myapp/app/assets/javascripts', 'path/to/template.mustache'
73
77
 
74
- template = HoganAssets::Tilt.new(scope.s_path) { "This is {{mustache}}" }
78
+ source = "This is {{mustache}}"
79
+ template = HoganAssets::Tilt.new(scope.s_path) { source }
75
80
 
76
81
  assert_equal <<-END_EXPECTED, template.render(scope, {})
77
82
  this.JST || (this.JST = {});
78
- this.JST[\"path/to/template\"] = new Hogan.Template({code: function (c,p,i) { var t=this;t.b(i=i||\"\");t.b(\"This is \");t.b(t.v(t.f(\"mustache\",c,p,0)));return t.fl(); },partials: {}, subs: { }}, "", Hogan, {});
83
+ this.JST["path/to/template"] = new Hogan.Template(#{compiled_template source}, "", Hogan, {});
79
84
  END_EXPECTED
80
85
  end
81
86
 
@@ -11,7 +11,16 @@ module HoganAssets::Config
11
11
 
12
12
  end
13
13
  end
14
+
14
15
  module TestSupport
16
+ def compiled_template(text)
17
+ HoganAssets::Hogan.compile(text)
18
+ end
19
+
20
+ def haml_compiled(scope, text)
21
+ Haml::Engine.new(text, HoganAssets::Config.haml_options.merge(@options)).render(scope, {})
22
+ end
23
+
15
24
  # Try to act like sprockets.
16
25
  def make_scope(root, file)
17
26
  Class.new do
@@ -1,4 +1,4 @@
1
- /*
1
+ /*!
2
2
  * Copyright 2011 Twitter, Inc.
3
3
  * Licensed under the Apache License, Version 2.0 (the "License");
4
4
  * you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@ var Hogan = {};
22
22
  codeObj = codeObj || {};
23
23
  this.r = codeObj.code || this.r;
24
24
  this.c = compiler;
25
- this.options = options;
25
+ this.options = options || {};
26
26
  this.text = text || '';
27
27
  this.partials = codeObj.partials || {};
28
28
  this.subs = codeObj.subs || {};
@@ -73,14 +73,18 @@ var Hogan = {};
73
73
  this.partials[symbol].base = template;
74
74
 
75
75
  if (partial.subs) {
76
- template = createSpecializedPartial(template, partial.subs, partial.partials);
77
- }
78
-
76
+ // Make sure we consider parent template now
77
+ if (this.activeSub === undefined) {
78
+ // Store parent template text in partials.stackText to perform substitutions in child templates correctly
79
+ partials.stackText = this.text;
80
+ }
81
+ template = createSpecializedPartial(template, partial.subs, partial.partials, partials.stackText || this.text);
82
+ }
79
83
  this.partials[symbol].instance = template;
80
84
  return template;
81
85
  },
82
86
 
83
- // tries to find a partial in the curent scope and render it
87
+ // tries to find a partial in the current scope and render it
84
88
  rp: function(symbol, context, partials, indent) {
85
89
  var partial = this.ep(symbol, partials);
86
90
  if (!partial) {
@@ -118,7 +122,7 @@ var Hogan = {};
118
122
  val = this.ms(val, ctx, partials, inverted, start, end, tags);
119
123
  }
120
124
 
121
- pass = (val === '') || !!val;
125
+ pass = !!val;
122
126
 
123
127
  if (!inverted && pass && ctx) {
124
128
  ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);
@@ -129,20 +133,23 @@ var Hogan = {};
129
133
 
130
134
  // find values with dotted names
131
135
  d: function(key, ctx, partials, returnFound) {
132
- var names = key.split('.'),
136
+ var found,
137
+ names = key.split('.'),
133
138
  val = this.f(names[0], ctx, partials, returnFound),
139
+ doModelGet = this.options.modelGet,
134
140
  cx = null;
135
141
 
136
142
  if (key === '.' && isArray(ctx[ctx.length - 2])) {
137
- return ctx[ctx.length - 1];
138
- }
139
-
140
- for (var i = 1; i < names.length; i++) {
141
- if (val && typeof val == 'object' && val[names[i]] != null) {
142
- cx = val;
143
- val = val[names[i]];
144
- } else {
145
- val = '';
143
+ val = ctx[ctx.length - 1];
144
+ } else {
145
+ for (var i = 1; i < names.length; i++) {
146
+ found = findInScope(names[i], val, doModelGet);
147
+ if (found != null) {
148
+ cx = val;
149
+ val = found;
150
+ } else {
151
+ val = '';
152
+ }
146
153
  }
147
154
  }
148
155
 
@@ -163,12 +170,13 @@ var Hogan = {};
163
170
  f: function(key, ctx, partials, returnFound) {
164
171
  var val = false,
165
172
  v = null,
166
- found = false;
173
+ found = false,
174
+ doModelGet = this.options.modelGet;
167
175
 
168
176
  for (var i = ctx.length - 1; i >= 0; i--) {
169
177
  v = ctx[i];
170
- if (v && typeof v == 'object' && v[key] != null) {
171
- val = v[key];
178
+ val = findInScope(key, v, doModelGet);
179
+ if (val != null) {
172
180
  found = true;
173
181
  break;
174
182
  }
@@ -217,14 +225,16 @@ var Hogan = {};
217
225
 
218
226
  // method replace section
219
227
  ms: function(func, ctx, partials, inverted, start, end, tags) {
220
- var cx = ctx[ctx.length - 1],
228
+ var textSource,
229
+ cx = ctx[ctx.length - 1],
221
230
  result = func.call(cx);
222
231
 
223
232
  if (typeof result == 'function') {
224
233
  if (inverted) {
225
234
  return true;
226
235
  } else {
227
- return this.ls(result, cx, partials, this.text.substring(start, end), tags);
236
+ textSource = (this.activeSub && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;
237
+ return this.ls(result, cx, partials, textSource.substring(start, end), tags);
228
238
  }
229
239
  }
230
240
 
@@ -246,13 +256,33 @@ var Hogan = {};
246
256
  sub: function(name, context, partials, indent) {
247
257
  var f = this.subs[name];
248
258
  if (f) {
259
+ this.activeSub = name;
249
260
  f(context, partials, this, indent);
261
+ this.activeSub = false;
250
262
  }
251
263
  }
252
264
 
253
265
  };
254
266
 
255
- function createSpecializedPartial(instance, subs, partials) {
267
+ //Find a key in an object
268
+ function findInScope(key, scope, doModelGet) {
269
+ var val, checkVal;
270
+
271
+ if (scope && typeof scope == 'object') {
272
+
273
+ if (scope[key] != null) {
274
+ val = scope[key];
275
+
276
+ // try lookup with get for backbone or similar model data
277
+ } else if (doModelGet && scope.get && typeof scope.get == 'function') {
278
+ val = scope.get(key);
279
+ }
280
+ }
281
+
282
+ return val;
283
+ }
284
+
285
+ function createSpecializedPartial(instance, subs, partials, childText) {
256
286
  function PartialTemplate() {};
257
287
  PartialTemplate.prototype = instance;
258
288
  function Substitutions() {};
@@ -260,10 +290,12 @@ var Hogan = {};
260
290
  var key;
261
291
  var partial = new PartialTemplate();
262
292
  partial.subs = new Substitutions();
293
+ partial.subsText = {}; //hehe. substext.
263
294
  partial.ib();
264
295
 
265
296
  for (key in subs) {
266
297
  partial.subs[key] = subs[key];
298
+ partial.subsText[key] = childText;
267
299
  }
268
300
 
269
301
  for (key in partials) {
@@ -276,9 +308,9 @@ var Hogan = {};
276
308
  var rAmp = /&/g,
277
309
  rLt = /</g,
278
310
  rGt = />/g,
279
- rApos =/\'/g,
311
+ rApos = /\'/g,
280
312
  rQuot = /\"/g,
281
- hChars =/[&<>\"\']/;
313
+ hChars = /[&<>\"\']/;
282
314
 
283
315
  function coerceToString(val) {
284
316
  return String((val === null || val === undefined) ? '' : val);
@@ -288,10 +320,10 @@ var Hogan = {};
288
320
  str = coerceToString(str);
289
321
  return hChars.test(str) ?
290
322
  str
291
- .replace(rAmp,'&amp;')
292
- .replace(rLt,'&lt;')
293
- .replace(rGt,'&gt;')
294
- .replace(rApos,'&#39;')
323
+ .replace(rAmp, '&amp;')
324
+ .replace(rLt, '&lt;')
325
+ .replace(rGt, '&gt;')
326
+ .replace(rApos, '&#39;')
295
327
  .replace(rQuot, '&quot;') :
296
328
  str;
297
329
  }
@@ -385,7 +417,7 @@ var Hogan = {};
385
417
  ).split(' ');
386
418
 
387
419
  otag = delimiters[0];
388
- ctag = delimiters[1];
420
+ ctag = delimiters[delimiters.length - 1];
389
421
 
390
422
  return closeIndex + close.length - 1;
391
423
  }
@@ -671,7 +703,7 @@ var Hogan = {};
671
703
  return 't.b(' + s + ');';
672
704
  }
673
705
 
674
- Hogan.walk = function (nodelist, context) {
706
+ Hogan.walk = function(nodelist, context) {
675
707
  var func;
676
708
  for (var i = 0, l = nodelist.length; i < l; i++) {
677
709
  func = Hogan.codegen[nodelist[i].tag];
@@ -683,13 +715,13 @@ var Hogan = {};
683
715
  Hogan.parse = function(tokens, text, options) {
684
716
  options = options || {};
685
717
  return buildTree(tokens, '', [], options.sectionTags || []);
686
- },
718
+ }
687
719
 
688
720
  Hogan.cache = {};
689
721
 
690
722
  Hogan.cacheKey = function(text, options) {
691
- return [text, !!options.asString, !!options.disableLambda].join('||');
692
- },
723
+ return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');
724
+ }
693
725
 
694
726
  Hogan.compile = function(text, options) {
695
727
  options = options || {};
@@ -702,6 +734,6 @@ var Hogan = {};
702
734
 
703
735
  template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);
704
736
  return this.cache[key] = template;
705
- };
737
+ }
706
738
  })(typeof exports !== 'undefined' ? exports : Hogan);
707
739
 
metadata CHANGED
@@ -1,112 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hogan_assets
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.5.1
4
+ version: 1.6.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Les Hill
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-26 00:00:00.000000000 Z
11
+ date: 2013-03-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: execjs
16
- version_requirements: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: 1.2.9
22
15
  requirement: !ruby/object:Gem::Requirement
23
- none: false
24
16
  requirements:
25
17
  - - ! '>='
26
18
  - !ruby/object:Gem::Version
27
19
  version: 1.2.9
28
20
  type: :runtime
29
21
  prerelease: false
30
- - !ruby/object:Gem::Dependency
31
- name: tilt
32
22
  version_requirements: !ruby/object:Gem::Requirement
33
- none: false
34
23
  requirements:
35
24
  - - ! '>='
36
25
  - !ruby/object:Gem::Version
37
- version: 1.3.3
26
+ version: 1.2.9
27
+ - !ruby/object:Gem::Dependency
28
+ name: tilt
38
29
  requirement: !ruby/object:Gem::Requirement
39
- none: false
40
30
  requirements:
41
31
  - - ! '>='
42
32
  - !ruby/object:Gem::Version
43
33
  version: 1.3.3
44
34
  type: :runtime
45
35
  prerelease: false
46
- - !ruby/object:Gem::Dependency
47
- name: sprockets
48
36
  version_requirements: !ruby/object:Gem::Requirement
49
- none: false
50
37
  requirements:
51
38
  - - ! '>='
52
39
  - !ruby/object:Gem::Version
53
- version: 2.0.3
40
+ version: 1.3.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: sprockets
54
43
  requirement: !ruby/object:Gem::Requirement
55
- none: false
56
44
  requirements:
57
45
  - - ! '>='
58
46
  - !ruby/object:Gem::Version
59
47
  version: 2.0.3
60
48
  type: :runtime
61
49
  prerelease: false
62
- - !ruby/object:Gem::Dependency
63
- name: debugger
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
- none: false
66
51
  requirements:
67
52
  - - ! '>='
68
53
  - !ruby/object:Gem::Version
69
- version: '0'
54
+ version: 2.0.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: debugger
70
57
  requirement: !ruby/object:Gem::Requirement
71
- none: false
72
58
  requirements:
73
59
  - - ! '>='
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
- - !ruby/object:Gem::Dependency
79
- name: haml
80
64
  version_requirements: !ruby/object:Gem::Requirement
81
- none: false
82
65
  requirements:
83
66
  - - ! '>='
84
67
  - !ruby/object:Gem::Version
85
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: haml
86
71
  requirement: !ruby/object:Gem::Requirement
87
- none: false
88
72
  requirements:
89
73
  - - ! '>='
90
74
  - !ruby/object:Gem::Version
91
75
  version: '0'
92
76
  type: :development
93
77
  prerelease: false
94
- - !ruby/object:Gem::Dependency
95
- name: slim
96
78
  version_requirements: !ruby/object:Gem::Requirement
97
- none: false
98
79
  requirements:
99
80
  - - ! '>='
100
81
  - !ruby/object:Gem::Version
101
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: slim
102
85
  requirement: !ruby/object:Gem::Requirement
103
- none: false
104
86
  requirements:
105
87
  - - ! '>='
106
88
  - !ruby/object:Gem::Version
107
89
  version: '0'
108
90
  type: :development
109
91
  prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
110
97
  description: Use compiled hogan.js (mustache) JavaScript templates with sprockets
111
98
  and the Rails asset pipeline.
112
99
  email:
@@ -137,27 +124,26 @@ files:
137
124
  - vendor/assets/javascripts/hogan.js
138
125
  homepage: https://github.com/leshill/hogan_assets
139
126
  licenses: []
127
+ metadata: {}
140
128
  post_install_message:
141
129
  rdoc_options: []
142
130
  require_paths:
143
131
  - lib
144
132
  required_ruby_version: !ruby/object:Gem::Requirement
145
- none: false
146
133
  requirements:
147
134
  - - ! '>='
148
135
  - !ruby/object:Gem::Version
149
136
  version: '0'
150
137
  required_rubygems_version: !ruby/object:Gem::Requirement
151
- none: false
152
138
  requirements:
153
139
  - - ! '>='
154
140
  - !ruby/object:Gem::Version
155
141
  version: '0'
156
142
  requirements: []
157
143
  rubyforge_project:
158
- rubygems_version: 1.8.25
144
+ rubygems_version: 2.0.3
159
145
  signing_key:
160
- specification_version: 3
146
+ specification_version: 4
161
147
  summary: Use compiled hogan.js (mustache) JavaScript templates with sprockets and
162
148
  the Rails asset pipeline.
163
149
  test_files:
@@ -165,3 +151,4 @@ test_files:
165
151
  - test/hogan_assets/config_test.rb
166
152
  - test/hogan_assets/tilt_test.rb
167
153
  - test/test_helper.rb
154
+ has_rdoc: