class Dry::View::ScopeBuilder
Builds scope objects via matching classes
@api private
Constants
- DEFAULT_SCOPE_CLASS
Evaluation context for templates (including layouts and partials) and provides a place to encapsulate view-specific behaviour alongside a template and its locals.
@abstract Subclass this and provide your own methods adding view-specific
behavior. You should not override `#initialize`
@see dry-rb.org/gems/dry-view/templates/ @see dry-rb.org/gems/dry-view/scopes/
@api public
Attributes
namespace[R]
The view's configured `scope_namespace`
@api private
render_env[R]
@return [RenderEnvironment]
@api private
Public Class Methods
new(namespace: nil, render_env: nil)
click to toggle source
Returns a new instance of ScopeBuilder
@api private
# File lib/dry/view/scope_builder.rb, line 29 def initialize(namespace: nil, render_env: nil) @namespace = namespace @render_env = render_env end
Public Instance Methods
call(name = nil, locals)
click to toggle source
Returns a new scope using a class matching the name
@param name [Symbol, Class] scope name @param locals [Hash<Symbol, Object>] locals hash
@return [Dry::View::Scope]
@api private
# File lib/dry/view/scope_builder.rb, line 49 def call(name = nil, locals) # rubocop:disable Style/OptionalArguments scope_class(name).new( name: name, locals: locals, render_env: render_env ) end
for_render_env(render_env)
click to toggle source
@api private
# File lib/dry/view/scope_builder.rb, line 35 def for_render_env(render_env) return self if render_env == self.render_env self.class.new(namespace: namespace, render_env: render_env) end
Private Instance Methods
inflector()
click to toggle source
# File lib/dry/view/scope_builder.rb, line 93 def inflector render_env.inflector end
resolve_scope_class(name:)
click to toggle source
# File lib/dry/view/scope_builder.rb, line 73 def resolve_scope_class(name:) name = inflector.camelize(name.to_s) # Give autoloaders a chance to act begin klass = namespace.const_get(name) rescue NameError # rubocop:disable Lint/HandleExceptions end if !klass && namespace.const_defined?(name, false) klass = namespace.const_get(name) end if klass && klass < Scope klass else DEFAULT_SCOPE_CLASS end end
scope_class(name = nil)
click to toggle source
# File lib/dry/view/scope_builder.rb, line 61 def scope_class(name = nil) if name.nil? DEFAULT_SCOPE_CLASS elsif name.is_a?(Class) name else fetch_or_store(namespace, name) do resolve_scope_class(name: name) end end end