This method is deprecated or moved on the latest stable version.
The last existing version (v4.0.2) is shown here.
_write_layout_method()
public
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 284
def _write_layout_method # :nodoc:
remove_possible_method(:_layout)
prefixes = _implied_layout_name =~ /\blayouts/ ? [] : ["layouts"]
default_behavior = "lookup_context.find_all('#{_implied_layout_name}', #{prefixes.inspect}).first || super"
name_clause = if name
default_behavior
else
super
end
layout_definition = case _layout
when String
_layout.inspect
when Symbol
#{_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
when Proc
define_method :_layout_from_proc, &_layout
protected :_layout_from_proc
result = _layout_from_proc(#{_layout.arity == 0 ? '' : 'self'}) return #{default_behavior} if result.nil? result
when false
nil
when true
raise ArgumentError, "Layouts must be specified as a String, Symbol, Proc, false, or nil"
when nil
name_clause
end
self.class_eval def _layout if _conditional_layout? #{layout_definition} else #{name_clause} end end private :_layout, __FILE__, __LINE__ + 1
end