module Hanami::Extensions::Action::InstanceMethods

Instance methods for app-integrated actions.

@since 2.0.0

Attributes

rack_monitor[R]

Returns the app or slice’s ‘Dry::Monitor::Rack::Middleware` for use within action instance methods.

@return [Dry::Monitor::Rack::Middleware]

@api public @since 2.0.0

routes[R]

Returns the app or slice’s {Hanami::Slice::RoutesHelper RoutesHelper} for use within action instance methods.

@return [Hanami::Slice::RoutesHelper]

@api public @since 2.0.0

view[R]

@api private

view_context_class[R]

@api private

Public Class Methods

new(view: nil, view_context_class: nil, rack_monitor: nil, routes: nil, **kwargs) click to toggle source

@overload def initialize(routes: nil, **kwargs)

Returns a new `Hanami::Action` with app components injected as dependencies.

These dependencies are injected automatically so that a call to `.new` (with no
arguments) returns a fully integrated action.

@param routes [Hanami::Slice::RoutesHelper]

@api public
@since 2.0.0
Calls superclass method
# File lib/hanami/extensions/action.rb, line 73
def initialize(view: nil, view_context_class: nil, rack_monitor: nil, routes: nil, **kwargs)
  @view = view
  @view_context_class = view_context_class
  @routes = routes
  @rack_monitor = rack_monitor

  super(**kwargs)
end

Private Instance Methods

_handle_exception(request, _response, _exception) click to toggle source

@api private

Calls superclass method
# File lib/hanami/extensions/action.rb, line 97
def _handle_exception(request, _response, _exception)
  super
rescue StandardError => exception
  rack_monitor&.instrument(:error, exception: exception, env: request.env)

  raise
end
auto_render?(res) click to toggle source

Returns true if a view should automatically be rendered onto the response body.

This may be overridden to enable or disable automatic rendering.

@param res [Hanami::Action::Response]

@return [Boolean]

@since 2.0.0 @api public

# File lib/hanami/extensions/action.rb, line 125
def auto_render?(res)
  view && res.body.empty?
end
build_response(**options) click to toggle source

@api private

Calls superclass method
# File lib/hanami/extensions/action.rb, line 85
def build_response(**options)
  options = options.merge(view_options: method(:view_options))
  super(**options)
end
finish(req, res, halted) click to toggle source

@api private

Calls superclass method
# File lib/hanami/extensions/action.rb, line 91
def finish(req, res, halted)
  res.render(view, **req.params) if !halted && auto_render?(res)
  super
end
view_context_options(request, response) click to toggle source

@api private

# File lib/hanami/extensions/action.rb, line 111
def view_context_options(request, response) # rubocop:disable Lint:UnusedMethodArgument
  {request: request}
end
view_options(request, response) click to toggle source

@api private

# File lib/hanami/extensions/action.rb, line 106
def view_options(request, response)
  {context: view_context_class&.new(**view_context_options(request, response))}.compact
end