mustache 0.9.0 → 0.9.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.
- data/README.md +16 -2
- data/lib/mustache.rb +6 -0
- data/lib/mustache/context.rb +26 -6
- data/lib/mustache/version.rb +1 -1
- data/man/mustache.1 +1 -1
- data/man/mustache.1.html +1 -1
- data/test/mustache_test.rb +15 -0
- data/test/partial_test.rb +32 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -273,12 +273,19 @@ Sinatra
|
|
273
273
|
|
274
274
|
Mustache ships with Sinatra integration. Please see
|
275
275
|
`lib/mustache/sinatra.rb` or
|
276
|
-
<http://
|
277
|
-
complete documentation.
|
276
|
+
<http://github.com/defunkt/mustache/blob/master/lib/mustache/sinatra.rb>
|
277
|
+
for complete documentation.
|
278
278
|
|
279
279
|
An example Sinatra application is also provided:
|
280
280
|
<http://github.com/defunkt/mustache-sinatra-example>
|
281
281
|
|
282
|
+
If you are upgrading to Sinatra 1.0 and Mustache 0.9.0+ from Mustache
|
283
|
+
0.7.0 or lower, the settings have changed. But not that much.
|
284
|
+
|
285
|
+
See [this diff](http://gist.github.com/345490) for what you need to
|
286
|
+
do. Basically, things are named properly now and all should be
|
287
|
+
contained in a hash set using `set :mustache, hash`.
|
288
|
+
|
282
289
|
|
283
290
|
[Rack::Bug][4]
|
284
291
|
--------------
|
@@ -305,6 +312,7 @@ is included under the contrib/ directory.
|
|
305
312
|
|
306
313
|
See <http://gist.github.com/323622> for installation instructions.
|
307
314
|
|
315
|
+
|
308
316
|
Emacs
|
309
317
|
-----
|
310
318
|
|
@@ -323,6 +331,7 @@ TextMate
|
|
323
331
|
|
324
332
|
See <http://gist.github.com/323624> for installation instructions.
|
325
333
|
|
334
|
+
|
326
335
|
Command Line
|
327
336
|
------------
|
328
337
|
|
@@ -330,6 +339,7 @@ See `mustache(1)` man page or
|
|
330
339
|
<http://defunkt.github.com/mustache/mustache.1.html>
|
331
340
|
for command line docs.
|
332
341
|
|
342
|
+
|
333
343
|
Installation
|
334
344
|
------------
|
335
345
|
|
@@ -341,12 +351,16 @@ Installation
|
|
341
351
|
|
342
352
|
$ rip install git://github.com/defunkt/mustache.git
|
343
353
|
|
354
|
+
|
344
355
|
Acknowledgements
|
345
356
|
----------------
|
346
357
|
|
347
358
|
Thanks to [Tom Preston-Werner](http://github.com/mojombo) for showing
|
348
359
|
me ctemplate and [Leah Culver](http://github.com/leah) for the name "Mustache."
|
349
360
|
|
361
|
+
Special thanks to [Magnus Holm](http://judofyr.net/) for all his
|
362
|
+
awesome work on Mustache's parser.
|
363
|
+
|
350
364
|
|
351
365
|
Meta
|
352
366
|
----
|
data/lib/mustache.rb
CHANGED
@@ -92,6 +92,12 @@ class Mustache
|
|
92
92
|
render(data, context)
|
93
93
|
end
|
94
94
|
|
95
|
+
# Given a file name and an optional context, attempts to load and
|
96
|
+
# render the file as a template.
|
97
|
+
def render_file(name, context = {})
|
98
|
+
self.class.render_file(name, context)
|
99
|
+
end
|
100
|
+
|
95
101
|
# The template path informs your Mustache subclass where to look for its
|
96
102
|
# corresponding template. By default it's the current directory (".")
|
97
103
|
def self.template_path
|
data/lib/mustache/context.rb
CHANGED
@@ -14,8 +14,7 @@ class Mustache
|
|
14
14
|
class Context
|
15
15
|
# Expect to be passed an instance of `Mustache`.
|
16
16
|
def initialize(mustache)
|
17
|
-
@
|
18
|
-
@stack = [@mustache]
|
17
|
+
@stack = [mustache]
|
19
18
|
end
|
20
19
|
|
21
20
|
# A {{>partial}} tag translates into a call to the context's
|
@@ -26,10 +25,27 @@ class Mustache
|
|
26
25
|
# to `partial`, we call it and use the result. Otherwise we render
|
27
26
|
# and compile the partial as its own view and return the result.
|
28
27
|
def partial(name)
|
29
|
-
|
30
|
-
|
28
|
+
# Look for any Mustaches in the stack.
|
29
|
+
mustache = mustache_in_stack
|
30
|
+
|
31
|
+
if mustache.respond_to? :partial
|
32
|
+
# We found a mustache and it responds to `partial`, send it.
|
33
|
+
mustache.render(mustache.partial(name), self)
|
34
|
+
|
35
|
+
elsif mustache
|
36
|
+
# We found a mustache without `partial`, use it to render.
|
37
|
+
mustache.render_file(name, self)
|
31
38
|
else
|
32
|
-
|
39
|
+
# Can't find any staches, abort and use whatever we can..
|
40
|
+
raise "No Mustache views in stack."
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Find the first Mustache in the stack. If we're being rendered
|
45
|
+
# inside a Mustache object as a context, we'll use that one.
|
46
|
+
def mustache_in_stack
|
47
|
+
@stack.detect do |frame|
|
48
|
+
frame.is_a?(Mustache)
|
33
49
|
end
|
34
50
|
end
|
35
51
|
|
@@ -79,6 +95,10 @@ class Mustache
|
|
79
95
|
# set to true), will raise a ContextMiss exception on miss.
|
80
96
|
def fetch(name, default = :__raise)
|
81
97
|
@stack.each do |frame|
|
98
|
+
# Prevent infinite recursion.
|
99
|
+
next if frame == self
|
100
|
+
|
101
|
+
# Is this frame a hash?
|
82
102
|
hash = frame.respond_to?(:has_key?)
|
83
103
|
|
84
104
|
if hash && frame.has_key?(name)
|
@@ -90,7 +110,7 @@ class Mustache
|
|
90
110
|
end
|
91
111
|
end
|
92
112
|
|
93
|
-
if default == :__raise ||
|
113
|
+
if default == :__raise || mustache_in_stack.raise_on_context_miss?
|
94
114
|
raise ContextMiss.new("Can't find #{name} in #{@stack.inspect}")
|
95
115
|
else
|
96
116
|
default
|
data/lib/mustache/version.rb
CHANGED
data/man/mustache.1
CHANGED
@@ -150,7 +150,7 @@ gem install mustache
|
|
150
150
|
$ mustache data.yml template.mustache
|
151
151
|
$ cat data.yml | mustache \- template.mustache
|
152
152
|
$ mustache \-c template.mustache
|
153
|
-
$ cat <<data |
|
153
|
+
$ cat <<data | ruby mustache \- template.mustache
|
154
154
|
\-\-\-
|
155
155
|
name: Bob
|
156
156
|
age: 30
|
data/man/mustache.1.html
CHANGED
@@ -173,7 +173,7 @@ identified by examining the tokens produced.</p></dd>
|
|
173
173
|
<pre><code>$ mustache data.yml template.mustache
|
174
174
|
$ cat data.yml | mustache - template.mustache
|
175
175
|
$ mustache -c template.mustache
|
176
|
-
$ cat <<data |
|
176
|
+
$ cat <<data | ruby mustache - template.mustache
|
177
177
|
---
|
178
178
|
name: Bob
|
179
179
|
age: 30
|
data/test/mustache_test.rb
CHANGED
@@ -363,4 +363,19 @@ start
|
|
363
363
|
end
|
364
364
|
expected
|
365
365
|
end
|
366
|
+
|
367
|
+
def test_id_with_nested_context
|
368
|
+
html = %(<div>{{id}}</div>\n<div>{{# has_a? }}{{id}}{{/ has_a? }}</div>\n<div>{{# has_b? }}{{id}}{{/ has_b? }}</div>)
|
369
|
+
|
370
|
+
instance = Mustache.new
|
371
|
+
instance.template = html
|
372
|
+
instance[:id] = 3
|
373
|
+
instance[:has_a?] = true
|
374
|
+
instance[:has_b?] = true
|
375
|
+
assert_equal <<-rendered.strip, instance.render
|
376
|
+
<div>3</div>
|
377
|
+
<div>3</div>
|
378
|
+
<div>3</div>
|
379
|
+
rendered
|
380
|
+
end
|
366
381
|
end
|
data/test/partial_test.rb
CHANGED
@@ -124,4 +124,36 @@ end_partial
|
|
124
124
|
</html>
|
125
125
|
end_partial
|
126
126
|
end
|
127
|
+
|
128
|
+
def test_partials_use_proper_context
|
129
|
+
assert_equal "OuterThing OuterThing", OuterThing.render('{{name}} {{> p}}')
|
130
|
+
|
131
|
+
assert_equal "InnerThing InnerThing", InnerThing.render('{{name}} {{> p}}')
|
132
|
+
|
133
|
+
assert_equal "OuterThing InnerThing InnerThing",
|
134
|
+
OuterThing.render('{{name}} {{#inner}}{{name}} {{> p}}{{/inner}}')
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_partials_render_returned_strings
|
138
|
+
assert_equal "ok", MiddleThing.render('{{> some_partial }}')
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
class InnerThing < Mustache
|
143
|
+
def partial(p) self.class end
|
144
|
+
def name; self.class end
|
145
|
+
end
|
146
|
+
|
147
|
+
class OuterThing < Mustache
|
148
|
+
def inner
|
149
|
+
InnerThing.new
|
150
|
+
end
|
151
|
+
|
152
|
+
def partial(p) self.class end
|
153
|
+
def name; self.class end
|
154
|
+
end
|
155
|
+
|
156
|
+
class MiddleThing < Mustache
|
157
|
+
def partial(name) "{{#{name}}}" end
|
158
|
+
def some_partial; "ok" end
|
127
159
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mustache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Wanstrath
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-27 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|