Module: AbstractController::Layouts::ClassMethods
- Defined in:
- actionpack/lib/abstract_controller/layouts.rb
Defined Under Namespace
Modules: LayoutConditions
Instance Method Summary collapse
-
#_implied_layout_name ⇒ Object
If no layout is supplied, look for a template named the return value of this method.
-
#_write_layout_method ⇒ Object
Creates a _layout method to be called by _default_layout .
- #inherited(klass) ⇒ Object
-
#layout(layout, conditions = {}) ⇒ Object
Specify the layout to use for this class.
Instance Method Details
#_implied_layout_name ⇒ Object
If no layout is supplied, look for a template named the return value of this method.
Returns
-
String
- A template name
236 237 238 |
# File 'actionpack/lib/abstract_controller/layouts.rb', line 236 def _implied_layout_name controller_path end |
#_write_layout_method ⇒ Object
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.
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 |
# 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 <<-ruby_eval, __FILE__, __LINE__ + 1 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 ruby_eval 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 <<-RUBY, __FILE__, __LINE__ + 1 def _layout if template_exists?("#{_implied_layout_name}", #{_prefixes.inspect}) "#{_implied_layout_name}" else super end end RUBY end end self.class_eval { private :_layout } end |
#inherited(klass) ⇒ Object
177 178 179 180 |
# File 'actionpack/lib/abstract_controller/layouts.rb', line 177 def inherited(klass) super klass._write_layout_method end |
#layout(layout, conditions = {}) ⇒ Object
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.
221 222 223 224 225 226 227 228 229 |
# 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 |