Sha256: d1e4d4843e14c274a77be3005d5f20b6367939bae1638cecbdb567803ea625ce

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Micro
  module Cases
    class Map
      IsAUseCaseOrFlowWithDefaults = -> arg { arg.is_a?(Array) && Micro.case_or_flow?(arg[0]) && arg[1].is_a?(Hash) }
      IsAUseCaseOrFlow = -> arg { Micro.case_or_flow?(arg) || IsAUseCaseOrFlowWithDefaults[arg] }
      HasValidArgs = -> (args) { Kind::Array[args].all?(&IsAUseCaseOrFlow) }

      attr_reader :use_cases

      def self.build(args)
        raise Error::InvalidUseCases unless HasValidArgs[args]

        new(args)
      end

      def initialize(use_cases)
        @use_cases = use_cases
      end

      GetUseCaseResult = -> (hash) do
        -> (use_case) do
          if use_case.is_a?(Array)
            use_case[0].call(hash.merge(use_case[1]))
          else
            use_case.call(hash)
          end
        end
      end

      def call(arg = {})
        hash = Kind::Hash[arg]

        use_cases.map(&GetUseCaseResult[hash])
      end

      private_constant :HasValidArgs, :IsAUseCaseOrFlow, :IsAUseCaseOrFlowWithDefaults, :GetUseCaseResult
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
u-case-4.5.2 lib/micro/cases/map.rb