building-blocks 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -10,4 +10,12 @@
10
10
  * Changed prototype for "use" method, such that the name of the block being rendered is now a required parameter.
11
11
  * Documented BuildingBlocks::Base more thoroughly
12
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.
13
+ * Removed the original render method and replaced with render_template that takes the partial and block to render as arguments.
14
+
15
+ 1.2.1 (February 7, 2012)
16
+
17
+ * Only try to render "before" and "after" blocks as partials if that BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is globally set to true (set to false now by default)
18
+
19
+ 1.2.2 (February 9, 2012)
20
+
21
+ * Allow :use_partials and :use_partials_for_before_and_after_hooks to be passed in as initialization options to BuildingBlocks::Base to control whether BuildingBlocks attempts to render partials when "blocks.render" is called.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.1
1
+ 1.2.2
@@ -28,6 +28,12 @@ module BuildingBlocks
28
28
  # The variable to use when rendering the partial for the templating feature (by default, "blocks")
29
29
  attr_accessor :variable
30
30
 
31
+ # Boolean variable for whether BuildingBlocks should attempt to render blocks as partials if a defined block cannot be found
32
+ attr_accessor :use_partials
33
+
34
+ # Boolean variable for whether BuildingBlocks should attempt to render blocks before and after blocks as partials if no before or after blocks exist
35
+ attr_accessor :use_partials_for_before_and_after_hooks
36
+
31
37
  # Checks if a particular block has been defined within the current block scope.
32
38
  # <%= blocks.defined? :some_block_name %>
33
39
  # Options:
@@ -157,6 +163,41 @@ module BuildingBlocks
157
163
  nil
158
164
  end
159
165
 
166
+ # Render a partial, treating it as a template, and any code in the block argument will impact how the template renders
167
+ # <%= BuildingBlocks::Base.new(self).render_template("shared/wizard") do |blocks| %>
168
+ # <% blocks.queue :step1 %>
169
+ # <% blocks.queue :step2 do %>
170
+ # My overridden Step 2 |
171
+ # <% end %>
172
+ # <% blocks.queue :step3 %>
173
+ # <% blocks.queue do %>
174
+ # | Anonymous Step 4
175
+ # <% end %>
176
+ # <% end %>
177
+ #
178
+ # <!-- In /app/views/shared/wizard -->
179
+ # <% blocks.define :step1 do %>
180
+ # Step 1 |
181
+ # <% end %>
182
+ #
183
+ # <% blocks.define :step2 do %>
184
+ # Step 2 |
185
+ # <% end %>
186
+ #
187
+ # <% blocks.define :step3 do %>
188
+ # Step 3
189
+ # <% end %>
190
+ #
191
+ # <% blocks.queued_blocks.each do |block| %>
192
+ # <%= blocks.render block %>
193
+ # <% end %>
194
+ #
195
+ # <!-- Will render: Step 1 | My overridden Step 2 | Step 3 | Anonymous Step 4-->
196
+ # Options:
197
+ # [+partial+]
198
+ # The partial to render as a template
199
+ # [+block+]
200
+ # An optional block with code that affects how the template renders
160
201
  def render_template(partial, &block)
161
202
  render_options = global_options.clone
162
203
  render_options[self.variable] = self
@@ -165,12 +206,78 @@ module BuildingBlocks
165
206
  view.render partial, render_options
166
207
  end
167
208
 
209
+ # Add a block to render before another block. This before block will be put into an array so that multiple
210
+ # before blocks may be queued. They will render in the order in which they are declared when the
211
+ # "blocks#render" method is called. Any options specified to the before block will override any options
212
+ # specified in the block definition.
213
+ # <% blocks.define :wizard, :option1 => 1, :option2 => 2 do |options| %>
214
+ # Step 2 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
215
+ # <% end %>
216
+ #
217
+ # <% blocks.before :wizard, :option1 => 3 do
218
+ # Step 0 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
219
+ # <% end %>
220
+ #
221
+ # <% blocks.before :wizard, :option2 => 4 do
222
+ # Step 1 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
223
+ # <% end %>
224
+ #
225
+ # <%= blocks.use :wizard %>
226
+ #
227
+ # <!-- Will render:
228
+ # Step 0 (:option1 => 3, :option2 => 2)<br />
229
+ # Step 1 (:option1 => 1, :option2 => 4)<br />
230
+ # Step 2 (:option1 => 1, :option2 => 2)<br />
231
+ # -->
232
+ #
233
+ # <%= blocks.render :wizard, :step => @step %>
234
+ # Options:
235
+ # [+name+]
236
+ # The name of the block to render this code before when that block is rendered
237
+ # [+options+]
238
+ # Any options to specify to the before block when it renders. These will override any options
239
+ # specified when the block was defined.
240
+ # [+block+]
241
+ # The block of code to render before another block
168
242
  def before(name, options={}, &block)
