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, keys, { 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, keys) 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 ::Stringis 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