Class: Hanami::View::Rendering::LayoutScope
- Inherits:
- Utils::BasicObject
- Defined in:
- lib/hanami/view/rendering/layout_scope.rb
Overview
Scope for layout rendering
Direct Known Subclasses
Instance Method Summary collapse
-
#format ⇒ Symbol
Returns the requested format.
-
#initialize(layout, scope) ⇒ LayoutScope
constructor
private
Initialize the scope.
-
#local(key) ⇒ Object, Hanami::View::Rendering::NullLocal
It tries to invoke a method for the view or a local for the given key.
-
#locals ⇒ Hash
The current locals.
-
#render(options) ⇒ String
Render a partial or a template within a layout template.
-
#respond_to?(m, include_all = false) ⇒ TrueClass, FalseClass
private
Implements “respond to” logic.
-
#respond_to_missing?(m, include_all) ⇒ TrueClass, FalseClass
private
Implements “respond to” logic.
-
#view ⇒ Hanami::View
The current view.
Constructor Details
#initialize(layout, scope) ⇒ LayoutScope
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initialize the scope
29 30 31 32 33 34 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 29 def initialize(layout, scope) @layout = layout @scope = scope @view = nil @locals = nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(m, *args, &blk) ⇒ Object (protected)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Forward all the missing methods to the view scope or to the layout.
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 208 def method_missing(m, *args, &blk) # FIXME: this isn't compatible with Hanami 2.0, as it extends a view # that we want to be frozen in the future # # See https://github.com/hanami/view/issues/130#issuecomment-319326236 if @scope.respond_to?(m, true) && @scope.locals.has_key?(m) && layout.respond_to?(m, true) layout.__send__(m, *args, &blk) elsif @scope.respond_to?(m, true) @scope.__send__(m, *args, &blk) elsif layout.respond_to?(m, true) layout.__send__(m, *args, &blk) else ::Hanami::View::Escape.html(super) end end |
Instance Method Details
#format ⇒ Symbol
Returns the requested format.
90 91 92 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 90 def format @scope.format end |
#local(key) ⇒ Object, Hanami::View::Rendering::NullLocal
It tries to invoke a method for the view or a local for the given key. If the lookup fails, it returns a null object.
156 157 158 159 160 161 162 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 156 def local(key) if respond_to?(key) __send__(key) else locals.fetch(key) { NullLocal.new(key) } end end |
#locals ⇒ Hash
The current locals.
108 109 110 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 108 def locals (@locals || @scope.locals).dup end |
#render(options) ⇒ String
Render a partial or a template within a layout template.
81 82 83 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 81 def render() renderer().render end |
#respond_to?(m, include_all = false) ⇒ TrueClass, FalseClass
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Implements “respond to” logic
172 173 174 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 172 def respond_to?(m, include_all = false) respond_to_missing?(m, include_all) end |
#respond_to_missing?(m, include_all) ⇒ TrueClass, FalseClass
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Implements “respond to” logic
184 185 186 187 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 184 def respond_to_missing?(m, include_all) @layout.respond_to?(m, include_all) || @scope.respond_to?(m, include_all) end |
#view ⇒ Hanami::View
The current view.
99 100 101 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 99 def view @view || @scope.view end |