machined 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/machined/helpers/locals_helpers.rb +15 -5
- data/lib/machined/helpers/render_helpers.rb +11 -14
- data/lib/machined/processors/layout_processor.rb +1 -1
- data/lib/machined/version.rb +1 -1
- data/spec/machined/helpers/locals_helper_spec.rb +16 -0
- data/spec/machined/helpers/render_helpers_spec.rb +41 -0
- metadata +77 -147
@@ -6,6 +6,13 @@ module Machined
|
|
6
6
|
module LocalsHelpers
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
|
+
# Returns the locals hash. It's actually an instance
|
10
|
+
# of `ActiveSupport::HashWithIndifferentAccess`, so strings
|
11
|
+
# and symbols can be used interchangeably.
|
12
|
+
def locals
|
13
|
+
@locals ||= ActiveSupport::HashWithIndifferentAccess.new
|
14
|
+
end
|
15
|
+
|
9
16
|
# Adds psuedo local variables from the given hash, where
|
10
17
|
# the key is the name of the variable. This is provided so
|
11
18
|
# processors can add local variables without having access
|
@@ -18,11 +25,14 @@ module Machined
|
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
def
|
25
|
-
|
28
|
+
# Temporarily changes the locals. The given +temporary_locals+
|
29
|
+
# will be merged into the current locals. After the block is
|
30
|
+
# executed, the locals will be restored to their original state.
|
31
|
+
def with_locals(temporary_locals)
|
32
|
+
old_locals, self.locals = self.locals.dup, temporary_locals
|
33
|
+
yield
|
34
|
+
ensure
|
35
|
+
@locals = old_locals
|
26
36
|
end
|
27
37
|
|
28
38
|
# Returns true if the given +name+ has been set as a local
|
@@ -88,20 +88,26 @@ module Machined
|
|
88
88
|
template = resolve_partial(partial)
|
89
89
|
depend_on template
|
90
90
|
|
91
|
+
partial_locals = {}
|
92
|
+
|
93
|
+
# Temporarily use a different layout (default to no layout)
|
94
|
+
partial_locals[:layout] = options.delete(:layout) || false
|
95
|
+
|
91
96
|
# Add object with the name of the partial
|
92
97
|
# as the local variable name.
|
93
98
|
if object = options.delete(:object)
|
94
99
|
object_name = options.delete(:as) || template.to_s[/_?(\w+)(\.\w+)*$/, 1]
|
95
|
-
|
96
|
-
|
100
|
+
partial_locals[object_name] = object
|
101
|
+
partial_locals["#{object_name}_counter"] = options.delete(:counter)
|
97
102
|
end
|
98
103
|
|
99
104
|
# Add locals from leftover options
|
100
|
-
if
|
101
|
-
|
105
|
+
if leftover_locals = options.delete(:locals) || options
|
106
|
+
partial_locals.merge!(leftover_locals)
|
102
107
|
end
|
103
108
|
|
104
|
-
|
109
|
+
# Now evaluate the partial
|
110
|
+
with_locals(partial_locals) { return evaluate(template) }
|
105
111
|
end
|
106
112
|
|
107
113
|
protected
|
@@ -124,15 +130,6 @@ module Machined
|
|
124
130
|
|
125
131
|
raise Sprockets::FileNotFound, "couldn't find file '#{path}'"
|
126
132
|
end
|
127
|
-
|
128
|
-
# Evaluates the given path without using the given processor.
|
129
|
-
# This is used to evaluate templates without wrapping
|
130
|
-
# them in layouts.
|
131
|
-
def evaluate_without_processor(path, processor) # :nodoc:
|
132
|
-
processors = environment.attributes_for(path).processors.dup
|
133
|
-
processors.delete processor
|
134
|
-
evaluate path, :processors => processors
|
135
|
-
end
|
136
133
|
end
|
137
134
|
end
|
138
135
|
end
|
data/lib/machined/version.rb
CHANGED
@@ -34,4 +34,20 @@ describe Machined::Helpers::LocalsHelpers do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe "#with_locals" do
|
39
|
+
it "temporarily changes the local variables" do
|
40
|
+
with_context do |context, output|
|
41
|
+
context.locals = { :title => "Hello World", :layout => "main" }
|
42
|
+
context.with_locals(:layout => false, :body => "...") do
|
43
|
+
context.title.should == "Hello World"
|
44
|
+
context.body.should == "..."
|
45
|
+
context.layout.should be_false
|
46
|
+
end
|
47
|
+
context.title.should == "Hello World"
|
48
|
+
context.layout.should == "main"
|
49
|
+
context.respond_to?(:body).should be_false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
37
53
|
end
|
@@ -31,6 +31,27 @@ describe Machined::Helpers::RenderHelpers do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
it "returns the original locals state once rendered" do
|
35
|
+
within_construct do |c|
|
36
|
+
c.file "pages/index.html.erb", <<-CONTENT.unindent
|
37
|
+
---
|
38
|
+
title: Hello World
|
39
|
+
---
|
40
|
+
<%= render "partial", :title => "Title...", :text => "Text..." %>
|
41
|
+
title: <%= title %>
|
42
|
+
text: <%= respond_to?(:text) %>
|
43
|
+
CONTENT
|
44
|
+
c.file "views/partial.html.erb", "title: <%= title %>\ntext: <%= text %>\n"
|
45
|
+
|
46
|
+
machined.pages["index.html"].to_s.should == <<-CONTENT.unindent
|
47
|
+
title: Title...
|
48
|
+
text: Text...
|
49
|
+
title: Hello World
|
50
|
+
text: false
|
51
|
+
CONTENT
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
34
55
|
it "renders partial collections" do
|
35
56
|
within_construct do |c|
|
36
57
|
c.file "pages/index.html.erb", %(<%= render "number", :collection => [1,2,3] %>)
|
@@ -40,6 +61,26 @@ describe Machined::Helpers::RenderHelpers do
|
|
40
61
|
end
|
41
62
|
end
|
42
63
|
|
64
|
+
it "does not wrap the partial in a layout" do
|
65
|
+
within_construct do |c|
|
66
|
+
c.file "pages/index.html.erb", %(<%= render "partial" %>)
|
67
|
+
c.file "views/layouts/main.html.erb", "<h1><%= yield %></h1>"
|
68
|
+
c.file "views/partial.html.erb", "Hello World"
|
69
|
+
|
70
|
+
machined.pages["index.html"].to_s.should == "<h1>Hello World</h1>"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it "optionally wraps the partial in a layout" do
|
75
|
+
within_construct do |c|
|
76
|
+
c.file "pages/index.html.erb", %(<%= render "partial", :layout => "partial" %>)
|
77
|
+
c.file "views/layouts/partial.html.erb", "<h1><%= yield %></h1>"
|
78
|
+
c.file "views/partial.html.erb", "Hello World"
|
79
|
+
|
80
|
+
machined.pages["index.html"].to_s.should == "<h1>Hello World</h1>"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
43
84
|
it "raises a Sprockets::FileNotFound error if the partial is missing" do
|
44
85
|
within_construct do |c|
|
45
86
|
c.file "pages/index.html.erb", %(<%= render "partial" %>)
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: machined
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 27
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
version: 0.1.0
|
5
|
+
version: 0.1.1
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Pete Browne
|
@@ -15,271 +10,206 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-10-
|
13
|
+
date: 2011-10-08 00:00:00 Z
|
19
14
|
dependencies:
|
20
15
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
16
|
+
name: sprockets
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
18
|
none: false
|
23
19
|
requirements:
|
24
20
|
- - ~>
|
25
21
|
- !ruby/object:Gem::Version
|
26
|
-
hash: 3
|
27
|
-
segments:
|
28
|
-
- 2
|
29
|
-
- 0
|
30
22
|
version: "2.0"
|
31
|
-
requirement: *id001
|
32
|
-
name: sprockets
|
33
|
-
prerelease: false
|
34
23
|
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *id001
|
35
26
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
27
|
+
name: sprockets-sass
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
29
|
none: false
|
38
30
|
requirements:
|
39
31
|
- - ~>
|
40
32
|
- !ruby/object:Gem::Version
|
41
|
-
hash: 13
|
42
|
-
segments:
|
43
|
-
- 0
|
44
|
-
- 3
|
45
33
|
version: "0.3"
|
46
|
-
requirement: *id002
|
47
|
-
name: sprockets-sass
|
48
|
-
prerelease: false
|
49
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *id002
|
50
37
|
- !ruby/object:Gem::Dependency
|
51
|
-
|
38
|
+
name: padrino-helpers
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
40
|
none: false
|
53
41
|
requirements:
|
54
42
|
- - ~>
|
55
43
|
- !ruby/object:Gem::Version
|
56
|
-
hash: 31
|
57
|
-
segments:
|
58
|
-
- 0
|
59
|
-
- 10
|
60
44
|
version: "0.10"
|
61
|
-
requirement: *id003
|
62
|
-
name: padrino-helpers
|
63
|
-
prerelease: false
|
64
45
|
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id003
|
65
48
|
- !ruby/object:Gem::Dependency
|
66
|
-
|
49
|
+
name: activesupport
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
51
|
none: false
|
68
52
|
requirements:
|
69
53
|
- - ~>
|
70
54
|
- !ruby/object:Gem::Version
|
71
|
-
hash: 5
|
72
|
-
segments:
|
73
|
-
- 3
|
74
|
-
- 1
|
75
55
|
version: "3.1"
|
76
|
-
requirement: *id004
|
77
|
-
name: activesupport
|
78
|
-
prerelease: false
|
79
56
|
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *id004
|
80
59
|
- !ruby/object:Gem::Dependency
|
81
|
-
|
60
|
+
name: i18n
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
82
62
|
none: false
|
83
63
|
requirements:
|
84
64
|
- - ~>
|
85
65
|
- !ruby/object:Gem::Version
|
86
|
-
hash: 7
|
87
|
-
segments:
|
88
|
-
- 0
|
89
|
-
- 6
|
90
66
|
version: "0.6"
|
91
|
-
requirement: *id005
|
92
|
-
name: i18n
|
93
|
-
prerelease: false
|
94
67
|
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *id005
|
95
70
|
- !ruby/object:Gem::Dependency
|
96
|
-
|
71
|
+
name: thor
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
97
73
|
none: false
|
98
74
|
requirements:
|
99
75
|
- - ~>
|
100
76
|
- !ruby/object:Gem::Version
|
101
|
-
hash: 23
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
- 14
|
105
77
|
version: "0.14"
|
106
|
-
requirement: *id006
|
107
|
-
name: thor
|
108
|
-
prerelease: false
|
109
78
|
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *id006
|
110
81
|
- !ruby/object:Gem::Dependency
|
111
|
-
|
82
|
+
name: crush
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
112
84
|
none: false
|
113
85
|
requirements:
|
114
86
|
- - ~>
|
115
87
|
- !ruby/object:Gem::Version
|
116
|
-
hash: 13
|
117
|
-
segments:
|
118
|
-
- 0
|
119
|
-
- 3
|
120
88
|
version: "0.3"
|
121
|
-
requirement: *id007
|
122
|
-
name: crush
|
123
|
-
prerelease: false
|
124
89
|
type: :runtime
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *id007
|
125
92
|
- !ruby/object:Gem::Dependency
|
126
|
-
|
93
|
+
name: rspec
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
127
95
|
none: false
|
128
96
|
requirements:
|
129
97
|
- - ~>
|
130
98
|
- !ruby/object:Gem::Version
|
131
|
-
hash: 15
|
132
|
-
segments:
|
133
|
-
- 2
|
134
|
-
- 6
|
135
99
|
version: "2.6"
|
136
|
-
requirement: *id008
|
137
|
-
name: rspec
|
138
|
-
prerelease: false
|
139
100
|
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *id008
|
140
103
|
- !ruby/object:Gem::Dependency
|
141
|
-
|
104
|
+
name: rack-test
|
105
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
142
106
|
none: false
|
143
107
|
requirements:
|
144
108
|
- - ~>
|
145
109
|
- !ruby/object:Gem::Version
|
146
|
-
hash: 7
|
147
|
-
segments:
|
148
|
-
- 0
|
149
|
-
- 6
|
150
110
|
version: "0.6"
|
151
|
-
requirement: *id009
|
152
|
-
name: rack-test
|
153
|
-
prerelease: false
|
154
111
|
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *id009
|
155
114
|
- !ruby/object:Gem::Dependency
|
156
|
-
|
115
|
+
name: test-construct
|
116
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
157
117
|
none: false
|
158
118
|
requirements:
|
159
119
|
- - ~>
|
160
120
|
- !ruby/object:Gem::Version
|
161
|
-
hash: 11
|
162
|
-
segments:
|
163
|
-
- 1
|
164
|
-
- 2
|
165
121
|
version: "1.2"
|
166
|
-
requirement: *id010
|
167
|
-
name: test-construct
|
168
|
-
prerelease: false
|
169
122
|
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: *id010
|
170
125
|
- !ruby/object:Gem::Dependency
|
171
|
-
|
126
|
+
name: unindent
|
127
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
172
128
|
none: false
|
173
129
|
requirements:
|
174
130
|
- - ~>
|
175
131
|
- !ruby/object:Gem::Version
|
176
|
-
hash: 15
|
177
|
-
segments:
|
178
|
-
- 1
|
179
|
-
- 0
|
180
132
|
version: "1.0"
|
181
|
-
requirement: *id011
|
182
|
-
name: unindent
|
183
|
-
prerelease: false
|
184
133
|
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *id011
|
185
136
|
- !ruby/object:Gem::Dependency
|
186
|
-
|
137
|
+
name: haml
|
138
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
187
139
|
none: false
|
188
140
|
requirements:
|
189
141
|
- - ">="
|
190
142
|
- !ruby/object:Gem::Version
|
191
|
-
hash: 3
|
192
|
-
segments:
|
193
|
-
- 0
|
194
143
|
version: "0"
|
195
|
-
requirement: *id012
|
196
|
-
name: haml
|
197
|
-
prerelease: false
|
198
144
|
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: *id012
|
199
147
|
- !ruby/object:Gem::Dependency
|
200
|
-
|
148
|
+
name: sass
|
149
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
201
150
|
none: false
|
202
151
|
requirements:
|
203
152
|
- - ">="
|
204
153
|
- !ruby/object:Gem::Version
|
205
|
-
hash: 3
|
206
|
-
segments:
|
207
|
-
- 0
|
208
154
|
version: "0"
|
209
|
-
requirement: *id013
|
210
|
-
name: sass
|
211
|
-
prerelease: false
|
212
155
|
type: :development
|
156
|
+
prerelease: false
|
157
|
+
version_requirements: *id013
|
213
158
|
- !ruby/object:Gem::Dependency
|
214
|
-
|
159
|
+
name: slim
|
160
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
215
161
|
none: false
|
216
162
|
requirements:
|
217
163
|
- - ">="
|
218
164
|
- !ruby/object:Gem::Version
|
219
|
-
hash: 3
|
220
|
-
segments:
|
221
|
-
- 0
|
222
165
|
version: "0"
|
223
|
-
requirement: *id014
|
224
|
-
name: slim
|
225
|
-
prerelease: false
|
226
166
|
type: :development
|
167
|
+
prerelease: false
|
168
|
+
version_requirements: *id014
|
227
169
|
- !ruby/object:Gem::Dependency
|
228
|
-
|
170
|
+
name: erubis
|
171
|
+
requirement: &id015 !ruby/object:Gem::Requirement
|
229
172
|
none: false
|
230
173
|
requirements:
|
231
174
|
- - ">="
|
232
175
|
- !ruby/object:Gem::Version
|
233
|
-
hash: 3
|
234
|
-
segments:
|
235
|
-
- 0
|
236
176
|
version: "0"
|
237
|
-
requirement: *id015
|
238
|
-
name: erubis
|
239
|
-
prerelease: false
|
240
177
|
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: *id015
|
241
180
|
- !ruby/object:Gem::Dependency
|
242
|
-
|
181
|
+
name: rdiscount
|
182
|
+
requirement: &id016 !ruby/object:Gem::Requirement
|
243
183
|
none: false
|
244
184
|
requirements:
|
245
185
|
- - ">="
|
246
186
|
- !ruby/object:Gem::Version
|
247
|
-
hash: 3
|
248
|
-
segments:
|
249
|
-
- 0
|
250
187
|
version: "0"
|
251
|
-
requirement: *id016
|
252
|
-
name: rdiscount
|
253
|
-
prerelease: false
|
254
188
|
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: *id016
|
255
191
|
- !ruby/object:Gem::Dependency
|
256
|
-
|
192
|
+
name: uglifier
|
193
|
+
requirement: &id017 !ruby/object:Gem::Requirement
|
257
194
|
none: false
|
258
195
|
requirements:
|
259
196
|
- - ">="
|
260
197
|
- !ruby/object:Gem::Version
|
261
|
-
hash: 3
|
262
|
-
segments:
|
263
|
-
- 0
|
264
198
|
version: "0"
|
265
|
-
requirement: *id017
|
266
|
-
name: uglifier
|
267
|
-
prerelease: false
|
268
199
|
type: :development
|
200
|
+
prerelease: false
|
201
|
+
version_requirements: *id017
|
269
202
|
- !ruby/object:Gem::Dependency
|
270
|
-
|
203
|
+
name: rake
|
204
|
+
requirement: &id018 !ruby/object:Gem::Requirement
|
271
205
|
none: false
|
272
206
|
requirements:
|
273
207
|
- - ">="
|
274
208
|
- !ruby/object:Gem::Version
|
275
|
-
hash: 3
|
276
|
-
segments:
|
277
|
-
- 0
|
278
209
|
version: "0"
|
279
|
-
requirement: *id018
|
280
|
-
name: rake
|
281
|
-
prerelease: false
|
282
210
|
type: :development
|
211
|
+
prerelease: false
|
212
|
+
version_requirements: *id018
|
283
213
|
description: Why another static site generator? Machined is for the developers who know and love the asset pipeline of Rails 3.1 and want to develop blazingly fast static websites. It's built from the ground up using Sprockets 2.0.
|
284
214
|
email:
|
285
215
|
- me@petebrowne.com
|
@@ -350,7 +280,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
350
280
|
requirements:
|
351
281
|
- - ">="
|
352
282
|
- !ruby/object:Gem::Version
|
353
|
-
hash:
|
283
|
+
hash: -3798876877697823148
|
354
284
|
segments:
|
355
285
|
- 0
|
356
286
|
version: "0"
|
@@ -359,14 +289,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
359
289
|
requirements:
|
360
290
|
- - ">="
|
361
291
|
- !ruby/object:Gem::Version
|
362
|
-
hash:
|
292
|
+
hash: -3798876877697823148
|
363
293
|
segments:
|
364
294
|
- 0
|
365
295
|
version: "0"
|
366
296
|
requirements: []
|
367
297
|
|
368
298
|
rubyforge_project: machined
|
369
|
-
rubygems_version: 1.8.
|
299
|
+
rubygems_version: 1.8.8
|
370
300
|
signing_key:
|
371
301
|
specification_version: 3
|
372
302
|
summary: A static site generator and Rack server built using Sprockets 2.0
|