169
243
  self.queue_block_container("before_#{name.to_s}", options, &block)
170
244
  nil
171
245
  end
172
246
  alias prepend before
173
247
 
248
+ # Add a block to render after another block. This after block will be put into an array so that multiple
249
+ # after blocks may be queued. They will render in the order in which they are declared when the
250
+ # "blocks#render" method is called. Any options specified to the after block will override any options
251
+ # specified in the block definition.
252
+ # <% blocks.define :wizard, :option1 => 1, :option2 => 2 do |options| %>
253
+ # Step 2 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
254
+ # <% end %>
255
+ #
256
+ # <% blocks.after :wizard, :option1 => 3 do
257
+ # Step 3 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
258
+ # <% end %>
259
+ #
260
+ # <% blocks.after :wizard, :option2 => 4 do
261
+ # Step 4 (:option1 => <%= options[option1] %>, :option2 => <%= options[option2] %>)<br />
262
+ # <% end %>
263
+ #
264
+ # <%= blocks.use :wizard %>
265
+ #
266
+ # <!-- Will render:
267
+ # Step 2 (:option1 => 1, :option2 => 2)<br />
268
+ # Step 3 (:option1 => 3, :option2 => 2)<br />
269
+ # Step 4 (:option1 => 1, :option2 => 4)<br />
270
+ # -->
271
+ #
272
+ # <%= blocks.render :wizard, :step => @step %>
273
+ # Options:
274
+ # [+name+]
275
+ # The name of the block to render this code after when that block is rendered
276
+ # [+options+]
277
+ # Any options to specify to the after block when it renders. These will override any options
278
+ # specified when the block was defined.
279
+ # [+block+]
280
+ # The block of code to render after another block
174
281
  def after(name, options={}, &block)
175
282
  self.queue_block_container("after_#{name.to_s}", options, &block)
176
283
  nil
@@ -210,13 +317,18 @@ module BuildingBlocks
210
317
  self.blocks = {}
211
318
  self.anonymous_block_number = 0
212
319
  self.block_groups = {}
320
+ self.use_partials = options[:use_partials].nil? ? BuildingBlocks::USE_PARTIALS : options.delete(:use_partials)
321
+ self.use_partials_for_before_and_after_hooks =
322
+ options[:use_partials_for_before_and_after_hooks] ? options.delete(:use_partials_for_before_and_after_hooks) : BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS
213
323
  end
214
324
 
325
+ # Return a unique name for an anonymously defined block (i.e. a block that has not been given a name)
215
326
  def anonymous_block_name
216
327
  self.anonymous_block_number += 1
217
328
  "block_#{anonymous_block_number}"
218
329
  end
219
330
 
331
+ # Render a block, first trying to find a previously defined block with the same name
220
332
  def render_block(name_or_container, *args, &block)
221
333
  options = args.extract_options!
222
334
 
@@ -234,7 +346,7 @@ module BuildingBlocks
234
346
  block_container = blocks[name]
235
347
  args.push(global_options.merge(block_container.options).merge(block_options).merge(options))
236
348
  buffer << view.capture(*(args[0, block_container.block.arity]), &block_container.block)
237
- elsif BuildingBlocks::USE_PARTIALS
349
+ elsif use_partials
238
350
  begin
239
351
  begin
240
352
  buffer << view.render("#{name.to_s}", global_options.merge(block_options).merge(options))
@@ -253,14 +365,17 @@ module BuildingBlocks
253
365
  buffer
254
366
  end
255
367
 
368
+ # Render all the before blocks for a partial block
256
369
  def render_before_blocks(name_or_container, *args)
257
370
  render_before_or_after_blocks(name_or_container, "before", *args)
258
371
  end
259
372
 
373
+ # Render all the after blocks for a partial block
260
374
  def render_after_blocks(name_or_container, *args)
261
375
  render_before_or_after_blocks(name_or_container, "after", *args)
262
376
  end
263
377
 
378
+ # Utility method to render either the before or after blocks for a partial block
264
379
  def render_before_or_after_blocks(name_or_container, before_or_after, *args)
265
380
  options = args.extract_options!
266
381
 
@@ -282,7 +397,7 @@ module BuildingBlocks
282
397
  args_clone.push(global_options.merge(block_options).merge(block_container.options).merge(options))
283
398
  buffer << view.capture(*(args_clone[0, block_container.block.arity]), &block_container.block)
284
399
  end
