Module: AbstractController::Layouts::ClassMethods
- Defined in:
- 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
Takes the specified layout and 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
234 235 236 |
# File 'lib/abstract_controller/layouts.rb', line 234 def _implied_layout_name controller_path end |
#_write_layout_method ⇒ Object
Takes the specified layout and creates a _layout method to be called by _default_layout
If there is no explicit layout specified: If a layout is found in the view paths with the controller’s name, return that string. Otherwise, use the superclass’ layout (which might also be implied)
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 285 |
# File 'lib/abstract_controller/layouts.rb', line 245 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 _prefix = "layouts" unless _implied_layout_name =~ /\blayouts/ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def _layout if template_exists?("#{_implied_layout_name}", #{_prefix.inspect}) "#{_implied_layout_name}" else super end end RUBY end end self.class_eval { private :_layout } end |
#inherited(klass) ⇒ Object
175 176 177 178 |
# File 'lib/abstract_controller/layouts.rb', line 175 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.
219 220 221 222 223 224 225 226 227 |
# 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 |