Methods
#
I
L
Included Modules
Classes and Modules
Instance Public methods
_implied_layout_name()

If no layout is supplied, look for a template named the return value of this method.

Returns

  • String - A template name

# File actionpack/lib/abstract_controller/layouts.rb, line 236
def _implied_layout_name
  controller_path
end
_write_layout_method()

Creates a _layout method to be called by _default_layout .

If a layout is not explicitly mentioned then look for a layout with the controller’s name. if nothing is found then try same procedure to find super class’s layout.

# File actionpack/lib/abstract_controller/layouts.rb, line 244
def _write_layout_method
  remove_possible_method(:_layout)

  case defined?(@_layout) ? @_layout : nil
  when String
    self.class_eval %{def _layout; #{@_layout.inspect} end}, __FILE__, __LINE__
  when Symbol
    self.class_eval             def _layout              #{@_layout}.tap do |layout|                unless layout.is_a?(String) || !layout                  raise ArgumentError, "Your layout method :#{@_layout} returned \#{layout}. It " \                    "should have returned a String, false, or nil"                end              end            end, __FILE__, __LINE__ + 1
  when Proc
    define_method :_layout_from_proc, &@_layout
    self.class_eval %{def _layout; _layout_from_proc(self) end}, __FILE__, __LINE__
  when false
    self.class_eval %{def _layout; end}, __FILE__, __LINE__
  when true
    raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
  when nil
    if name
      _prefixes = _implied_layout_name =~ /\blayouts/ ? [] : ["layouts"]

      self.class_eval               def _layout                if template_exists?("#{_implied_layout_name}", #{_prefixes.inspect})                  "#{_implied_layout_name}"                else                  super                end              end, __FILE__, __LINE__ + 1
    end
  end
  self.class_eval { private :_layout }
end
inherited(klass)
# File actionpack/lib/abstract_controller/layouts.rb, line 177
def inherited(klass)
  super
  klass._write_layout_method
end
layout(layout, conditions = {})

Specify the layout to use for this class.

If the specified layout is a:

String

the String is the template name

Symbol

call the method specified by the symbol, which will return

the template name

false

There is no layout

true

raise an ArgumentError

Parameters

  • String, Symbol, false - The layout to use.

Options (conditions)

  • :only - A list of actions to apply this layout to.

  • :except - Apply this layout to all actions but this one.

# File actionpack/lib/abstract_controller/layouts.rb, line 221
def layout(layout, conditions = {})
  include LayoutConditions unless conditions.empty?

  conditions.each {|k, v| conditions[k] = Array(v).map {|a| a.to_s} }
  self._layout_conditions = conditions

  @_layout = layout || false # Converts nil to false
  _write_layout_method
end