module Ramaze::Helper::Layout::SingletonMethods

Public Instance Methods

set_layout(hash_or_layout) click to toggle source

The #set_layout method allows you to specify a number of methods and their layout. This allows you to use layout A for methods 1, 2 and 3 but layout B for method 4.

@example

# The key is the layout, the value an array of methods
set_layout 'default' => [:method_1], 'alternative' => [:method_2]

# We can combine this method with layout()
layout 'default'
set_layout 'alternative' => [:method_1]

# This is also perfectly fine
set_layout 'default'

@param [String, Symbol, to_hash] hash_or_layout

In case it's a String or Symbol it will directly be used as the
layout.
When setting a Hash this hash should have it's keys set to the
layouts and it's values to an array of methods that use the
specific layout. For more information see the examples.

@author Yorick Peterse @author Michael Fellinger @author Pistos @since 2011-04-07

# File lib/ramaze/helper/layout.rb, line 89
def set_layout(hash_or_layout)
  @_ramaze_layouts    ||= {}
  @_ramaze_old_layout ||= trait[:layout]

  # Extract the layout to use
  if hash_or_layout.respond_to?(:to_hash)
    # Invert the method/layout hash and save them so they don't get lost
    hash_or_layout.to_hash.each do |layout, layout_methods|
      layout_methods.each do |layout_method|
        @_ramaze_layouts[layout_method.to_s] = layout.to_s
      end
    end

    layout do |path, wish|
      path = path.to_s

      if @_ramaze_layouts.key?(path)
        use_layout = @_ramaze_layouts[path.to_s]
      # Use the old layout
      elsif @_ramaze_old_layout.respond_to?(:call)
        use_layout = @_ramaze_old_layout.call(path, wish)
      else
        use_layout = @_ramaze_old_layout
      end

      use_layout
    end
  else
    layout { |path| hash_or_layout }
  end
end
set_layout_except(hash_or_layout) click to toggle source

@deprecated because it's not longer useful

# File lib/ramaze/helper/layout.rb, line 122
def set_layout_except(hash_or_layout)
  Ramaze.deprecated('set_layout_except', 'set_layout')
end