Module: TheHelp::ServiceCaller

Included in:
Service
Defined in:
lib/the_help/service_caller.rb

Overview

Provides convenience method for calling services

The including module/class MUST provide the #service_context and #service_logger methods, which will be provided as the called-service’s ‘context` and `logger` arguments, respectively.

Examples:

class Foo
  include TheHelp::ServiceCaller

  def do_something
    call_service(MyService, some: 'arguments')
  end

  private

  def service_context
    # something that provides the context
  end

  def service_logger
    # an instance of a `Logger`
  end
end

Instance Method Summary collapse

Instance Method Details

#call_service(service, **args, &block) ⇒ self

Calls the specified service

Parameters:

  • service (Class<TheHelp::Service>)
  • args (Hash<Symbol, Object>)

    Any additional keyword arguments are passed directly to the service.

Returns:

  • (self)


35
36
37
38
39
40
41
42
43
44
45
# File 'lib/the_help/service_caller.rb', line 35

def call_service(service, **args, &block)
  service_args = {
    context: service_context,
    logger: service_logger
  }.merge(args)
  service_logger.debug("#{self.class.name}/#{__id__} called service " \
                       "#{service.name}")
  return service.call(**service_args, &block) if block_given?

  service.call(**service_args).value!
end