module AbstractController::Layouts::ClassMethods

Public Instance Methods

_implied_layout_name() click to toggle source

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

Returns

  • String - A template name

# File lib/abstract_controller/layouts.rb, line 234
def _implied_layout_name
  controller_path
end
_write_layout_method() click to toggle source

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 lib/abstract_controller/layouts.rb, line 242
      def _write_layout_method
        remove_possible_method(:_layout)

        case defined?(@_layout) ? @_layout : nil
        when String
          self.class_eval %Q{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 %Q{def _layout; _layout_from_proc(self) end}, __FILE__, __LINE__
        when false
          self.class_eval %Q{def _layout; end}, __FILE__, __LINE__
        when true
          raise ArgumentError, "Layouts must be specified as a String, Symbol, false, or nil"
        when nil
          if name
            _prefix = "layouts" unless _implied_layout_name =~ %r\blayouts/

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

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 lib/abstract_controller/layouts.rb, line 219
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