Sha256: a4ad43bdb467067246b5aaca36eef2d500f549d15c06c7b18058c35fc753ae45

Contents?: true

Size: 1.12 KB

Versions: 2

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module TheHelp
  # 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
  module ServiceCaller
    # 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]
    def call_service(service, **args, &block)
      service_args = {
        context: service_context,
        logger: service_logger
      }.merge(args)
      service.call(**service_args, &block)
      self
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
the_help-1.3.0 lib/the_help/service_caller.rb
the_help-1.2.2 lib/the_help/service_caller.rb