Sha256: 772000bcf4292206b30657a51ae93dce99912e737a4c8068d742da5feb43410b

Contents?: true

Size: 1.06 KB

Versions: 2

Compression:

Stored size: 1.06 KB

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

      def self.flow(*args)
        @__flow ||= __set_flow__(Flow::Reducer, args)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
u-case-2.1.1 lib/micro/case/safe/flow.rb
u-case-2.1.0 lib/micro/case/safe/flow.rb