blocks 2.5.1 → 2.6.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/Gemfile +2 -1
- data/README.rdoc +94 -4
- data/VERSION +1 -1
- data/blocks.gemspec +8 -5
- data/lib/blocks.rb +7 -14
- data/lib/blocks/base.rb +24 -30
- data/spec/blocks/base_spec.rb +187 -69
- data/spec/blocks/blocks_spec.rb +4 -16
- data/spec/blocks/view_additions_spec.rb +1 -1
- data/spec/spec_helper.rb +5 -3
- metadata +19 -3
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,9 +1,99 @@
|
|
1
1
|
= Blocks
|
2
2
|
|
3
|
-
I AM CURRENTLY IN THE PROCESS OF WRITING THIS DOCUMENTATION OVER AGAIN SINCE A LOT HAS CHANGED SINCE THE DOCUMENTATION WAS ORIGINALLY WRITTEN.
|
4
|
-
|
5
3
|
How do you render your blocks of code?
|
6
4
|
|
7
|
-
|
5
|
+
With blocks, you can:
|
6
|
+
1. Easily define named blocks of view-level code, capable of taking parameters as arguments
|
7
|
+
2. Render a defined block of view-level code and pass in an arbitrary number of parameters
|
8
|
+
3. Provide a default block of code to render if a named block is not found
|
9
|
+
4. Specify view-level code to render before, after, or around a particular block of code
|
10
|
+
5. Render a collection of elements using a defined block
|
11
|
+
|
12
|
+
== Author's Note
|
13
|
+
To fully appreciate how powerful Blocks can be, i highly recommend checking out the
|
14
|
+
project {TableFor}[https://github.com/hunterae/table-for] first.
|
15
|
+
This is a gem that was built using Blocks and {WithTemplate (an extension of Blocks)}[https://github.com/hunterae/with_template]
|
16
|
+
with very few lines of code, and illustrates the power of Blocks and WithTemplate
|
17
|
+
and how they can be can be used to build extremely useful reusable UI components.
|
18
|
+
|
19
|
+
== Installation
|
20
|
+
|
21
|
+
In <b>Rails 3</b> or <b>Rails 4</b>, add this to your Gemfile.
|
22
|
+
|
23
|
+
gem "blocks"
|
24
|
+
|
25
|
+
== Simple Case
|
26
|
+
<% blocks.define :sample do |a, b| %>
|
27
|
+
This is a snippet of code with parameters <%= a %> and <%= b %> passed in<br>
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
<% blocks.before :sample do %>
|
31
|
+
This is a snippet of code that will render before the block named :sample<br>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<% blocks.after :sample do %>
|
35
|
+
This is a snippet of code that will render after the block named :sample<br>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
<%# This is when the code gets rendered %>
|
39
|
+
<%= blocks.render :sample, "1", 2 %>
|
40
|
+
|
41
|
+
<%# Provide a wrapper element to wrap around the rendered block
|
42
|
+
<%= blocks.render :sample, "1", 2, :wrap_with => {:tag => :div, :id => "sample" } %>
|
43
|
+
|
44
|
+
<%# Rendering a block that doesn't exist will simply render nothing %>
|
45
|
+
<%= blocks.render :sample2 %>
|
46
|
+
|
47
|
+
<%# Rendering a block that doesn't exist with a default definition will simply use the default definition %>
|
48
|
+
<%= blocks.render :sample3 do %>
|
49
|
+
This is a snippet that will get rendered if a block named :sample3 is not defined anywhere
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
== A More Complicated Case
|
53
|
+
In this example, @brands will represent a collection of brands fetched from the database
|
54
|
+
<% blocks.define :brand do |brand| %>
|
55
|
+
Brand <%= brand.name %>
|
56
|
+
<% end %>
|
57
|
+
|
58
|
+
<%= blocks.render :brand,
|
59
|
+
:collection => @brands,
|
60
|
+
:wrap_with => { :tag => :ul, :id => "brands", :style => "list-style-type:circle" },
|
61
|
+
:wrap_each => { :tag => :li,
|
62
|
+
:id => Proc.new {|brand| "brand#{brand.id}"},
|
63
|
+
:class => Proc.new { cycle("even", "odd") },
|
64
|
+
:style => "padding-left: 20px;" }%>
|
65
|
+
|
66
|
+
== A Practical example
|
67
|
+
Surround your javascript includes and css includes in your
|
68
|
+
template with a named block, and from the view, the included order can easily be changed.
|
69
|
+
Note: I use this approach in every single project I setup.
|
70
|
+
|
71
|
+
In layout, such as application.html.erb:
|
72
|
+
<!DOCTYPE html>
|
73
|
+
<head>
|
74
|
+
...
|
75
|
+
<%= blocks.render :stylesheets do %>
|
76
|
+
<%= stylesheet_link_tag "application", :media => "all" %>
|
77
|
+
<% end %>
|
78
|
+
</head>
|
79
|
+
<body>
|
80
|
+
...
|
81
|
+
<%= blocks.render :javascripts do %>
|
82
|
+
<%= javascript_include_tag "application" %>
|
83
|
+
<% end %>
|
84
|
+
</body>
|
85
|
+
</html>
|
8
86
|
|
9
|
-
|
87
|
+
In a view, stylesheets and javascript files can easily be prepended, appended, or replace the existing set of
|
88
|
+
includes:
|
89
|
+
<% blocks.before :stylesheets do %>
|
90
|
+
<%= stylesheet_link_tag "SOME_STYLESHEET_TO_INCLUDE_FIRST", :media => "all" %>
|
91
|
+
<% end %>
|
92
|
+
<% blocks.after :stylesheets do %>
|
93
|
+
<%= stylesheet_link_tag "SOME_STYLESHEET_TO_INCLUDE_LAST", :media => "all" %>
|
94
|
+
<% end %>
|
95
|
+
|
96
|
+
<%# Flat out replaces the javascript includes %>
|
97
|
+
<% blocks.define :javascripts do %>
|
98
|
+
<%= stylesheet_link_tag "MY_JAVASCRIPT_FILES_TO_INCLUDE", :media => "all" %>
|
99
|
+
<% end %>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.0
|
data/blocks.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "blocks"
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.6.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrew Hunter"]
|
12
|
-
s.date = "2013-
|
12
|
+
s.date = "2013-11-04"
|
13
13
|
s.description = "Blocks goes beyond blocks and partials"
|
14
14
|
s.email = "hunterae@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,20 +49,23 @@ Gem::Specification.new do |s|
|
|
49
49
|
|
50
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
51
|
s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
|
52
|
-
s.add_runtime_dependency(%q<call_with_params>, ["
|
52
|
+
s.add_runtime_dependency(%q<call_with_params>, ["~> 0.0.2"])
|
53
|
+
s.add_runtime_dependency(%q<hashie>, [">= 0"])
|
53
54
|
s.add_development_dependency(%q<bundler>, ["~> 1.3.5"])
|
54
55
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
55
56
|
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
56
57
|
else
|
57
58
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
58
|
-
s.add_dependency(%q<call_with_params>, ["
|
59
|
+
s.add_dependency(%q<call_with_params>, ["~> 0.0.2"])
|
60
|
+
s.add_dependency(%q<hashie>, [">= 0"])
|
59
61
|
s.add_dependency(%q<bundler>, ["~> 1.3.5"])
|
60
62
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
61
63
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
62
64
|
end
|
63
65
|
else
|
64
66
|
s.add_dependency(%q<rails>, [">= 3.0.0"])
|
65
|
-
s.add_dependency(%q<call_with_params>, ["
|
67
|
+
s.add_dependency(%q<call_with_params>, ["~> 0.0.2"])
|
68
|
+
s.add_dependency(%q<hashie>, [">= 0"])
|
66
69
|
s.add_dependency(%q<bundler>, ["~> 1.3.5"])
|
67
70
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
68
71
|
s.add_dependency(%q<simplecov>, [">= 0"])
|
data/lib/blocks.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "action_view"
|
2
2
|
require "action_controller"
|
3
3
|
require "call_with_params"
|
4
|
+
require "hashie"
|
4
5
|
|
5
6
|
module Blocks
|
6
7
|
autoload :Base, "blocks/base"
|
@@ -8,23 +9,15 @@ module Blocks
|
|
8
9
|
autoload :ViewAdditions, "blocks/view_additions"
|
9
10
|
autoload :ControllerAdditions, "blocks/controller_additions"
|
10
11
|
|
11
|
-
mattr_accessor :
|
12
|
-
@@
|
13
|
-
|
14
|
-
|
15
|
-
@@
|
16
|
-
|
17
|
-
mattr_accessor :wrap_before_and_after_blocks
|
18
|
-
@@wrap_before_and_after_blocks = false
|
19
|
-
|
20
|
-
# Shortcut for using the templating feature / rendering templates
|
21
|
-
def self.render_template(view, partial, options={}, &block)
|
22
|
-
Blocks::Base.new(view, options).render_template(partial, &block)
|
23
|
-
end
|
12
|
+
mattr_accessor :config
|
13
|
+
@@config = Hashie::Mash.new
|
14
|
+
@@config.wrap_before_and_after_blocks = false
|
15
|
+
@@config.use_partials = false
|
16
|
+
@@config.partials_folder = "blocks"
|
24
17
|
|
25
18
|
# Default way to setup Blocks
|
26
19
|
def self.setup
|
27
|
-
yield
|
20
|
+
yield config
|
28
21
|
end
|
29
22
|
end
|
30
23
|
|
data/lib/blocks/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
1
3
|
module Blocks
|
2
4
|
class Base
|
3
5
|
include CallWithParams
|
@@ -14,18 +16,6 @@ module Blocks
|
|
14
16
|
# These are the options that are passed into the initalize method
|
15
17
|
attr_accessor :global_options
|
16
18
|
|
17
|
-
# The default folder to look in for global partials
|
18
|
-
attr_accessor :template_folder
|
19
|
-
|
20
|
-
# The variable to use when rendering the partial for the templating feature (by default, "blocks")
|
21
|
-
attr_accessor :variable
|
22
|
-
|
23
|
-
# Boolean variable for whether Blocks should attempt to render blocks as partials if a defined block cannot be found
|
24
|
-
attr_accessor :use_partials
|
25
|
-
|
26
|
-
# Boolean variable for whether Blocks should render before and after blocks inside or outside of a collections' elements' wrap_with tags
|
27
|
-
attr_accessor :wrap_before_and_after_blocks
|
28
|
-
|
29
19
|
# Checks if a particular block has been defined within the current block scope.
|
30
20
|
# <%= blocks.defined? :some_block_name %>
|
31
21
|
# Options:
|
@@ -42,10 +32,12 @@ module Blocks
|
|
42
32
|
#
|
43
33
|
# Options:
|
44
34
|
# [+name+]
|
45
|
-
# The name of the block being defined (either a string or a symbol)
|
35
|
+
# The name of the block being defined (either a string or a symbol or a Proc)
|
46
36
|
# [+options+]
|
47
37
|
# The default options for the block definition. Any or all of these options may be overrideen by
|
48
|
-
# whomever calls "blocks.render" on this block.
|
38
|
+
# whomever calls "blocks.render" on this block. If :collection => some_array,
|
39
|
+
# Blocks will assume that the first argument is a Proc and define a block for each object in the
|
40
|
+
# collection
|
49
41
|
# [+block+]
|
50
42
|
# The block that is to be rendered when "blocks.render" is called for this block.
|
51
43
|
def define(name, options={}, &block)
|
@@ -184,7 +176,7 @@ module Blocks
|
|
184
176
|
else
|
185
177
|
args.push(options)
|
186
178
|
|
187
|
-
if wrap_before_and_after_blocks
|
179
|
+
if global_options.merge(options)[:wrap_before_and_after_blocks]
|
188
180
|
buffer << content_tag_with_block(wrap_with[:tag], wrap_with.except(:tag), *args) do
|
189
181
|
temp_buffer = ActiveSupport::SafeBuffer.new
|
190
182
|
temp_buffer << render_before_blocks(name_or_container, *args)
|
@@ -415,14 +407,10 @@ module Blocks
|
|
415
407
|
protected
|
416
408
|
|
417
409
|
def initialize(view, options={})
|
418
|
-
self.template_folder = options[:template_folder] ? options.delete(:template_folder) : Blocks.template_folder
|
419
|
-
self.variable = (options[:variable] ? options.delete(:variable) : :blocks).to_sym
|
420
410
|
self.view = view
|
421
|
-
self.global_options = options
|
411
|
+
self.global_options = Blocks.config.merge(options)
|
422
412
|
self.blocks = {}
|
423
413
|
self.anonymous_block_number = 0
|
424
|
-
self.use_partials = options[:use_partials].nil? ? Blocks.use_partials : options.delete(:use_partials)
|
425
|
-
self.wrap_before_and_after_blocks = options[:wrap_before_and_after_blocks].nil? ? Blocks.wrap_before_and_after_blocks : options.delete(:wrap_before_and_after_blocks)
|
426
414
|
end
|
427
415
|
|
428
416
|
# Return a unique name for an anonymously defined block (i.e. a block that has not been given a name)
|
@@ -450,28 +438,34 @@ module Blocks
|
|
450
438
|
|
451
439
|
# Render a block, first trying to find a previously defined block with the same name
|
452
440
|
def render_block(name_or_container, *args, &block)
|
453
|
-
options = args.extract_options!
|
454
|
-
|
455
441
|
buffer = ActiveSupport::SafeBuffer.new
|
456
442
|
|
457
|
-
block_options = {}
|
458
443
|
if (name_or_container.is_a?(Blocks::Container))
|
459
444
|
name = name_or_container.name.to_sym
|
460
|
-
|
445
|
+
block_render_options = name_or_container.options
|
461
446
|
else
|
462
447
|
name = name_or_container.to_sym
|
448
|
+
block_render_options = {}
|
449
|
+
end
|
450
|
+
|
451
|
+
block_definition_options = {}
|
452
|
+
if blocks[name]
|
453
|
+
block_container = blocks[name]
|
454
|
+
block_definition_options = block_container.options
|
463
455
|
end
|
464
456
|
|
457
|
+
options = global_options.merge(block_definition_options).merge(block_render_options).merge(args.extract_options!)
|
458
|
+
|
465
459
|
if blocks[name]
|
466
460
|
block_container = blocks[name]
|
467
|
-
args.push(
|
461
|
+
args.push(options)
|
468
462
|
buffer << view.capture(*(args[0, block_container.block.arity]), &block_container.block)
|
469
|
-
elsif
|
463
|
+
elsif options[:use_partials] && !options[:skip_partials]
|
470
464
|
begin
|
471
465
|
begin
|
472
|
-
buffer << view.render("#{name.to_s}",
|
466
|
+
buffer << view.render("#{name.to_s}", options)
|
473
467
|
rescue ActionView::MissingTemplate
|
474
|
-
buffer << view.render("#{
|
468
|
+
buffer << view.render("#{options[:partials_folder]}/#{name.to_s}", options)
|
475
469
|
end
|
476
470
|
rescue ActionView::MissingTemplate
|
477
471
|
args.push(global_options.merge(options))
|
@@ -561,9 +555,9 @@ module Blocks
|
|
561
555
|
|
562
556
|
def content_tag_with_block(tag, tag_html, *args, &block)
|
563
557
|
if tag
|
564
|
-
view.content_tag(tag, block
|
558
|
+
view.content_tag(tag, view.capture(&block), call_each_hash_value_with_params(tag_html, *args))
|
565
559
|
else
|
566
|
-
block
|
560
|
+
view.capture(&block)
|
567
561
|
end
|
568
562
|
end
|
569
563
|
end
|
data/spec/blocks/base_spec.rb
CHANGED
@@ -7,18 +7,20 @@ describe Blocks::Base do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
it "should be able change the default global partials directory" do
|
10
|
-
Blocks.
|
11
|
-
|
10
|
+
Blocks.setup do |config|
|
11
|
+
config.partials_folder = "shared"
|
12
|
+
config.use_partials = true
|
13
|
+
end
|
12
14
|
@builder = Blocks::Base.new(@view)
|
13
15
|
@builder.expects(:render_before_blocks).at_least_once
|
14
16
|
@builder.expects(:render_after_blocks).at_least_once
|
15
|
-
@view.expects(:capture).with(:value1 => 1, :value2 => 2).never
|
16
|
-
@view.expects(:render).with("some_block",
|
17
|
-
@view.expects(:render).with("shared/some_block",
|
17
|
+
# @view.expects(:capture).with(:value1 => 1, :value2 => 2).never
|
18
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'shared', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
19
|
+
@view.expects(:render).with("shared/some_block", 'partials_folder' => 'shared', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).once
|
18
20
|
@builder.render :some_block, :value1 => 1, :value2 => 2
|
19
21
|
end
|
20
22
|
|
21
|
-
describe "defined?
|
23
|
+
describe "#defined?" do
|
22
24
|
it "should be able to determine if a block by a specific name is already defined" do
|
23
25
|
@builder.defined?(:test_block).should be_false
|
24
26
|
@builder.define :test_block do end
|
@@ -42,7 +44,7 @@ describe Blocks::Base do
|
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
|
-
describe "define
|
47
|
+
describe "#define" do
|
46
48
|
it "should be able to define a new block" do
|
47
49
|
block = Proc.new { |options| }
|
48
50
|
|
@@ -54,7 +56,7 @@ describe Blocks::Base do
|
|
54
56
|
test_block.name.should eql(:test_block)
|
55
57
|
test_block.block.should eql(block)
|
56
58
|
end
|
57
|
-
|
59
|
+
|
58
60
|
it "should not replace a defined block with another attempted definition" do
|
59
61
|
block1 = Proc.new do |options| end
|
60
62
|
@builder.define :test_block, :option1 => "value1", :option2 => "value2", &block1
|
@@ -70,9 +72,21 @@ describe Blocks::Base do
|
|
70
72
|
test_block.name.should eql(:test_block)
|
71
73
|
test_block.block.should eql(block1)
|
72
74
|
end
|
75
|
+
|
76
|
+
it "should be able to define a collection of blocks" do
|
77
|
+
block = Proc.new {}
|
78
|
+
collection = ["block1", "block2", "block3"]
|
79
|
+
@builder.define Proc.new {|block_name| block_name }, :collection => collection, &block
|
80
|
+
@builder.blocks[:block1].should be_present
|
81
|
+
@builder.blocks[:block1].block.should eql block
|
82
|
+
@builder.blocks[:block2].should be_present
|
83
|
+
@builder.blocks[:block2].block.should eql block
|
84
|
+
@builder.blocks[:block3].should be_present
|
85
|
+
@builder.blocks[:block3].block.should eql block
|
86
|
+
end
|
73
87
|
end
|
74
88
|
|
75
|
-
describe "replace
|
89
|
+
describe "#replace" do
|
76
90
|
it "should be able to replace a defined block" do
|
77
91
|
block1 = Proc.new do |options| end
|
78
92
|
@builder.define :test_block, :option1 => "value1", :option2 => "value2", &block1
|
@@ -90,14 +104,22 @@ describe Blocks::Base do
|
|
90
104
|
end
|
91
105
|
end
|
92
106
|
|
93
|
-
describe "
|
107
|
+
describe "#skip" do
|
108
|
+
it "should define an empty block" do
|
109
|
+
@builder.skip(:test_block)
|
110
|
+
@builder.blocks[:test_block].should be_present
|
111
|
+
@builder.blocks[:test_block].block.call.should be_nil
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "#before" do
|
94
116
|
it "should be aliased with prepend" do
|
95
117
|
block = Proc.new { |options| }
|
96
118
|
@builder.prepend :some_block, &block
|
97
119
|
@builder.blocks[:before_some_block].should be_present
|
98
120
|
end
|
99
121
|
|
100
|
-
it "should
|
122
|
+
it "should define before blocks as the block name with the word 'before_' prepended to it" do
|
101
123
|
block = Proc.new { |options| }
|
102
124
|
@builder.before :some_block, &block
|
103
125
|
@builder.blocks[:before_some_block].should be_present
|
@@ -143,7 +165,7 @@ describe Blocks::Base do
|
|
143
165
|
end
|
144
166
|
end
|
145
167
|
|
146
|
-
describe "after
|
168
|
+
describe "#after" do
|
147
169
|
it "should be aliased with append and for" do
|
148
170
|
block = Proc.new { |options| }
|
149
171
|
@builder.append :some_block, &block
|
@@ -154,7 +176,7 @@ describe Blocks::Base do
|
|
154
176
|
@builder.blocks[:after_some_block].should be_present
|
155
177
|
end
|
156
178
|
|
157
|
-
it "should
|
179
|
+
it "should define after blocks as the block name with the word 'after_' prepended to it" do
|
158
180
|
block = Proc.new { |options| }
|
159
181
|
@builder.after :some_block, &block
|
160
182
|
@builder.blocks[:after_some_block].should be_present
|
@@ -200,42 +222,103 @@ describe Blocks::Base do
|
|
200
222
|
end
|
201
223
|
end
|
202
224
|
|
203
|
-
describe "
|
225
|
+
describe "#around" do
|
226
|
+
it "should define around blocks as the block name with the word 'around_' prepended to it" do
|
227
|
+
block = Proc.new { |options| }
|
228
|
+
@builder.around :some_block, &block
|
229
|
+
@builder.blocks[:around_some_block].should be_present
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should store a around block in an array" do
|
233
|
+
block = Proc.new { |options| }
|
234
|
+
@builder.around :some_block, &block
|
235
|
+
around_blocks = @builder.blocks[:around_some_block]
|
236
|
+
around_blocks.should be_a(Array)
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should store a around block as a Blocks::Container" do
|
240
|
+
block = Proc.new { |options| }
|
241
|
+
@builder.around :some_block, :option1 => "some option", &block
|
242
|
+
around_blocks = @builder.blocks[:around_some_block]
|
243
|
+
block_container = around_blocks.first
|
244
|
+
block_container.should be_a(Blocks::Container)
|
245
|
+
block_container.options.should eql :option1 => "some option"
|
246
|
+
block_container.block.should eql block
|
247
|
+
end
|
248
|
+
|
249
|
+
it "should queue around blocks if there are multiple defined" do
|
250
|
+
block = Proc.new { |options| }
|
251
|
+
block2 = Proc.new { |options| }
|
252
|
+
@builder.around :some_block, &block
|
253
|
+
@builder.around :some_block, &block2
|
254
|
+
around_blocks = @builder.blocks[:around_some_block]
|
255
|
+
around_blocks.length.should eql 2
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should store after blocks in the order in which they are defined" do
|
259
|
+
block = Proc.new { |options| }
|
260
|
+
block2 = Proc.new { |options| }
|
261
|
+
block3 = Proc.new { |options| }
|
262
|
+
@builder.around :some_block, &block
|
263
|
+
@builder.around :some_block, &block2
|
264
|
+
@builder.around :some_block, &block3
|
265
|
+
around_blocks = @builder.blocks[:around_some_block]
|
266
|
+
around_blocks.first.block.should eql block
|
267
|
+
around_blocks.second.block.should eql block2
|
268
|
+
around_blocks.third.block.should eql block3
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
describe "#render_with_partials" do
|
273
|
+
it "should trigger the call to #render with :use_partials set to true" do
|
274
|
+
@builder.expects(:render).with(:some_block, :use_partials => true)
|
275
|
+
@builder.render_with_partials(:some_block)
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
describe "#render_without_partials" do
|
280
|
+
it "should trigger the call to #render with :skip_partials set to true" do
|
281
|
+
@builder.expects(:render).with(:some_block, :skip_partials => true)
|
282
|
+
@builder.render_without_partials(:some_block)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
describe "#render" do
|
204
287
|
it "should alias the render method as use" do
|
205
288
|
block = Proc.new {"output"}
|
206
289
|
@builder.define :some_block, &block
|
207
290
|
@builder.use(:some_block).should eql "output"
|
208
291
|
end
|
209
292
|
|
210
|
-
it "should be able to
|
293
|
+
it "should be able to render a defined block by its name" do
|
211
294
|
block = Proc.new {"output"}
|
212
295
|
@builder.define :some_block, &block
|
213
296
|
@builder.render(:some_block).should eql "output"
|
214
297
|
end
|
215
298
|
|
216
|
-
it "should automatically pass in an options hash to a defined block that takes one paramter when that block is
|
217
|
-
block = Proc.new {|options|
|
299
|
+
it "should automatically pass in an options hash to a defined block that takes one paramter when that block is rendered" do
|
300
|
+
block = Proc.new {|options| print_hash(options) }
|
218
301
|
@builder.define :some_block, &block
|
219
|
-
@builder.render(:some_block).should eql
|
302
|
+
@builder.render(:some_block).should eql print_hash(:wrap_before_and_after_blocks => false, :use_partials => false, :partials_folder => "blocks", )
|
220
303
|
end
|
221
304
|
|
222
|
-
it "should be able to
|
305
|
+
it "should be able to render a defined block by its name and pass in runtime arguments as a hash" do
|
223
306
|
block = Proc.new do |options|
|
224
307
|
print_hash(options)
|
225
308
|
end
|
226
309
|
@builder.define :some_block, &block
|
227
|
-
@builder.render(:some_block, :param1 => 1, :param2 => "value2").should eql print_hash(:param1 => 1, :param2 => "value2")
|
310
|
+
@builder.render(:some_block, :param1 => 1, :param2 => "value2").should eql print_hash(:wrap_before_and_after_blocks => false, :use_partials => false, :partials_folder => "blocks", :param1 => 1, :param2 => "value2")
|
228
311
|
end
|
229
312
|
|
230
|
-
it "should be able to
|
313
|
+
it "should be able to render a defined block by its name and pass in runtime arguments one by one" do
|
231
314
|
block = Proc.new do |first_param, second_param, options|
|
232
315
|
"first_param: #{first_param}, second_param: #{second_param}, #{print_hash options}"
|
233
316
|
end
|
234
317
|
@builder.define :some_block, &block
|
235
|
-
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:param1 => 1, :param2 => "value2")}")
|
318
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:wrap_before_and_after_blocks => false, :use_partials => false, :partials_folder => "blocks", :param1 => 1, :param2 => "value2")}")
|
236
319
|
end
|
237
320
|
|
238
|
-
it "should match up the number of arguments to a defined block with the parameters passed when a block is
|
321
|
+
it "should match up the number of arguments to a defined block with the parameters passed when a block is rendered" do
|
239
322
|
block = Proc.new {|first_param| "first_param = #{first_param}"}
|
240
323
|
@builder.define :some_block, &block
|
241
324
|
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql "first_param = 3"
|
@@ -248,57 +331,68 @@ describe Blocks::Base do
|
|
248
331
|
"first_param: #{first_param}, second_param: #{second_param}, #{print_hash options}"
|
249
332
|
end
|
250
333
|
@builder.replace :some_block, &block
|
251
|
-
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:param1 => 1, :param2 => "value2")}")
|
334
|
+
@builder.render(:some_block, 3, 4, :param1 => 1, :param2 => "value2").should eql("first_param: 3, second_param: 4, #{print_hash(:wrap_before_and_after_blocks => false, :use_partials => false, :partials_folder => "blocks", :param1 => 1, :param2 => "value2")}")
|
252
335
|
end
|
253
336
|
|
254
337
|
it "should not render anything if using a block that has been defined" do
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
@
|
338
|
+
Blocks.setup do |config|
|
339
|
+
config.use_partials = true
|
340
|
+
end
|
341
|
+
@builder = Blocks::Base.new(@view)
|
342
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
343
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
259
344
|
@builder.render :some_block
|
260
345
|
end
|
261
346
|
|
262
347
|
it "should first attempt to capture a block's contents when blocks.render is called" do
|
263
348
|
block = Proc.new {|options|}
|
264
|
-
@view.expects(:
|
265
|
-
@view.expects(:render).with("some_block",
|
266
|
-
@view.expects(:render).with("blocks/some_block", :value1 => 1, :value2 => 2).never
|
349
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).never
|
350
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).never
|
267
351
|
@builder.define :some_block, &block
|
268
352
|
@builder.render :some_block, :value1 => 1, :value2 => 2
|
269
353
|
end
|
270
354
|
|
271
355
|
it "should second attempt to render a local partial by the block's name when blocks.render is called" do
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
@
|
356
|
+
Blocks.setup do |config|
|
357
|
+
config.use_partials = true
|
358
|
+
end
|
359
|
+
@builder = Blocks::Base.new(@view)
|
360
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).once
|
361
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).never
|
276
362
|
@builder.render :some_block, :value1 => 1, :value2 => 2
|
277
363
|
end
|
278
364
|
|
279
365
|
it "should third attempt to render a global partial by the block's name when blocks.render is called" do
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
@
|
366
|
+
Blocks.setup do |config|
|
367
|
+
config.use_partials = true
|
368
|
+
end
|
369
|
+
@builder = Blocks::Base.new(@view)
|
370
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
371
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).once
|
284
372
|
@builder.render :some_block, :value1 => 1, :value2 => 2
|
285
373
|
end
|
286
374
|
|
287
375
|
it "should fourth attempt to render a default block when blocks.render is called" do
|
288
|
-
block = Proc.new
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
376
|
+
block = Proc.new do |options|
|
377
|
+
options[:value1].should eql 1
|
378
|
+
options[:value2].should eql 2
|
379
|
+
end
|
380
|
+
Blocks.setup do |config|
|
381
|
+
config.use_partials = true
|
382
|
+
end
|
383
|
+
@builder = Blocks::Base.new(@view)
|
384
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
385
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => true, 'value1' => 1, 'value2' => 2).raises(ActionView::MissingTemplate.new([],[],[],[],[]))
|
293
386
|
@builder.render :some_block, :value1 => 1, :value2 => 2, &block
|
294
387
|
end
|
295
388
|
|
296
389
|
it "should not attempt to render a partial if use_partials is set to false" do
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
@view.expects(:
|
390
|
+
block = Proc.new do |options|
|
391
|
+
options[:value1].should eql 1
|
392
|
+
options[:value2].should eql 2
|
393
|
+
end
|
394
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => false, 'value1' => 1, 'value2' => 2).never
|
395
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => false, 'value1' => 1, 'value2' => 2).never
|
302
396
|
@builder.render :some_block, :value1 => 1, :value2 => 2, &block
|
303
397
|
end
|
304
398
|
|
@@ -307,19 +401,25 @@ describe Blocks::Base do
|
|
307
401
|
@builder = Blocks::Base.new(@view, :use_partials => false)
|
308
402
|
@builder.expects(:render_before_blocks).at_least_once
|
309
403
|
@builder.expects(:render_after_blocks).at_least_once
|
310
|
-
block = Proc.new
|
311
|
-
|
312
|
-
|
313
|
-
|
404
|
+
block = Proc.new do |options|
|
405
|
+
options[:value1].should eql 1
|
406
|
+
options[:value2].should eql 2
|
407
|
+
end
|
408
|
+
@view.expects(:render).with("some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => false, 'value1' => 1, 'value2' => 2).never
|
409
|
+
@view.expects(:render).with("blocks/some_block", 'partials_folder' => 'blocks', 'wrap_before_and_after_blocks' => false, 'use_partials' => false, 'value1' => 1, 'value2' => 2).never
|
314
410
|
@builder.render :some_block, :value1 => 1, :value2 => 2, &block
|
315
411
|
end
|
316
412
|
|
317
413
|
it "should override hash options for a block by merging the runtime options into the define default options into the queue level options into the global options" do
|
318
|
-
block = Proc.new
|
414
|
+
block = Proc.new do |options|
|
415
|
+
options[:param1].should eql "use level"
|
416
|
+
options[:param2].should eql "queue level"
|
417
|
+
options[:param3].should eql "define level"
|
418
|
+
options[:param4].should eql "global level"
|
419
|
+
end
|
319
420
|
@builder.global_options.merge!(:param1 => "global level", :param2 => "global level", :param3 => "global level", :param4 => "global level")
|
320
421
|
block_container = @builder.send(:define_block_container, :my_before_block, :param1 => "queue level", :param2 => "queue level")
|
321
422
|
@builder.define(:my_before_block, :param1 => "define level", :param2 => "define level", :param3 => "define level", &block)
|
322
|
-
@view.expects(:capture).with(:param1 => 'use level', :param2 => 'queue level', :param3 => 'define level', :param4 => 'global level')
|
323
423
|
@builder.render block_container, :param1 => "use level"
|
324
424
|
end
|
325
425
|
|
@@ -394,7 +494,7 @@ describe Blocks::Base do
|
|
394
494
|
@builder.render(:some_block, :collection => [1,2,3]).should eql "before1 output1 after1 before2 output2 after2 before3 output3 after3 "
|
395
495
|
end
|
396
496
|
|
397
|
-
it "should by default
|
497
|
+
it "should by default render surrounding elements outside before and after blocks" do
|
398
498
|
before_block = Proc.new {|item, options| "before#{options[:some_block]} "}
|
399
499
|
@builder.before :some_block, &before_block
|
400
500
|
|
@@ -403,11 +503,13 @@ describe Blocks::Base do
|
|
403
503
|
|
404
504
|
block = Proc.new {|item, options| "output#{options[:some_block]} "}
|
405
505
|
@builder.define :some_block, &block
|
406
|
-
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}).should eql "<div>
|
506
|
+
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}).should eql "before1 <div>output1 </div>after1 before2 <div>output2 </div>after2 before3 <div>output3 </div>after3 "
|
407
507
|
end
|
408
508
|
|
409
|
-
it "should allow the global option to be set to render before and after blocks
|
410
|
-
Blocks.
|
509
|
+
it "should allow the global option to be set to render before and after blocks inside of surrounding elements" do
|
510
|
+
Blocks.setup do |config|
|
511
|
+
config.wrap_before_and_after_blocks = true
|
512
|
+
end
|
411
513
|
@builder = Blocks::Base.new(@view)
|
412
514
|
before_block = Proc.new {|item, options| "before#{options[:some_block]} "}
|
413
515
|
@builder.before :some_block, &before_block
|
@@ -417,7 +519,7 @@ describe Blocks::Base do
|
|
417
519
|
|
418
520
|
block = Proc.new {|item, options| "output#{options[:some_block]} "}
|
419
521
|
@builder.define :some_block, &block
|
420
|
-
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}).should eql "
|
522
|
+
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}).should eql "<div>before1 output1 after1 </div><div>before2 output2 after2 </div><div>before3 output3 after3 </div>"
|
421
523
|
end
|
422
524
|
|
423
525
|
it "should allow the option to be set to render before and after blocks outside of surrounding elements to be specified when Blocks is initialized" do
|
@@ -442,7 +544,7 @@ describe Blocks::Base do
|
|
442
544
|
|
443
545
|
block = Proc.new {|item, options| "output#{options[:some_block]} "}
|
444
546
|
@builder.define :some_block, &block
|
445
|
-
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}, :wrap_with => {:tag => "div", :style => "color:red"}).should eql "<div style=\"color:red\"
|
547
|
+
@builder.render(:some_block, :collection => [1,2,3], :wrap_each => {:tag => "div"}, :wrap_with => {:tag => "div", :style => "color:red"}).should eql "<div style=\"color:red\">before1 <div>output1 </div>after1 before2 <div>output2 </div>after2 before3 <div>output3 </div>after3 </div>"
|
446
548
|
end
|
447
549
|
end
|
448
550
|
end
|
@@ -454,18 +556,26 @@ describe Blocks::Base do
|
|
454
556
|
end
|
455
557
|
|
456
558
|
it "should render before blocks when using a block" do
|
457
|
-
block = Proc.new
|
559
|
+
block = Proc.new do |value1, value2, options|
|
560
|
+
value1.should eql 1
|
561
|
+
value2.should eql 2
|
562
|
+
options[:value3].should eql 3
|
563
|
+
options[:value4].should eql 4
|
564
|
+
end
|
458
565
|
@builder.before("my_before_block", &block)
|
459
|
-
@view.expects(:capture).with(1, 2, :value3 => 3, :value4 => 4)
|
460
566
|
@builder.render :my_before_block, 1, 2, :value3 => 3, :value4 => 4
|
461
567
|
end
|
462
568
|
|
463
569
|
it "should override hash options for before blocks by merging the runtime options into the before block options into the block options into the global options" do
|
464
|
-
block = Proc.new
|
570
|
+
block = Proc.new do |options|
|
571
|
+
options[:param1].should eql "top level"
|
572
|
+
options[:param2].should eql "before block level"
|
573
|
+
options[:param3].should eql "block level"
|
574
|
+
options[:param4].should eql "global level"
|
575
|
+
end
|
465
576
|
@builder.global_options.merge!(:param1 => "global level", :param2 => "global level", :param3 => "global level", :param4 => "global level")
|
466
577
|
@builder.define(:my_before_block, :param1 => "block level", :param2 => "block level", :param3 => "block level", &block)
|
467
578
|
@builder.before(:my_before_block, :param1 => "before block level", :param2 => "before block level", &block)
|
468
|
-
@view.expects(:capture).with(:param4 => 'global level', :param1 => 'top level', :param2 => 'before block level', :param3 => 'block level')
|
469
579
|
@builder.render :my_before_block, :param1 => "top level"
|
470
580
|
end
|
471
581
|
end
|
@@ -499,18 +609,26 @@ describe Blocks::Base do
|
|
499
609
|
end
|
500
610
|
|
501
611
|
it "should render after blocks when using a block" do
|
502
|
-
block = Proc.new
|
612
|
+
block = Proc.new do |value1, value2, options|
|
613
|
+
value1.should eql 1
|
614
|
+
value2.should eql 2
|
615
|
+
options[:value3].should eql 3
|
616
|
+
options[:value4].should eql 4
|
617
|
+
end
|
503
618
|
@builder.after("my_after_block", &block)
|
504
|
-
@view.expects(:capture).with(1, 2, :value3 => 3, :value4 => 4)
|
505
619
|
@builder.render :my_after_block, 1, 2, :value3 => 3, :value4 => 4
|
506
620
|
end
|
507
621
|
|
508
622
|
it "should override hash options for after blocks by merging the runtime options into the after block options into the block options into the global options" do
|
509
|
-
block = Proc.new
|
623
|
+
block = Proc.new do |options|
|
624
|
+
options[:param1].should eql "top level"
|
625
|
+
options[:param2].should eql "after block level"
|
626
|
+
options[:param3].should eql "block level"
|
627
|
+
options[:param4].should eql "global level"
|
628
|
+
end
|
510
629
|
@builder.global_options.merge!(:param1 => "global level", :param2 => "global level", :param3 => "global level", :param4 => "global level")
|
511
630
|
@builder.define(:my_after_block, :param1 => "block level", :param2 => "block level", :param3 => "block level", &block)
|
512
631
|
@builder.after(:my_after_block, :param1 => "after block level", :param2 => "after block level", &block)
|
513
|
-
@view.expects(:capture).with(:param4 => 'global level', :param1 => 'top level', :param2 => 'after block level', :param3 => 'block level')
|
514
632
|
@builder.render :my_after_block, :param1 => "top level"
|
515
633
|
end
|
516
634
|
end
|
data/spec/blocks/blocks_spec.rb
CHANGED
@@ -1,24 +1,12 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Blocks do
|
4
|
-
it "should provide a util method to render a template" do
|
5
|
-
view = stub
|
6
|
-
options = stub
|
7
|
-
partial = stub
|
8
|
-
block = Proc.new { |options| }
|
9
|
-
base_mock = mock
|
10
|
-
base_mock.expects(:render_template).with(partial)
|
11
|
-
Blocks::Base.expects(:new).with(view, options).returns(base_mock)
|
12
|
-
|
13
|
-
Blocks.render_template(view, partial, options, &block)
|
14
|
-
end
|
15
|
-
|
16
4
|
it "should provide a setup method that can be called from an initializer" do
|
17
|
-
Blocks.
|
5
|
+
Blocks.config.partials_folder.should eql("blocks")
|
18
6
|
Blocks.setup do |config|
|
19
|
-
config.should
|
20
|
-
config.
|
7
|
+
config.should be_a(Hashie::Mash)
|
8
|
+
config.partials_folder = "shared"
|
21
9
|
end
|
22
|
-
Blocks.
|
10
|
+
Blocks.config.partials_folder.should eql("shared")
|
23
11
|
end
|
24
12
|
end
|
@@ -7,7 +7,7 @@ describe Blocks::ViewAdditions do
|
|
7
7
|
@view_class.send(:include, Blocks::ViewAdditions::ClassMethods)
|
8
8
|
end
|
9
9
|
|
10
|
-
describe "blocks
|
10
|
+
describe "#blocks" do
|
11
11
|
it "should pass the view as the only parameter to Blocks::Base initialization" do
|
12
12
|
Blocks::Base.expects(:new).with {|view| view == @view}
|
13
13
|
@view.blocks
|
data/spec/spec_helper.rb
CHANGED
@@ -12,9 +12,11 @@ RSpec.configure do |config|
|
|
12
12
|
config.mock_with :mocha
|
13
13
|
|
14
14
|
config.before :each do
|
15
|
-
Blocks.
|
16
|
-
|
17
|
-
|
15
|
+
Blocks.setup do |config|
|
16
|
+
config.partials_folder = "blocks"
|
17
|
+
config.wrap_before_and_after_blocks = false
|
18
|
+
config.use_partials = false
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-11-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -29,6 +29,22 @@ dependencies:
|
|
29
29
|
version: 3.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: call_with_params
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.0.2
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.0.2
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: hashie
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
33
49
|
none: false
|
34
50
|
requirements:
|
@@ -134,7 +150,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
150
|
version: '0'
|
135
151
|
segments:
|
136
152
|
- 0
|
137
|
-
hash: -
|
153
|
+
hash: -4078634663971351405
|
138
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
155
|
none: false
|
140
156
|
requirements:
|