Sha256: da828b310126467ea1232bba60fbf0b1881362afc7492c714937d254655833b4

Contents?: true

Size: 1.18 KB

Versions: 5

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

module Fear
  module PartialFunction
    # Composite function produced by +PartialFunction#and_then+ method
    # @api private
    class AndThen
      include PartialFunction

      # @param partial_function [Fear::PartialFunction]
      # @param function [Proc]
      def initialize(partial_function, &function)
        @partial_function = partial_function
        @function = function
      end
      # @!attribute partial_function
      #   @return [Fear::PartialFunction]
      # @!attribute function
      #   @return [Proc]
      attr_reader :partial_function
      attr_reader :function
      private :partial_function
      private :function

      # @param arg [any]
      # @return [any ]
      def call(arg)
        function.(partial_function.(arg))
      end

      # @param arg [any]
      # @return [Boolean]
      def defined_at?(arg)
        partial_function.defined_at?(arg)
      end

      # @param arg [any]
      # @yield [arg]
      # @return [any]
      def call_or_else(arg)
        result = partial_function.call_or_else(arg) do
          return yield(arg)
        end
        function.(result)
      end
    end

    private_constant :AndThen
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fear-3.0.0 lib/fear/partial_function/and_then.rb
fear-2.0.1 lib/fear/partial_function/and_then.rb
fear-2.0.0 lib/fear/partial_function/and_then.rb
fear-1.2.0 lib/fear/partial_function/and_then.rb
fear-1.1.0 lib/fear/partial_function/and_then.rb