module TheHelp::ServiceCaller
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.
@example
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
Public Instance Methods
call_service(service, **args, &block)
click to toggle source
Calls the specified service
@param service [Class<TheHelp::Service>] @param args [Hash<Symbol, Object>] Any additional keyword arguments are
passed directly to the service.
@return [self]
# 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