mustache 0.2.0 → 0.2.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/HISTORY.md +5 -0
- data/benchmarks/speed.rb +4 -4
- data/lib/mustache.rb +27 -46
- data/lib/mustache/version.rb +1 -1
- data/test/mustache_test.rb +7 -1
- metadata +3 -2
data/HISTORY.md
ADDED
data/benchmarks/speed.rb
CHANGED
@@ -43,9 +43,9 @@ content = File.read(ComplexView.template_file)
|
|
43
43
|
|
44
44
|
unless ENV['CACHED']
|
45
45
|
bench '{ w/o caching' do
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
ctpl = ComplexView.new
|
47
|
+
ctpl.template = content
|
48
|
+
ctpl[:item] = items
|
49
|
+
ctpl.to_html
|
50
50
|
end
|
51
51
|
end
|
data/lib/mustache.rb
CHANGED
@@ -16,10 +16,11 @@ require 'mustache/context'
|
|
16
16
|
# While Mustache will do its best to load and render a template for
|
17
17
|
# you, this process is completely customizable using a few options.
|
18
18
|
#
|
19
|
-
# All settings can be overriden at
|
20
|
-
#
|
21
|
-
#
|
22
|
-
# `
|
19
|
+
# All settings can be overriden at the class level.
|
20
|
+
#
|
21
|
+
# For example, going with the above example, we can use
|
22
|
+
# `Stats.template_path = "/usr/local/templates"` to specify the path
|
23
|
+
# Mustache uses to find templates.
|
23
24
|
#
|
24
25
|
# Here are the available options:
|
25
26
|
#
|
@@ -49,6 +50,12 @@ require 'mustache/context'
|
|
49
50
|
# >> Mustache.render("Hello {{planet}}", :planet => "World!")
|
50
51
|
# => "Hello World!"
|
51
52
|
#
|
53
|
+
# The `template` setting is also available on instances.
|
54
|
+
#
|
55
|
+
# view = Mustache.new
|
56
|
+
# view.template = "Hi, {{person}}!"
|
57
|
+
# view[:person] = 'Mom'
|
58
|
+
# view.render # => Hi, mom!
|
52
59
|
class Mustache
|
53
60
|
# Helper method for quickly instantiating and rendering a view.
|
54
61
|
def self.render(*args)
|
@@ -68,11 +75,12 @@ class Mustache
|
|
68
75
|
# The template path informs your Mustache subclass where to look for its
|
69
76
|
# corresponding template. By default it's the current directory (".")
|
70
77
|
def self.template_path
|
71
|
-
@template_path
|
78
|
+
@template_path ||= '.'
|
72
79
|
end
|
73
80
|
|
74
81
|
def self.template_path=(path)
|
75
82
|
@template_path = File.expand_path(path)
|
83
|
+
@template = nil
|
76
84
|
end
|
77
85
|
|
78
86
|
# Alias for `template_path`
|
@@ -87,21 +95,23 @@ class Mustache
|
|
87
95
|
|
88
96
|
# A Mustache template's default extension is 'html'
|
89
97
|
def self.template_extension
|
90
|
-
@template_extension
|
98
|
+
@template_extension ||= 'html'
|
91
99
|
end
|
92
100
|
|
93
101
|
def self.template_extension=(template_extension)
|
94
102
|
@template_extension = template_extension
|
103
|
+
@template = nil
|
95
104
|
end
|
96
105
|
|
97
106
|
# The template file is the absolute path of the file Mustache will
|
98
107
|
# use as its template. By default it's ./class_name.html
|
99
108
|
def self.template_file
|
100
|
-
@template_file || "#{
|
109
|
+
@template_file || "#{path}/#{underscore}.#{template_extension}"
|
101
110
|
end
|
102
111
|
|
103
112
|
def self.template_file=(template_file)
|
104
113
|
@template_file = template_file
|
114
|
+
@template = nil
|
105
115
|
end
|
106
116
|
|
107
117
|
# The template is the actual string Mustache uses as its template.
|
@@ -109,11 +119,11 @@ class Mustache
|
|
109
119
|
# Mustache::Template object here, but you can still safely use
|
110
120
|
# `template=` with a string.
|
111
121
|
def self.template
|
112
|
-
@template
|
122
|
+
@template ||= templateify(File.read(template_file))
|
113
123
|
end
|
114
124
|
|
115
125
|
def self.template=(template)
|
116
|
-
@template =
|
126
|
+
@template = template
|
117
127
|
end
|
118
128
|
|
119
129
|
# template_partial => TemplatePartial
|
@@ -124,7 +134,11 @@ class Mustache
|
|
124
134
|
end
|
125
135
|
|
126
136
|
# TemplatePartial => template_partial
|
127
|
-
|
137
|
+
# Takes a string but defaults to using the current class' name.
|
138
|
+
def self.underscore(classified = name)
|
139
|
+
classified = name if classified.to_s.empty?
|
140
|
+
classified = superclass.name if classified.to_s.empty?
|
141
|
+
|
128
142
|
string = classified.dup.split('::').last
|
129
143
|
string[0] = string[0].chr.downcase
|
130
144
|
string.gsub(/[A-Z]/) { |s| "_#{s.downcase}"}
|
@@ -140,46 +154,13 @@ class Mustache
|
|
140
154
|
end
|
141
155
|
end
|
142
156
|
|
143
|
-
# Instance version.Turns a string into a Mustache::Template. If passed a Template,
|
144
157
|
def templateify(obj)
|
145
|
-
|
146
|
-
obj
|
147
|
-
else
|
148
|
-
Template.new(obj.to_s, template_path, template_extension)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
#
|
153
|
-
# Instance level settings
|
154
|
-
#
|
155
|
-
|
156
|
-
def template_path
|
157
|
-
@template_path || self.class.template_path
|
158
|
-
end
|
159
|
-
|
160
|
-
def template_path=(template_path)
|
161
|
-
@template_path = template_path
|
162
|
-
end
|
163
|
-
|
164
|
-
def template_extension
|
165
|
-
@template_extension || self.class.template_extension
|
166
|
-
end
|
167
|
-
|
168
|
-
def template_extension=(template_extension)
|
169
|
-
@template_extension = template_extension
|
170
|
-
end
|
171
|
-
|
172
|
-
def template_file
|
173
|
-
return @template_file if @template_file
|
174
|
-
"#{template_path}/#{Mustache.underscore(self.class.name)}.#{template_extension}"
|
175
|
-
end
|
176
|
-
|
177
|
-
def template_file=(template_file)
|
178
|
-
@template_file = template_file
|
158
|
+
self.class.templateify(obj)
|
179
159
|
end
|
180
160
|
|
161
|
+
# The template can be set at the instance level.
|
181
162
|
def template
|
182
|
-
@template
|
163
|
+
@template ||= self.class.template
|
183
164
|
end
|
184
165
|
|
185
166
|
def template=(template)
|
data/lib/mustache/version.rb
CHANGED
data/test/mustache_test.rb
CHANGED
@@ -98,8 +98,9 @@ end_partial
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def test_template_partial_with_custom_extension
|
101
|
-
partial =
|
101
|
+
partial = Class.new(TemplatePartial)
|
102
102
|
partial.template_extension = 'txt'
|
103
|
+
partial.template_path = File.dirname(__FILE__) + '/../examples'
|
103
104
|
|
104
105
|
assert_equal <<-end_partial.strip, partial.render.strip
|
105
106
|
Welcome
|
@@ -129,6 +130,11 @@ end_partial
|
|
129
130
|
assert_equal 'template_partial', Mustache.underscore('TemplatePartial')
|
130
131
|
end
|
131
132
|
|
133
|
+
def test_anon_subclass_underscore
|
134
|
+
klass = Class.new(TemplatePartial)
|
135
|
+
assert_equal 'template_partial', klass.underscore
|
136
|
+
end
|
137
|
+
|
132
138
|
def test_namespaced_underscore
|
133
139
|
assert_equal 'stat_stuff', Mustache.underscore('Views::StatStuff')
|
134
140
|
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.2.
|
4
|
+
version: 0.2.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: 2009-10-
|
12
|
+
date: 2009-10-11 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- .gitignore
|
27
27
|
- .kick
|
28
28
|
- CONTRIBUTORS
|
29
|
+
- HISTORY.md
|
29
30
|
- LICENSE
|
30
31
|
- README.md
|
31
32
|
- Rakefile
|