class Dry::View::Context

Provides a baseline environment across all the templates, parts and scopes in a given rendering.

@abstract Subclass this and add your own methods (along with a custom

`#initialize` if you wish to inject dependencies)

@api public

Attributes

_options[R]
_render_env[R]

Public Class Methods

new(render_env: nil, **options) click to toggle source

Returns a new instance of Context

In subclasses, you should include an `**options` parameter and pass _all arguments_ to `super`. This allows Context to make copies of itself while preserving your dependencies.

@example

class MyContext < Dry::View::Context
  # Injected dependency
  attr_reader :assets

  def initialize(assets:, **options)
    @assets = assets
    super
  end
end

@api public

# File lib/dry/view/context.rb, line 39
def initialize(render_env: nil, **options)
  @_render_env = render_env
  @_options = options
end

Public Instance Methods

for_render_env(render_env) click to toggle source

@api private

# File lib/dry/view/context.rb, line 45
def for_render_env(render_env)
  return self if render_env == _render_env

  self.class.new(**_options.merge(render_env: render_env))
end
with(**new_options) click to toggle source

Returns a copy of the Context with new options merged in.

This may be useful to supply values for dependencies that are optional when initializing your custom Context subclass.

@example

class MyContext < Dry::View::Context
  # Injected dependencies (request is optional)
  attr_reader :assets, :request

  def initialize(assets:, request: nil, **options)
    @assets = assets
    @request = reuqest
    super
  end
end

my_context = MyContext.new(assets: assets)
my_context_with_request = my_context.with(request: request)

@api public

# File lib/dry/view/context.rb, line 72
def with(**new_options)
  self.class.new(
    render_env: _render_env,
    **_options.merge(new_options)
  )
end