Module: Webby::Helpers::CaptureHelper
- Defined in:
- lib/webby/helpers/capture_helper.rb
Overview
Based on code from Rails and Merb.
Instance Method Summary collapse
-
#_erb_buffer(the_binding) ⇒ Object
Provides direct acccess to the ERB buffer in the conext of the binding.
-
#capture_erb(*args, &block) ⇒ Object
This method is used to capture content from an ERB filter evaluation.
-
#concat_erb(string, the_binding) ⇒ Object
This method is used to concatenate content into the ERB output buffer.
-
#content_for(obj, string = nil, &block) ⇒ Object
Called in pages and partials to store up content for later use.
-
#content_for?(obj) ⇒ Boolean
Returns true if there is content for the given key.
-
#delete_content_for(obj) ⇒ Object
Deletes any content associated with the given object in the content_for hash.
Instance Method Details
#_erb_buffer(the_binding) ⇒ Object
Provides direct acccess to the ERB buffer in the conext of the binding.
Parameters
- the_binding<Binding>
-
The binding to pass to the buffer.
Returns
The current ERB output buffer.
131 132 133 |
# File 'lib/webby/helpers/capture_helper.rb', line 131 def _erb_buffer( the_binding ) eval("_erbout", the_binding, __FILE__, __LINE__) end |
#capture_erb(*args, &block) ⇒ Object
This method is used to capture content from an ERB filter evaluation. It is useful to helpers that need to process chunks of data during ERB filter processing.
Parameters
- *args
-
Arguments to pass to the block.
- &block
-
The ERB block to call.
Returns
- String
-
The output of the block.
Examples
Capture being used in an ERB page:
<% @foo = capture_erb do %>
<p>Some Foo content!</p>
<% end %>
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/webby/helpers/capture_helper.rb', line 89 def capture_erb( *args, &block ) # get the buffer from the block's binding buffer = _erb_buffer(block.binding) rescue nil # If there is no buffer, just call the block and get the contents if buffer.nil? block.call(*args) # If there is a buffer, execute the block, then extract its contents else pos = buffer.length block.call(*args) # extract the block data = buffer[pos..-1] # replace it in the original with empty string buffer[pos..-1] = "" data end end |
#concat_erb(string, the_binding) ⇒ Object
This method is used to concatenate content into the ERB output buffer. It is usefule to helpers that need to insert transformed text back into the ERB output buffer.
Parameters
- string<String>
-
The string to insert into the ERB output.
- the_binding<Binding>
-
The binding to pass to the buffer.
119 120 121 |
# File 'lib/webby/helpers/capture_helper.rb', line 119 def concat_erb( string, the_binding ) _erb_buffer(the_binding) << string end |
#content_for(obj, string = nil, &block) ⇒ Object
Called in pages and partials to store up content for later use. Takes a string and/or a block. First, the string is evaluated, and then the block is captured using the capture() helper provided by the template languages. The two are concatenated together.
Content is retrieved by calling the method without a string or a block.
Parameters
- obj<Object>
-
The key in the conetnt_for hash.
- string<String>
-
Textual content. Defaults to nil.
- &block
-
A block to be evaluated and concatenated to string.
Returns
Any content associated with the key (or nil).
Example
content_for(:foo, "Foo")
content_for(:foo) #=> "Foo"
content_for(:foo, "Bar")
content_for(:foo) #=> "FooBar"
29 30 31 32 33 34 35 |
# File 'lib/webby/helpers/capture_helper.rb', line 29 def content_for( obj, string = nil, &block ) return @_content_for[obj] unless string || block_given? cur = @_content_for[obj].to_s new = string.to_s + (block_given? ? capture_erb(&block) : "") @_content_for[obj] = cur + new end |
#content_for?(obj) ⇒ Boolean
Returns true if there is content for the given key. Otherwise returns false.
Parameters
- obj<Object>
-
The key in the conetnt_for hash.
Example
content_for(:foo, "Foo")
content_for?(:foo) #=> true
content_for?(:bar) #=> false
48 49 50 |
# File 'lib/webby/helpers/capture_helper.rb', line 48 def content_for?( obj ) @_content_for.key?(obj) end |
#delete_content_for(obj) ⇒ Object
Deletes any content associated with the given object in the content_for hash.
Parameters
- obj<Object>
-
The key in the conetnt_for hash.
Returns
Any content associated with the key (or nil).
Example
content_for(:foo, "Foo")
content_for?(:foo) #=> true
delete_content_for(:foo)
content_for?(:foo) #=> false
67 68 69 |
# File 'lib/webby/helpers/capture_helper.rb', line 67 def delete_content_for( obj ) @_content_for.delete(obj) end |