285
- elsif BuildingBlocks::USE_PARTIALS && BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS
400
+ elsif use_partials && use_partials_for_before_and_after_hooks
286
401
  begin
287
402
  begin
288
403
  buffer << view.render("#{before_or_after}_#{name.to_s}", global_options.merge(block_options).merge(options))
@@ -296,6 +411,7 @@ module BuildingBlocks
296
411
  buffer
297
412
  end
298
413
 
414
+ # Build a BuildingBlocks::Container object given the passed in arguments
299
415
  def build_block_container(*args, &block)
300
416
  options = args.extract_options!
301
417
  name = args.first ? args.shift : self.anonymous_block_name
@@ -306,6 +422,8 @@ module BuildingBlocks
306
422
  block_container
307
423
  end
308
424
 
425
+ # Build a BuildingBlocks::Container object and add it to an array of containers matching it's block name
426
+ # (used only for queuing a collection of before and after blocks for a particular block name)
309
427
  def queue_block_container(*args, &block)
310
428
  block_container = self.build_block_container(*args, &block)
311
429
  if blocks[block_container.name].nil?
@@ -315,6 +433,8 @@ module BuildingBlocks
315
433
  end
316
434
  end
317
435
 
436
+ # Build a BuildingBlocks::Container object and add it to the global hash of blocks if a block by the same
437
+ # name is not already defined
318
438
  def define_block_container(*args, &block)
319
439
  block_container = self.build_block_container(*args, &block)
320
440
  blocks[block_container.name] = block_container if blocks[block_container.name].nil? && block_given?
@@ -366,16 +366,25 @@ describe BuildingBlocks::Base do
366
366
  @builder.render :some_block, :value1 => 1, :value2 => 2, &block
367
367
  end
368
368
 
369
- it "should not attempt to render a partial if BuildingBlocks::USE_PARTIALS is set to false" do
370
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
371
- BuildingBlocks.const_set("USE_PARTIALS", false)
369
+ it "should not attempt to render a partial if use_partials is set to false" do
370
+ @builder.use_partials = false
371
+ block = Proc.new {|options|}
372
+ @view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).never
373
+ @view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
374
+ @view.expects(:capture).with(:value1 => 1, :value2 => 2)
375
+ @builder.render :some_block, :value1 => 1, :value2 => 2, &block
376
+ end
377
+
378
+ it "should not attempt to render a partial if use_partials is passed in as false as an option to BuildingBlocks::Base.new" do
379
+ mocha_teardown
380
+ @builder = BuildingBlocks::Base.new(@view, :use_partials => false)
381
+ @builder.expects(:render_before_blocks).at_least_once
382
+ @builder.expects(:render_after_blocks).at_least_once
372
383
  block = Proc.new {|options|}
373
384
  @view.expects(:render).with("some_block", :value1 => 1, :value2 => 2).never
374
385
  @view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
375
386
  @view.expects(:capture).with(:value1 => 1, :value2 => 2)
376
387
  @builder.render :some_block, :value1 => 1, :value2 => 2, &block
377
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
378
- BuildingBlocks.const_set("USE_PARTIALS", true)
379
388
  end
380
389
 
381
390
  it "should override hash options for a block by merging the runtime options the define default options into the queue level options into the global options" do
@@ -410,47 +419,35 @@ describe BuildingBlocks::Base do
410
419
  @builder.render :my_before_block, 1, 2, :value3 => 3, :value4 => 4
411
420
  end
412
421
 
413
- it "should try and render a before block as a local partial if no before blocks are specified and BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to true" do
414
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
415
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
422
+ it "should try and render a before block as a local partial if no before blocks are specified and use_partials_for_before_and_after_hooks is set to true" do
423
+ @builder.use_partials_for_before_and_after_hooks = true
416
424
  block = Proc.new {}
417
425
  @view.expects(:capture).never
418
426
  @view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).once
419
427
  @view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).never
420
428
  @builder.render :my_before_block, :value1 => 1, :value2 => 2
421
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
422
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
423
429
  end
424
430
 
425
- 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 and BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to true" do
426
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
427
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
431
+ 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 and use_partials_for_before_and_after_hooks is set to true" do
432
+ @builder.use_partials_for_before_and_after_hooks = true
428
433
  block = Proc.new {}
429
434
  @view.expects(:capture).never
430
435
  @view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
431
436
  @view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).once
432
437
  @builder.render :my_before_block, :value1 => 1, :value2 => 2
433
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
434
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", false)
435
438
  end
436
439
 
