Sha256: 9687958ab0f2b0b0acca23f2e31dbf9f0cbf9239f2cdd553ebaa884f26896719

Contents?: true

Size: 996 Bytes

Versions: 2

Compression:

Stored size: 996 Bytes

Contents

# frozen_string_literal: true

module Micro
  class Case
    class Safe
      module Flow
        def self.included(base)
          base.send(:include, ::Micro::Case::Flow)

          def base.flow_reducer; Reducer; end
        end

        class Reducer < ::Micro::Case::Flow::Reducer
          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, input)
              begin
                instance = use_case.__new__(result, input)
                instance.call
              rescue => exception
                raise exception if Error::ByWrongUsage.check(exception)

                result.__set__(false, exception, :exception, instance)
              end
            end
        end
      end

      def self.Flow(args)
        Flow::Reducer.build(Array(args))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
u-case-2.0.0 lib/micro/case/safe/flow.rb
u-case-2.0.0.pre.4 lib/micro/case/safe/flow.rb