class FunctionalLightService::Organizer::WithReducerLogDecorator

Attributes

decorated[R]
logged[R]
logged?[R]
logger[R]
organizer[R]

Public Class Methods

new(organizer, decorated: WithReducer.new, logger:) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 8
def initialize(organizer, decorated: WithReducer.new, logger:)
  @decorated = decorated
  @organizer = organizer
  @logger = logger
  @logged = false
end

Public Instance Methods

around_each(handler) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 27
def around_each(handler)
  decorated.around_each(handler)
  self
end
reduce(*actions) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 32
def reduce(*actions)
  decorated.reduce(*actions) do |context, action|
    next context if logged?

    if has_failure?(context)
      write_failure_log(context, action)
      next context
    end

    if skip_remaining?(context)
      write_skip_remaining_log(context, action)
      next context
    end

    write_log(action, context)
  end
end
with(data = {}) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 15
def with(data = {})
  logger.info { "[FunctionalLightService] - calling organizer <#{organizer}>" }

  decorated.with(data)

  logger.info do
    "[FunctionalLightService] -     keys in context: " \
    "#{extract_keys(decorated.context.keys)}"
  end
  self
end

Private Instance Methods

extract_keys(keys) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 76
def extract_keys(keys)
  keys.map { |key| ":#{key}" }.join(', ')
end
has_failure?(context) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 80
def has_failure?(context)
  context.respond_to?(:failure?) && context.failure?
end
log_expects(action) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 62
def log_expects(action)
  return unless defined?(action.expects) && action.expects.any?

  logger.info("[FunctionalLightService] -   expects: " \
              "#{extract_keys(action.expects)}")
end
log_promises(action) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 69
def log_promises(action)
  return unless defined?(action.promises) && action.promises.any?

  logger.info("[FunctionalLightService] -   promises: " \
              "#{extract_keys(action.promises)}")
end
skip_remaining?(context) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 90
def skip_remaining?(context)
  context.respond_to?(:skip_remaining?) && context.skip_remaining?
end
write_failure_log(context, action) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 84
def write_failure_log(context, action)
  logger.warn("[FunctionalLightService] - :-((( <#{action}> has failed...")
  logger.warn("[FunctionalLightService] - context message: #{context.message}")
  @logged = true
end
write_log(action, context) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 52
def write_log(action, context)
  return unless logger.info?

  logger.info("[FunctionalLightService] - executing <#{action}>")
  log_expects(action)
  log_promises(action)
  logger.info("[FunctionalLightService] -     keys in context: "\
              "#{extract_keys(context.keys)}")
end
write_skip_remaining_log(context, action) click to toggle source
# File lib/functional-light-service/organizer/with_reducer_log_decorator.rb, line 94
def write_skip_remaining_log(context, action)
  return unless logger.info?

  msg = "[FunctionalLightService] - ;-) <#{action}> has decided " \
        "to skip the rest of the actions"
  logger.info(msg)
  logger.info("[FunctionalLightService] - context message: #{context.message}")
  @logged = true
end