Module: Padrino::Helpers::OutputHelpers

Defined in:
lib/padrino-helpers/output_helpers.rb,
lib/padrino-helpers/output_helpers/erb_handler.rb,
lib/padrino-helpers/output_helpers/haml_handler.rb,
lib/padrino-helpers/output_helpers/slim_handler.rb,
lib/padrino-helpers/output_helpers/abstract_handler.rb

Overview

Helpers related to buffer output for various template engines.

Defined Under Namespace

Modules: SinatraCurrentEngine Classes: AbstractHandler, ErbHandler, HamlHandler, HamlitHandler, SlimHandler

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.handlersObject

Returns the list of all available template handlers.



14
15
16
# File 'lib/padrino-helpers/output_helpers.rb', line 14

def self.handlers
  @_template_handlers ||= {}
end

.included(base) ⇒ Object



7
8
9
# File 'lib/padrino-helpers/output_helpers.rb', line 7

def self.included(base)
  base.send(:include, SinatraCurrentEngine) unless base.method_defined?(:current_engine)
end

.register(engine, handler) ⇒ Object

Registers a new handler as available to the output helpers.



21
22
23
# File 'lib/padrino-helpers/output_helpers.rb', line 21

def self.register(engine, handler)
  handlers[engine] = handler
end

Instance Method Details

#block_is_template?(block) ⇒ Boolean

Returns true if the block is from a supported template type; false otherwise. Used to determine if html should be returned or concatenated to the view.

Examples:

block_is_template?(block) => true

Parameters:

  • block (Block)

    Determine if this block is a view template.

Returns:

  • (Boolean)

    True if the block is a template; false otherwise.



116
117
118
119
# File 'lib/padrino-helpers/output_helpers.rb', line 116

def block_is_template?(block)
  handler = find_proper_handler
  block && handler && handler.engine_matches?(block)
end

#capture_html(*args, &block) ⇒ String Also known as: capture

Captures the html from a block of template code for any available handler.

Be aware that trusting the html is up to the caller.

Examples:

capture_html(&block) => "...html..."
capture_html(object_for_block, &block) => "...html..."
SafeBuffer.new + capture_html { "<foo>" }
# => "&lt;foo&gt;"
SafeBuffer.new.safe_concat(capture_html { "<foo>" })
# => "<foo>"

Parameters:

  • *args (Object)

    Objects yield to the captured block.

  • &block (Proc)

    Template code to capture as HTML.

Returns:

  • (String)

    Captured HTML resulting from the block.



61
62
63
64
65
66
67
# File 'lib/padrino-helpers/output_helpers.rb', line 61

def capture_html(*args, &block)
  if handler = find_proper_handler
    handler.capture_from_template(*args, &block)
  else
    yield(*args)
  end
end

#concat_content(text = "") ⇒ Object Also known as: concat

Outputs the given text to the templates buffer directly.

The output might be subject to escaping, if it is not marked as safe.

Examples:

concat_content("This will be output to the template buffer")

Parameters:

  • text (String, SafeBuffer) (defaults to: "")

    Text to concatenate to the buffer.



81
82
83
84
85
86
87
# File 'lib/padrino-helpers/output_helpers.rb', line 81

def concat_content(text="")
  if handler = find_proper_handler
    handler.concat_to_template(text, binding)
  else
    text
  end
end

#concat_safe_content(text = "") ⇒ Object

Outputs the given text to the templates buffer directly, assuming that it is safe.

Examples:

concat_safe_content("This will be output to the template buffer")

Parameters:

  • text (String) (defaults to: "")

    Text to concatenate to the buffer.



100
101
102
# File 'lib/padrino-helpers/output_helpers.rb', line 100

def concat_safe_content(text="")
  concat_content text.html_safe
end

#content_blocksObject (protected)

Retrieves content_blocks stored by content_for or within yield_content.

Examples:

content_blocks[:name] => ['...', '...']


194
195
196
# File 'lib/padrino-helpers/output_helpers.rb', line 194

def content_blocks
  @content_blocks ||= Hash.new { |h,k| h[k] = [] }
end

#content_for(key, content) ⇒ Object #content_for(key, &block) ⇒ Object

Capture a block or text of content to be rendered at a later time. Your blocks can also receive values, which are passed to them by yield_content.

Examples:

content_for(:name) { ...content... }
content_for(:name) { |name| ...content... }
content_for(:name, "I'm Jeff")
content_for(:name, :flush => true) { ...new content... }

Overloads:

  • #content_for(key, content) ⇒ Object

    Parameters:

    • key (Symbol)

      Name of your key for the content yield.

    • content (String)

      Text to be stored for this key.

    • options (Hash)

      Options associated with this method.

  • #content_for(key, &block) ⇒ Object

    Parameters:

    • key (Symbol)

      Name of your key for the content yield.

    • block (Proc)

      Block to be stored as content for this key.

    • options (Hash)

      Options associated with this method.

Parameters:

  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :flush (Boolean)

    Specifies whether to replace the content.



143
144
145
146
147
# File 'lib/padrino-helpers/output_helpers.rb', line 143

def content_for(key, content = nil, options = {}, &block)
  options = content if content.is_a?(Hash)
  content_blocks[key.to_sym].clear if options[:flush]
  content_blocks[key.to_sym] << (block_given? ? block : Proc.new { content })
end

#content_for?(key) ⇒ TrueClass, FalseClass

Is there a content block for a given key?

Examples:

content_for? :header => true

Parameters:

  • key (Symbol)

    Name of content to yield.

Returns:

  • (TrueClass, FalseClass)

    Result html for the given key



160
161
162
# File 'lib/padrino-helpers/output_helpers.rb', line 160

def content_for?(key)
  !content_blocks[key.to_sym].empty?
end

#find_proper_handlerObject (protected)

Retrieves the template handler for the given output context. Can handle any output related to capturing or concatenating in a given template.

Examples:

find_proper_handler => <OutputHelpers::HamlHandler>


205
206
207
208
# File 'lib/padrino-helpers/output_helpers.rb', line 205

def find_proper_handler
  handler_class = OutputHelpers.handlers[current_engine]
  handler_class && handler_class.new(self)
end

#mark_safe(value) ⇒ SafeBuffer+ (protected)

Marks a String or a collection of Strings as safe. ‘nil` is accepted but ignored.

Parameters:

Returns:



217
218
219
220
221
222
223
# File 'lib/padrino-helpers/output_helpers.rb', line 217

def mark_safe(value)
  if value.respond_to? :map!
    value.map!{|v| v.html_safe if v }
  else
    value.html_safe if value
  end
end

#yield_content(key, *args) ⇒ String

Render the captured content blocks for a given key. You can also pass values to the content blocks by passing them as arguments after the key.

Examples:

yield_content :include
yield_content :head, "param1", "param2"
yield_content(:title) || "My page title"

Parameters:

  • key (Symbol)

    Name of content to yield.

  • *args

    Values to pass to the content block.

Returns:

  • (String)

    Result HTML for the given key.



181
182
183
184
185
# File 'lib/padrino-helpers/output_helpers.rb', line 181

def yield_content(key, *args)
  blocks = content_blocks[key.to_sym]
  return nil if blocks.empty?
  blocks.inject(SafeBuffer.new){ |all,content| all << capture_html(*args, &content) }
end