Class: Hanami::View::Rendering::LayoutScope
- Inherits:
- BasicObject
- Defined in:
- lib/hanami/view/rendering/layout_scope.rb
Overview
Scope for layout rendering
Direct Known Subclasses
Instance Method Summary collapse
-
#class ⇒ Object
Returns the classname as string.
-
#format ⇒ Symbol
Returns the requested format.
-
#initialize(layout, scope) ⇒ LayoutScope
constructor
private
Initialize the scope.
-
#inspect ⇒ String
Returns an inspect String.
-
#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
28 29 30 31 32 33 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 28 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.
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 228 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
#class ⇒ Object
Returns the classname as string
40 41 42 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 40 def class (class << self; self end).superclass end |
#format ⇒ Symbol
Returns the requested format.
110 111 112 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 110 def format @scope.format end |
#inspect ⇒ String
Returns an inspect String
49 50 51 52 53 54 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 49 def inspect base = "#<#{ self.class }:#{'%x' % (self.object_id << 1)}" base << " @layout=\"#{@layout.inspect}\"" if @layout base << " @scope=\"#{@scope.inspect}\"" if @scope base << ">" 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.
176 177 178 179 180 181 182 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 176 def local(key) if respond_to?(key) __send__(key) else locals.fetch(key) { NullLocal.new(key) } end end |
#locals ⇒ Hash
The current locals.
128 129 130 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 128 def locals (@locals || @scope.locals).dup end |
#render(options) ⇒ String
Render a partial or a template within a layout template.
101 102 103 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 101 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
192 193 194 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 192 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
204 205 206 207 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 204 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.
119 120 121 |
# File 'lib/hanami/view/rendering/layout_scope.rb', line 119 def view @view || @scope.view end |