machined 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- # Returns the locals hash. It's actually an instance
22
- # of `ActiveSupport::HashWithIndifferentAccess`, so strings
23
- # and symbols can be used interchangeably.
24
- def locals
25
- @locals ||= ActiveSupport::HashWithIndifferentAccess.new
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
- self.locals[object_name] = object
96
- self.locals["#{object_name}_counter"] = options.delete(:counter)
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 locals = options.delete(:locals) || options
101
- self.locals = locals
105
+ if leftover_locals = options.delete(:locals) || options
106
+ partial_locals.merge!(leftover_locals)
102
107
  end
103
108
 
104
- evaluate_without_processor template, Machined::Processors::LayoutProcessor
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
@@ -58,7 +58,7 @@ module Machined
58
58
  template = processor.new(layout_path.to_s) { result }
59
59
  result = template.render(context, {}) { data }
60
60
  rescue Exception => e
61
- context.annotate_exception! e
61
+ context.send :annotate_exception!, e
62
62
  raise
63
63
  end
64
64
  end
@@ -1,3 +1,3 @@
1
1
  module Machined
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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
- segments:
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-06 00:00:00 Z
13
+ date: 2011-10-08 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
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
- version_requirements: &id002 !ruby/object:Gem::Requirement
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
- version_requirements: &id003 !ruby/object:Gem::Requirement
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
- version_requirements: &id004 !ruby/object:Gem::Requirement
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
- version_requirements: &id005 !ruby/object:Gem::Requirement
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
- version_requirements: &id006 !ruby/object:Gem::Requirement
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
- version_requirements: &id007 !ruby/object:Gem::Requirement
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
- version_requirements: &id008 !ruby/object:Gem::Requirement
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
- version_requirements: &id009 !ruby/object:Gem::Requirement
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
- version_requirements: &id010 !ruby/object:Gem::Requirement
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
- version_requirements: &id011 !ruby/object:Gem::Requirement
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
- version_requirements: &id012 !ruby/object:Gem::Requirement
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
- version_requirements: &id013 !ruby/object:Gem::Requirement
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
- version_requirements: &id014 !ruby/object:Gem::Requirement
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
- version_requirements: &id015 !ruby/object:Gem::Requirement
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
- version_requirements: &id016 !ruby/object:Gem::Requirement
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
- version_requirements: &id017 !ruby/object:Gem::Requirement
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
- version_requirements: &id018 !ruby/object:Gem::Requirement
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: 3
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: 3
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.5
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