lib/micro/case/flow/reducer.rb in u-case-1.1.0 vs lib/micro/case/flow/reducer.rb in u-case-2.0.0.pre

- old
+ new

@@ -1,23 +1,24 @@ # frozen_string_literal: true module Micro - module Case + class Case module Flow class Reducer attr_reader :use_cases def self.map_use_cases(arg) return arg.use_cases if arg.is_a?(Reducer) - return arg.__flow__.use_cases if arg.is_a?(Class) && arg < Micro::Case::Flow + return arg.__flow__.use_cases if arg.is_a?(Class) && arg < ::Micro::Case::Flow + Array(arg) end def self.build(args) use_cases = Array(args).flat_map { |arg| map_use_cases(arg) } - raise Error::InvalidUseCases if use_cases.any? { |klass| !(klass < ::Micro::Case::Base) } + raise Error::InvalidUseCases if use_cases.any? { |klass| !(klass < ::Micro::Case) } new(use_cases) end def initialize(use_cases) @@ -25,10 +26,11 @@ end def call(arg = {}) @use_cases.reduce(initial_result(arg)) do |result, use_case| break result if result.failure? + use_case.__new__(result, result.value).call end end def >>(arg) @@ -46,44 +48,18 @@ private def initial_result(arg) return arg.call if arg_to_call?(arg) return arg if arg.is_a?(Micro::Case::Result) - result = Micro::Case::Result.new + + result = ::Micro::Case::Result.new result.__set__(true, arg, :ok, nil) end def arg_to_call?(arg) - return true if arg.is_a?(Micro::Case::Base) || arg.is_a?(Reducer) - return true if arg.is_a?(Class) && (arg < Micro::Case::Base || arg < Micro::Case::Flow) + return true if arg.is_a?(::Micro::Case) || arg.is_a?(Reducer) + return true if arg.is_a?(Class) && (arg < ::Micro::Case || arg < ::Micro::Case::Flow) return false - end - end - - class SafeReducer < Reducer - def call(arg = {}) - @use_cases.reduce(initial_result(arg)) do |result, use_case| - break result if result.failure? - use_case_result(use_case, result) - end - end - - alias_method :&, :>> - - def >>(arg) - raise NoMethodError, "undefined method `>>' for #{self.inspect}. Please, use the method `&' to avoid this error." - end - - private - - def use_case_result(use_case, result) - begin - instance = use_case.__new__(result, result.value) - instance.call - rescue => exception - raise exception if Error::ByWrongUsage.check(exception) - result.__set__(false, exception, :exception, instance) - end end end end end end