Module: ActionView::Layouts::ClassMethods
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Defined in: | actionview/lib/action_view/layouts.rb |
Instance Method Summary
-
#layout(layout, conditions = {})
Specify the layout to use for this class.
-
#_implied_layout_name
private
If no layout is supplied, look for a template named the return value of this method.
-
#_write_layout_method
Internal use only
Creates a _layout method to be called by _default_layout .
- #inherited(klass) Internal use only
Instance Method Details
#_implied_layout_name (private)
If no layout is supplied, look for a template named the return value of this method.
Returns
-
::String
- A template name
# File 'actionview/lib/action_view/layouts.rb', line 345
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 'actionview/lib/action_view/layouts.rb', line 283
def _write_layout_method # :nodoc: silence_redefinition_of_method(:_layout) prefixes = /\blayouts/.match?(_implied_layout_name) ? [] : ["layouts"] default_behavior = "lookup_context.find_all('#{_implied_layout_name}', #{prefixes.inspect}, false, [], { formats: formats }).first || super" name_clause = if name default_behavior else <<-RUBY super RUBY end layout_definition = \ case _layout when String _layout.inspect when Symbol <<-RUBY #{_layout}.tap do |layout| return #{default_behavior} if layout.nil? 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 RUBY when Proc define_method :_layout_from_proc, &_layout private :_layout_from_proc <<-RUBY result = _layout_from_proc(#{_layout.arity == 0 ? '' : 'self'}) return #{default_behavior} if result.nil? result RUBY when false nil when true raise ArgumentError, "Layouts must be specified as a String, Symbol, Proc, false, or nil" when nil name_clause end class_eval <<-RUBY, __FILE__, __LINE__ + 1 # frozen_string_literal: true def _layout(lookup_context, formats) if _conditional_layout? #{layout_definition} else #{name_clause} end end private :_layout RUBY end
#inherited(klass)
# File 'actionview/lib/action_view/layouts.rb', line 218
def inherited(klass) # :nodoc: 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
- Proc
-
call the passed Proc
- false
-
There is no layout
- true
-
raise an ArgumentError
- nil
-
Force default layout behavior with inheritance
Return value of Proc
and ::Symbol
arguments should be ::String
, false
, true
, or nil
with the same meaning as described above.
Parameters
-
layout
- 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 'actionview/lib/action_view/layouts.rb', line 269
def layout(layout, conditions = {}) include LayoutConditions unless conditions.empty? conditions.each { |k, v| conditions[k] = Array(v).map(&:to_s) } self._layout_conditions = conditions self._layout = layout _write_layout_method end