437
- it "should not attempt to render a before block as a partial if BuildingBlocks::USE_PARTIALS is set to false even if BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to true" do
438
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
439
- BuildingBlocks.const_set("USE_PARTIALS", false)
440
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
441
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
440
+ it "should not attempt to render a before block as a partial if use_partials is set to false even if use_partials_for_before_and_after_hooks is set to true" do
441
+ @builder.use_partials = false
442
+ @builder.use_partials_for_before_and_after_hooks = true
442
443
  block = Proc.new {}
443
444
  @view.expects(:capture).never
444
445
  @view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).never
445
446
  @view.expects(:render).with("blocks/before_my_before_block", :value1 => 1, :value2 => 2).never
446
447
  @builder.render :my_before_block, :value1 => 1, :value2 => 2
447
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
448
- BuildingBlocks.const_set("USE_PARTIALS", true)
449
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
450
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", false)
451
448
  end
452
449
 
453
- it "should not attempt to render a before block as a partial if BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to false" do
450
+ it "should not attempt to render a before block as a partial if use_partials_for_before_and_after_hooks is set to false" do
454
451
  block = Proc.new {}
455
452
  @view.expects(:capture).never
456
453
  @view.expects(:render).with("before_my_before_block", :value1 => 1, :value2 => 2).never
@@ -481,47 +478,35 @@ describe BuildingBlocks::Base do
481
478
  @builder.render :my_after_block, 1, 2, :value3 => 3, :value4 => 4
482
479
  end
483
480
 
484
- it "should try and render a after block as a local partial if no after blocks are specified and BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to true" do
485
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
486
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
481
+ it "should try and render a after block as a local partial if no after blocks are specified and use_partials_for_before_and_after_hooks is set to true" do
482
+ @builder.use_partials_for_before_and_after_hooks = true
487
483
  block = Proc.new {}
488
484
  @view.expects(:capture).never
489
485
  @view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).once
490
486
  @view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).never
491
487
  @builder.render :my_after_block, :value1 => 1, :value2 => 2
492
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
493
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", false)
494
488
  end
495
489
 
496
- 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 and BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to true" do
497
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
498
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
490
+ 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 and use_partials_for_before_and_after_hooks is set to true" do
491
+ @builder.use_partials_for_before_and_after_hooks = true
499
492
  block = Proc.new {}
500
493
  @view.expects(:capture).never
501
494
  @view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
502
495
  @view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).once
503
496
  @builder.render :my_after_block, :value1 => 1, :value2 => 2
504
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
505
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", false)
506
497
  end
507
498
 
508
- it "should not attempt to render a after block as a partial if BuildingBlocks::USE_PARTIALS is set to false even if BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to false" do
509
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
510
- BuildingBlocks.const_set("USE_PARTIALS", false)
511
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
512
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", true)
499
+ it "should not attempt to render a after block as a partial if use_partials is set to false even if use_partials_for_before_and_after_hooks is set to false" do
500
+ @builder.use_partials = false
501
+ @builder.use_partials_for_before_and_after_hooks = true
513
502
  block = Proc.new {}
514
503
  @view.expects(:capture).never
515
504
  @view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).never
516
505
  @view.expects(:render).with("blocks/after_my_after_block", :value1 => 1, :value2 => 2).never
517
506
  @builder.render :my_after_block, :value1 => 1, :value2 => 2
518
- BuildingBlocks.send(:remove_const, "USE_PARTIALS")
519
- BuildingBlocks.const_set("USE_PARTIALS", true)
520
- BuildingBlocks.send(:remove_const, "USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS")
521
- BuildingBlocks.const_set("USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS", false)
522
507
  end
523
508
 
524
- it "should not attempt to render a after block as a partial if BuildingBlocks::USE_PARTIALS_FOR_BEFORE_AND_AFTER_HOOKS is set to false" do
509
+ it "should not attempt to render a after block as a partial if use_partials_for_before_and_after_hooks is set to false" do
525
510
  block = Proc.new {}
526
511
  @view.expects(:capture).never
527
512
  @view.expects(:render).with("after_my_after_block", :value1 => 1, :value2 => 2).never
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: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 1
10
- version: 1.2.1
9
+ - 2
10
+ version: 1.2.2
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-07 00:00:00 -05:00
18
+ date: 2012-02-09 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -216,6 +216,20 @@ dependencies:
216
216
  prerelease: false
217
217
  type: :development
218
218
  requirement: *id014
219
+ - !ruby/object:Gem::Dependency
220
+ name: jeweler
221
+ version_requirements: &id015 !ruby/object:Gem::Requirement
222
+ none: false
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ hash: 3
227
+ segments:
228
+ - 0
229
+ version: "0"
230
+ prerelease: false
231
+ type: :development
232
+ requirement: *id015
219
233
  description: ""
220
234
  email: hunterae@gmail.com
221
235
  executables: []