building-blocks 1.1.0 → 1.2.0
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/CHANGELOG.rdoc +8 -1
- data/VERSION +1 -1
- data/lib/building_blocks/base.rb +90 -57
- data/spec/building-blocks/base_spec.rb +47 -53
- metadata +46 -4
data/CHANGELOG.rdoc
CHANGED
@@ -3,4 +3,11 @@
|
|
3
3
|
* Ability to disable use of partials when rendering a block
|
4
4
|
* Ability to disable use of partials for before and after hooks
|
5
5
|
* Complete test coverage
|
6
|
-
* :template_folder and :variable options are no longer being passed in as part of the options hash to defined blocks and partials
|
6
|
+
* :template_folder and :variable options are no longer being passed in as part of the options hash to defined blocks and partials
|
7
|
+
|
8
|
+
1.2.0 (February 5, 2012)
|
9
|
+
|
10
|
+
* Changed prototype for "use" method, such that the name of the block being rendered is now a required parameter.
|
11
|
+
* Documented BuildingBlocks::Base more thoroughly
|
12
|
+
* Changed the blocks.use method to blocks.render (blocks.use is still available for legacy purposes)
|
13
|
+
* Removed the original render method and replaced with render_template that takes the partial and block to render as arguments.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.2.0
|
data/lib/building_blocks/base.rb
CHANGED
@@ -10,9 +10,6 @@ module BuildingBlocks
|
|
10
10
|
# Hash of block names to BuildingBlocks::Container objects
|
11
11
|
attr_accessor :blocks
|
12
12
|
|
13
|
-
# the block that is passed in for the templating feature
|
14
|
-
attr_accessor :block
|
15
|
-
|
16
13
|
# Array of BuildingBlocks::Container objects, storing the order of blocks as they were queued
|
17
14
|
attr_accessor :queued_blocks
|
18
15
|
|
@@ -50,9 +47,9 @@ module BuildingBlocks
|
|
50
47
|
# The name of the block being defined (either a string or a symbol)
|
51
48
|
# [+options+]
|
52
49
|
# The default options for the block definition. Any or all of these options may be overrideen by
|
53
|
-
# whomever calls "blocks.
|
50
|
+
# whomever calls "blocks.render" on this block.
|
54
51
|
# [+block+]
|
55
|
-
# The block that is to be rendered when "blocks.
|
52
|
+
# The block that is to be rendered when "blocks.render" is called for this block.
|
56
53
|
def define(name, options={}, &block)
|
57
54
|
self.define_block_container(name, options, &block)
|
58
55
|
nil
|
@@ -71,37 +68,101 @@ module BuildingBlocks
|
|
71
68
|
# The name of the block being defined (either a string or a symbol)
|
72
69
|
# [+options+]
|
73
70
|
# The default options for the block definition. Any or all of these options may be overrideen by
|
74
|
-
# whomever calls "blocks.
|
71
|
+
# whomever calls "blocks.render" on this block.
|
75
72
|
# [+block+]
|
76
|
-
# The block that is to be rendered when "blocks.
|
73
|
+
# The block that is to be rendered when "blocks.render" is called for this block.
|
77
74
|
def replace(name, options={}, &block)
|
78
75
|
blocks[name.to_sym] = nil
|
79
76
|
self.define_block_container(name, options, &block)
|
80
77
|
nil
|
81
78
|
end
|
82
79
|
|
83
|
-
|
84
|
-
|
80
|
+
# Render a block, first rendering any "before" blocks, then rendering the block itself, then rendering
|
81
|
+
# any "after" blocks. BuildingBlocks will make four different attempts to render block:
|
82
|
+
# 1) Look for a block that has been defined inline elsewhere, using the blocks.define method:
|
83
|
+
# <% blocks.define :wizard do |options| %>
|
84
|
+
# Inline Block Step#<%= options[:step] %>.
|
85
|
+
# <% end %>
|
86
|
+
#
|
87
|
+
# <%= blocks.render :wizard, :step => @step %>
|
88
|
+
# 2) Look for a partial within the current controller's view directory:
|
89
|
+
# <%= blocks.render :wizard, :step => @step %>
|
90
|
+
#
|
91
|
+
# <!-- In /app/views/pages/_wizard.html.erb (assuming it is the pages controller running): -->
|
92
|
+
# Controller-specific Block Step# <%= step %>.
|
93
|
+
# 3) Look for a partial with the global blocks view directory (by default /app/views/blocks/):
|
94
|
+
# <%= blocks.render :wizard, :step => @step %>
|
95
|
+
#
|
96
|
+
# <!-- In /app/views/blocks/_wizard.html.erb: -->
|
97
|
+
# Global Block Step#<%= step %>.
|
98
|
+
# 4) Render the default implementation for the block if provided to the blocks.render call:
|
99
|
+
# <%= blocks.render :wizard, :step => @step do |options| do %>
|
100
|
+
# Default Implementation Block Step#<%= options %>.
|
101
|
+
# <% end %>
|
102
|
+
# Options:
|
103
|
+
# [+name+]
|
104
|
+
# The name of the block to render (either a string or a symbol)
|
105
|
+
# [+*args+]
|
106
|
+
# Any arguments to pass to the block to be rendered (and also to be passed to any "before" and "after" blocks).
|
107
|
+
# [+block+]
|
108
|
+
# The default block to render if no such block block that is to be rendered when "blocks.render" is called for this block.
|
109
|
+
def render(name_or_container, *args, &block)
|
85
110
|
buffer = ActiveSupport::SafeBuffer.new
|
86
111
|
buffer << render_before_blocks(name_or_container, *args)
|
87
112
|
buffer << render_block(name_or_container, *args, &block)
|
88
113
|
buffer << render_after_blocks(name_or_container, *args)
|
89
114
|
buffer
|
90
115
|
end
|
91
|
-
|
116
|
+
alias use render
|
117
|
+
|
118
|
+
# Queue a block for later rendering, such as within a template.
|
119
|
+
# <%= BuildingBlocks::Base.new(self).render_template("shared/wizard") do |blocks| %>
|
120
|
+
# <% blocks.queue :step1 %>
|
121
|
+
# <% blocks.queue :step2 do %>
|
122
|
+
# My overridden Step 2 |
|
123
|
+
# <% end %>
|
124
|
+
# <% blocks.queue :step3 %>
|
125
|
+
# <% blocks.queue do %>
|
126
|
+
# | Anonymous Step 4
|
127
|
+
# <% end %>
|
128
|
+
# <% end %>
|
129
|
+
#
|
130
|
+
# <!-- In /app/views/shared/wizard -->
|
131
|
+
# <% blocks.define :step1 do %>
|
132
|
+
# Step 1 |
|
133
|
+
# <% end %>
|
134
|
+
#
|
135
|
+
# <% blocks.define :step2 do %>
|
136
|
+
# Step 2 |
|
137
|
+
# <% end %>
|
138
|
+
#
|
139
|
+
# <% blocks.define :step3 do %>
|
140
|
+
# Step 3
|
141
|
+
# <% end %>
|
142
|
+
#
|
143
|
+
# <% blocks.queued_blocks.each do |block| %>
|
144
|
+
# <%= blocks.render block %>
|
145
|
+
# <% end %>
|
146
|
+
#
|
147
|
+
# <!-- Will render: Step 1 | My overridden Step 2 | Step 3 | Anonymous Step 4-->
|
148
|
+
# Options:
|
149
|
+
# [+*args+]
|
150
|
+
# The options to pass in when this block is rendered. These will override any options provided to the actual block
|
151
|
+
# definition. Any or all of these options may be overriden by whoever calls "blocks.render" on this block.
|
152
|
+
# Usually the first of these args will be the name of the block being queued (either a string or a symbol)
|
153
|
+
# [+block+]
|
154
|
+
# The optional block definition to render when the queued block is rendered
|
92
155
|
def queue(*args, &block)
|
93
156
|
self.queued_blocks << self.define_block_container(*args, &block)
|
94
157
|
nil
|
95
158
|
end
|
96
159
|
|
97
|
-
def
|
98
|
-
raise "Must specify :template parameter in order to render" unless global_options[:template]
|
99
|
-
|
160
|
+
def render_template(partial, &block)
|
100
161
|
render_options = global_options.clone
|
101
162
|
render_options[self.variable] = self
|
102
|
-
render_options[:captured_block] = view.capture(self, &
|
163
|
+
render_options[:captured_block] = view.capture(self, &block) if block_given?
|
103
164
|
|
104
|
-
view.render
|
165
|
+
view.render partial, render_options
|
105
166
|
end
|
106
167
|
|
107
168
|
def before(name, options={}, &block)
|
@@ -116,6 +177,8 @@ module BuildingBlocks
|
|
116
177
|
end
|
117
178
|
alias append after
|
118
179
|
|
180
|
+
protected
|
181
|
+
|
119
182
|
# If a method is missing, we'll assume the user is starting a new block group by that missing method name
|
120
183
|
def method_missing(m, *args, &block)
|
121
184
|
options = args.extract_options!
|
@@ -130,7 +193,7 @@ module BuildingBlocks
|
|
130
193
|
self.queued_blocks = []
|
131
194
|
self.block_groups[m] = self.queued_blocks
|
132
195
|
|
133
|
-
# Capture the contents of the block group (this will only capture block definitions and block
|
196
|
+
# Capture the contents of the block group (this will only capture block definitions and block renders; it will ignore anything else)
|
134
197
|
view.capture(global_options.merge(options), &block) if block_given?
|
135
198
|
|
136
199
|
# restore the original block positions array
|
@@ -138,14 +201,11 @@ module BuildingBlocks
|
|
138
201
|
nil
|
139
202
|
end
|
140
203
|
|
141
|
-
|
142
|
-
|
143
|
-
def initialize(view, options={}, &block)
|
204
|
+
def initialize(view, options={})
|
144
205
|
self.templates_folder = options[:templates_folder] ? options.delete(:templates_folder) : BuildingBlocks::TEMPLATE_FOLDER
|
145
206
|
self.variable = (options[:variable] ? options.delete(:variable) : :blocks).to_sym
|
146
207
|
self.view = view
|
147
208
|
self.global_options = options
|
148
|
-
self.block = block
|
149
209
|
self.queued_blocks = []
|
150
210
|
self.blocks = {}
|
151
211
|
self.anonymous_block_number = 0
|
@@ -194,41 +254,14 @@ module BuildingBlocks
|
|
194
254
|
end
|
195
255
|
|
196
256
|
def render_before_blocks(name_or_container, *args)
|
197
|
-
|
198
|
-
|
199
|
-
block_options = {}
|
200
|
-
if (name_or_container.is_a?(BuildingBlocks::Container))
|
201
|
-
name = name_or_container.name.to_sym
|
202
|
-
block_options = name_or_container.options
|
203
|
-
else
|
204
|
-
name = name_or_container.to_sym
|
205
|
-
block_options = blocks[name].options if blocks[name]
|
206
|
-
end
|
207
|
-
|
208
|
-
before_name = "before_#{name.to_s}".to_sym
|
209
|
-
buffer = ActiveSupport::SafeBuffer.new
|
210
|
-
|
211
|
-
if blocks[before_name].present?
|
212
|
-
blocks[before_name].each do |block_container|
|
213
|
-
args_clone = args.clone
|
214
|
-
args_clone.push(global_options.merge(block_options).merge(block_container.options).merge(options))
|
215
|
-
buffer << view.capture(*(args_clone[0, block_container.block.arity]), &block_container.block)
|
216
|
-
end
|
217
|
-
elsif BuildingBlocks::USE_PARTIALS && BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS
|
218
|
-
begin
|
219
|
-
begin
|
220
|
-
buffer << view.render("before_#{name.to_s}", global_options.merge(block_options).merge(options))
|
221
|
-
rescue ActionView::MissingTemplate
|
222
|
-
buffer << view.render("#{self.templates_folder}/before_#{name.to_s}", global_options.merge(block_options).merge(options))
|
223
|
-
end
|
224
|
-
rescue ActionView::MissingTemplate
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
buffer
|
257
|
+
render_before_or_after_blocks(name_or_container, "before", *args)
|
229
258
|
end
|
230
259
|
|
231
260
|
def render_after_blocks(name_or_container, *args)
|
261
|
+
render_before_or_after_blocks(name_or_container, "after", *args)
|
262
|
+
end
|
263
|
+
|
264
|
+
def render_before_or_after_blocks(name_or_container, before_or_after, *args)
|
232
265
|
options = args.extract_options!
|
233
266
|
|
234
267
|
block_options = {}
|
@@ -240,11 +273,11 @@ module BuildingBlocks
|
|
240
273
|
block_options = blocks[name].options if blocks[name]
|
241
274
|
end
|
242
275
|
|
243
|
-
|
276
|
+
before_name = "#{before_or_after}_#{name.to_s}".to_sym
|
244
277
|
buffer = ActiveSupport::SafeBuffer.new
|
245
278
|
|
246
|
-
if blocks[
|
247
|
-
blocks[
|
279
|
+
if blocks[before_name].present?
|
280
|
+
blocks[before_name].each do |block_container|
|
248
281
|
args_clone = args.clone
|
249
282
|
args_clone.push(global_options.merge(block_options).merge(block_container.options).merge(options))
|
250
283
|
buffer << view.capture(*(args_clone[0, block_container.block.arity]), &block_container.block)
|
@@ -252,9 +285,9 @@ module BuildingBlocks
|
|
252
285
|
elsif BuildingBlocks::USE_PARTIALS && BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS
|
253
286
|
begin
|
254
287
|
begin
|
255
|
-
buffer << view.render("
|
288
|
+
buffer << view.render("#{before_or_after}_#{name.to_s}", global_options.merge(block_options).merge(options))
|
256
289
|
rescue ActionView::MissingTemplate
|
257
|
-
buffer << view.render("#{self.templates_folder}
|
290
|
+
buffer << view.render("#{self.templates_folder}/#{before_or_after}_#{name.to_s}", global_options.merge(block_options).merge(options))
|
258
291
|
end
|
259
292
|
rescue ActionView::MissingTemplate
|
260
293
|
end
|
@@ -15,7 +15,7 @@ describe BuildingBlocks::Base do
|
|
15
15
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2).never
|
16
16
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
17
17
|
@view.expects(:render).with("shared/some_block", :value1 => 1, :value2 => 2).once
|
18
|
-
@builder.
|
18
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2
|
19
19
|
BuildingBlocks.send(:remove_const, "TEMPLATE_FOLDER")
|
20
20
|
BuildingBlocks.const_set("TEMPLATE_FOLDER", "blocks")
|
21
21
|
end
|
@@ -147,46 +147,40 @@ describe BuildingBlocks::Base do
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
|
150
|
-
describe "
|
151
|
-
it "should raise an exception if no :template parameter is specified in the options hash" do
|
152
|
-
view = mock()
|
153
|
-
builder = BuildingBlocks::Base.new(view)
|
154
|
-
lambda { builder.render }.should raise_error("Must specify :template parameter in order to render")
|
155
|
-
end
|
156
|
-
|
150
|
+
describe "render_template method" do
|
157
151
|
it "should attempt to render a partial specified as the :template parameter" do
|
158
152
|
view = mock()
|
159
|
-
builder = BuildingBlocks::Base.new(view
|
160
|
-
view.expects(:render).with{ |template, options| template
|
161
|
-
builder.
|
153
|
+
builder = BuildingBlocks::Base.new(view)
|
154
|
+
view.expects(:render).with{ |template, options| template == "my_template"}
|
155
|
+
builder.render_template("my_template")
|
162
156
|
end
|
163
157
|
|
164
158
|
it "should set all of the global options as local variables to the partial it renders" do
|
165
159
|
view = mock()
|
166
|
-
builder = BuildingBlocks::Base.new(view
|
167
|
-
view.expects(:render).with { |template, options|
|
168
|
-
builder.
|
160
|
+
builder = BuildingBlocks::Base.new(view)
|
161
|
+
view.expects(:render).with { |template, options| template == 'some_template' && options[:blocks] == builder }
|
162
|
+
builder.render_template("some_template")
|
169
163
|
end
|
170
164
|
|
171
165
|
it "should capture the data of a block if a block has been specified" do
|
172
166
|
block = Proc.new { |options| "my captured block" }
|
173
|
-
builder = BuildingBlocks::Base.new(@view
|
174
|
-
@view.expects(:render).with { |tempate, options| options[:captured_block]
|
175
|
-
builder.
|
167
|
+
builder = BuildingBlocks::Base.new(@view)
|
168
|
+
@view.expects(:render).with { |tempate, options| options[:captured_block] == "my captured block" }
|
169
|
+
builder.render_template("template", &block)
|
176
170
|
end
|
177
171
|
|
178
172
|
it "should by default add a variable to the partial called 'blocks' as a pointer to the BuildingBlocks::Base instance" do
|
179
173
|
view = mock()
|
180
|
-
builder = BuildingBlocks::Base.new(view
|
181
|
-
view.expects(:render).with { |template, options| options[:blocks]
|
182
|
-
builder.
|
174
|
+
builder = BuildingBlocks::Base.new(view)
|
175
|
+
view.expects(:render).with { |template, options| options[:blocks] == builder }
|
176
|
+
builder.render_template("some_template")
|
183
177
|
end
|
184
178
|
|
185
179
|
it "should allow the user to override the local variable passed to the partial as a pointer to the BuildingBlocks::Base instance" do
|
186
180
|
view = mock()
|
187
|
-
builder = BuildingBlocks::Base.new(view, :variable => "my_variable"
|
181
|
+
builder = BuildingBlocks::Base.new(view, :variable => "my_variable")
|
188
182
|
view.expects(:render).with { |template, options| options[:blocks].should be_nil }
|
189
|
-
builder.
|
183
|
+
builder.render_template("some_template")
|
190
184
|
end
|
191
185
|
end
|
192
186
|
|
@@ -293,13 +287,13 @@ describe BuildingBlocks::Base do
|
|
293
287
|
it "should be able to use a defined block by its name" do
|
294
288
|
block = Proc.new {"output"}
|
295
289
|
@builder.define :some_block, &block
|
296
|
-
@builder.
|
290
|
+
@builder.render(:some_block).should eql "output"
|
297
291
|
end
|
298
292
|
|
299
293
|
it "should automatically pass in an options hash to a defined block that takes one paramter when that block is used" do
|
300
294
|
block = Proc.new {|options| "Options are #{options.inspect}"}
|
301
295
|
@builder.define :some_block, &block
|
302
|
-
@builder.
|
296
|
+
@builder.render(:some_block).should eql "Options are {}"
|
303
297
|
end
|
304
298
|
|
305
299
|
it "should be able to use a defined block by its name and pass in runtime arguments as a hash" do
|
@@ -307,7 +301,7 @@ describe BuildingBlocks::Base do
|
|
307
301
|
print_hash(options)
|
308
302
|
end
|
309
303
|
@builder.define :some_block, &block
|
310
|
-
@builder.
|
304
|
+
@builder.render(:some_block, :param1 => 1, :param2 => "value2").should eql print_hash(:param1 => 1, :param2 => "value2")
|
311
305
|
end
|
312
306
|
|
313
307
|
it "should be able to use a defined block by its name and pass in runtime arguments one by one" do
|
@@ -315,61 +309,61 @@ describe BuildingBlocks::Base do
|
|
315
309
|
"first_param: #{first_param}, second_param: #{second_param}, #{print_hash options}"
|
316
310
|
end
|
317
311
|
@builder.define :some_block, &block
|
318
|
-
@builder.
|
312
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:param1 => 1, :param2 => "value2")}")
|
319
313
|
end
|
320
314
|
|
321
315
|
it "should match up the number of arguments to a defined block with the parameters passed when a block is used" do
|
322
316
|
block = Proc.new {|first_param| "first_param = #{first_param}"}
|
323
317
|
@builder.define :some_block, &block
|
324
|
-
@builder.
|
318
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql "first_param = 3"
|
325
319
|
|
326
320
|
block = Proc.new {|first_param, second_param| "first_param = #{first_param}, second_param = #{second_param}"}
|
327
321
|
@builder.replace :some_block, &block
|
328
|
-
@builder.
|
322
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql "first_param = 3, second_param = 4"
|
329
323
|
|
330
324
|
block = Proc.new do |first_param, second_param, options|
|
331
325
|
"first_param: #{first_param}, second_param: #{second_param}, #{print_hash options}"
|
332
326
|
end
|
333
327
|
@builder.replace :some_block, &block
|
334
|
-
@builder.
|
328
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:param1 => 1, :param2 => "value2")}")
|
335
329
|
end
|
336
330
|
|
337
331
|
it "should not render anything if using a block that has been defined" do
|
338
332
|
@view.expects(:capture).never
|
339
333
|
@view.expects(:render).with("some_block", {}).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
340
334
|
@view.expects(:render).with("blocks/some_block", {}).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
341
|
-
@builder.
|
335
|
+
@builder.render :some_block
|
342
336
|
end
|
343
337
|
|
344
|
-
it "should first attempt to capture a block's contents when blocks.
|
338
|
+
it "should first attempt to capture a block's contents when blocks.render is called" do
|
345
339
|
block = Proc.new {|options|}
|
346
340
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2)
|
347
341
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).never
|
348
342
|
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
|
349
343
|
@builder.define :some_block, &block
|
350
|
-
@builder.
|
344
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2
|
351
345
|
end
|
352
346
|
|
353
|
-
it "should second attempt to render a local partial by the block's name when blocks.
|
347
|
+
it "should second attempt to render a local partial by the block's name when blocks.render is called" do
|
354
348
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2).never
|
355
349
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).once
|
356
350
|
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
|
357
|
-
@builder.
|
351
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2
|
358
352
|
end
|
359
353
|
|
360
|
-
it "should third attempt to render a global partial by the block's name when blocks.
|
354
|
+
it "should third attempt to render a global partial by the block's name when blocks.render is called" do
|
361
355
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2).never
|
362
356
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
363
357
|
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).once
|
364
|
-
@builder.
|
358
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2
|
365
359
|
end
|
366
360
|
|
367
|
-
it "should fourth attempt to render a default block when blocks.
|
361
|
+
it "should fourth attempt to render a default block when blocks.render is called" do
|
368
362
|
block = Proc.new {|options|}
|
369
363
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
370
364
|
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
371
365
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2)
|
372
|
-
@builder.
|
366
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2, &block
|
373
367
|
end
|
374
368
|
|
375
369
|
it "should not attempt to render a partial if BuildingBlocks::USE_PARTIALS is set to false" do
|
@@ -379,7 +373,7 @@ describe BuildingBlocks::Base do
|
|
379
373
|
@view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).never
|
380
374
|
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
|
381
375
|
@view.expects(:capture).with(:value1 => 1, :value2 => 2)
|
382
|
-
@builder.
|
376
|
+
@builder.render :some_block, :value1 => 1, :value2 => 2, &block
|
383
377
|
BuildingBlocks.send(:remove_const, "USE_PARTIALS")
|
384
378
|
BuildingBlocks.const_set("USE_PARTIALS", true)
|
385
379
|
end
|
@@ -391,14 +385,14 @@ describe BuildingBlocks::Base do
|
|
391
385
|
@builder.define(:my_before_block, :param1 => "define level", :param2 => "define level", :param3 => "define level", &block)
|
392
386
|
block_container = @builder.queued_blocks.first
|
393
387
|
@view.expects(:capture).with(:param4 => 'global level', :param1 => 'use level', :param2 => 'queue level', :param3 => 'define level')
|
394
|
-
@builder.
|
388
|
+
@builder.render block_container, :param1 => "use level"
|
395
389
|
end
|
396
390
|
|
397
391
|
it "should render the contents of a defined block when that block is used" do
|
398
392
|
block = Proc.new {}
|
399
393
|
@view.expects(:capture).with(nil).returns("rendered content")
|
400
394
|
@builder.define :some_block, &block
|
401
|
-
buffer = @builder.
|
395
|
+
buffer = @builder.render :some_block
|
402
396
|
buffer.should eql "rendered content"
|
403
397
|
end
|
404
398
|
end
|
@@ -413,7 +407,7 @@ describe BuildingBlocks::Base do
|
|
413
407
|
block = Proc.new {|value1, value2, options|}
|
414
408
|
@builder.before("my_before_block", &block)
|
415
409
|
@view.expects(:capture).with(1, 2, :value3 => 3, :value4 => 4)
|
416
|
-
@builder.
|
410
|
+
@builder.render :my_before_block, 1, 2, :value3 => 3, :value4 => 4
|
417
411
|
end
|
418
412
|
|
419
413
|
it "should try and render a before block as a local partial if no before blocks are specified" do
|
@@ -421,7 +415,7 @@ describe BuildingBlocks::Base do
|
|
421
415
|
@view.expects(:capture).never
|
422
416
|
@view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).once
|
423
417
|
@view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).never
|
424
|
-
@builder.
|
418
|
+
@builder.render :my_before_block, :value1 => 1, :value2 => 2
|
425
419
|
end
|
426
420
|
|
427
421
|
it "should try and render a before block as a global partial if no after blocks are specified and the local partial does not exist" do
|
@@ -429,7 +423,7 @@ describe BuildingBlocks::Base do
|
|
429
423
|
@view.expects(:capture).never
|
430
424
|
@view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
431
425
|
@view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).once
|
432
|
-
@builder.
|
426
|
+
@builder.render :my_before_block, :value1 => 1, :value2 => 2
|
433
427
|
end
|
434
428
|
|
435
429
|
it "should not attempt to render a before block as a partial if BuildingBlocks::USE_PARTIALS is set to false" do
|
@@ -439,7 +433,7 @@ describe BuildingBlocks::Base do
|
|
439
433
|
@view.expects(:capture).never
|
440
434
|
@view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).never
|
441
435
|
@view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).never
|
442
|
-
@builder.
|
436
|
+
@builder.render :my_before_block, :value1 => 1, :value2 => 2
|
443
437
|
BuildingBlocks.send(:remove_const, "USE_PARTIALS")
|
444
438
|
BuildingBlocks.const_set("USE_PARTIALS", true)
|
445
439
|
end
|
@@ -451,7 +445,7 @@ describe BuildingBlocks::Base do
|
|
451
445
|
@view.expects(:capture).never
|
452
446
|
@view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).never
|
453
447
|
@view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).never
|
454
|
-
@builder.
|
448
|
+
@builder.render :my_before_block, :value1 => 1, :value2 => 2
|
455
449
|
BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
|
456
450
|
BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
|
457
451
|
end
|
@@ -462,7 +456,7 @@ describe BuildingBlocks::Base do
|
|
462
456
|
@builder.define(:my_before_block, :param1 => "block level", :param2 => "block level", :param3 => "block level", &block)
|
463
457
|
@builder.before(:my_before_block, :param1 => "before block level", :param2 => "before block level", &block)
|
464
458
|
@view.expects(:capture).with(:param4 => 'global level', :param1 => 'top level', :param2 => 'before block level', :param3 => 'block level')
|
465
|
-
@builder.
|
459
|
+
@builder.render :my_before_block, :param1 => "top level"
|
466
460
|
end
|
467
461
|
end
|
468
462
|
|
@@ -476,7 +470,7 @@ describe BuildingBlocks::Base do
|
|
476
470
|
block = Proc.new {|value1, value2, options|}
|
477
471
|
@builder.after("my_after_block", &block)
|
478
472
|
@view.expects(:capture).with(1, 2, :value3 => 3, :value4 => 4)
|
479
|
-
@builder.
|
473
|
+
@builder.render :my_after_block, 1, 2, :value3 => 3, :value4 => 4
|
480
474
|
end
|
481
475
|
|
482
476
|
it "should try and render a after block as a local partial if no after blocks are specified" do
|
@@ -484,7 +478,7 @@ describe BuildingBlocks::Base do
|
|
484
478
|
@view.expects(:capture).never
|
485
479
|
@view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).once
|
486
480
|
@view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).never
|
487
|
-
@builder.
|
481
|
+
@builder.render :my_after_block, :value1 => 1, :value2 => 2
|
488
482
|
end
|
489
483
|
|
490
484
|
it "should try and render a after block as a global partial if no after blocks are specified and the local partial does not exist" do
|
@@ -492,7 +486,7 @@ describe BuildingBlocks::Base do
|
|
492
486
|
@view.expects(:capture).never
|
493
487
|
@view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
494
488
|
@view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).once
|
495
|
-
@builder.
|
489
|
+
@builder.render :my_after_block, :value1 => 1, :value2 => 2
|
496
490
|
end
|
497
491
|
|
498
492
|
it "should not attempt to render a after block as a partial if BuildingBlocks::USE_PARTIALS is set to false" do
|
@@ -502,7 +496,7 @@ describe BuildingBlocks::Base do
|
|
502
496
|
@view.expects(:capture).never
|
503
497
|
@view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).never
|
504
498
|
@view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).never
|
505
|
-
@builder.
|
499
|
+
@builder.render :my_after_block, :value1 => 1, :value2 => 2
|
506
500
|
BuildingBlocks.send(:remove_const, "USE_PARTIALS")
|
507
501
|
BuildingBlocks.const_set("USE_PARTIALS", true)
|
508
502
|
end
|
@@ -514,7 +508,7 @@ describe BuildingBlocks::Base do
|
|
514
508
|
@view.expects(:capture).never
|
515
509
|
@view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).never
|
516
510
|
@view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).never
|
517
|
-
@builder.
|
511
|
+
@builder.render :my_after_block, :value1 => 1, :value2 => 2
|
518
512
|
BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
|
519
513
|
BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
|
520
514
|
end
|
@@ -525,7 +519,7 @@ describe BuildingBlocks::Base do
|
|
525
519
|
@builder.define(:my_after_block, :param1 => "block level", :param2 => "block level", :param3 => "block level", &block)
|
526
520
|
@builder.after(:my_after_block, :param1 => "after block level", :param2 => "after block level", &block)
|
527
521
|
@view.expects(:capture).with(:param4 => 'global level', :param1 => 'top level', :param2 => 'after block level', :param3 => 'block level')
|
528
|
-
@builder.
|
522
|
+
@builder.render :my_after_block, :param1 => "top level"
|
529
523
|
end
|
530
524
|
end
|
531
525
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: building-blocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 2
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew Hunter
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-02-
|
18
|
+
date: 2012-02-05 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -160,6 +160,48 @@ dependencies:
|
|
160
160
|
prerelease: false
|
161
161
|
type: :development
|
162
162
|
requirement: *id010
|
163
|
+
- !ruby/object:Gem::Dependency
|
164
|
+
name: jeweler
|
165
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
174
|
+
prerelease: false
|
175
|
+
type: :development
|
176
|
+
requirement: *id011
|
177
|
+
- !ruby/object:Gem::Dependency
|
178
|
+
name: jeweler
|
179
|
+
version_requirements: &id012 !ruby/object:Gem::Requirement
|
180
|
+
none: false
|
181
|
+
requirements:
|
182
|
+
- - ">="
|
183
|
+
- !ruby/object:Gem::Version
|
184
|
+
hash: 3
|
185
|
+
segments:
|
186
|
+
- 0
|
187
|
+
version: "0"
|
188
|
+
prerelease: false
|
189
|
+
type: :development
|
190
|
+
requirement: *id012
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: jeweler
|
193
|
+
version_requirements: &id013 !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
hash: 3
|
199
|
+
segments:
|
200
|
+
- 0
|
201
|
+
version: "0"
|
202
|
+
prerelease: false
|
203
|
+
type: :development
|
204
|
+
requirement: *id013
|
163
205
|
description: ""
|
164
206
|
email: hunterae@gmail.com
|
165
207
|
executables: []
|