Sha256: b5b6fb4d781ee51ec8abd3fc1c82ad8665f078e4747c18f45ac5cd4598382035

Contents?: true

Size: 813 Bytes

Versions: 1

Compression:

Stored size: 813 Bytes

Contents

# frozen_string_literal: true

module Kind
  module Maybe
    module Wrappable
      WRONG_NUMBER_OF_ARGS = 'wrong number of arguments (given 0, expected 1)'.freeze

      def wrap(arg = UNDEFINED)
        if block_given?
          begin
            return new(yield) if UNDEFINED == arg

            input = __call_before_expose_the_arg_in_a_block(arg)

            input.kind_of?(Kind::Maybe::None) ? input : new(yield(input))
          rescue StandardError => exception
            Maybe.__none__(exception)
          end
        else
          return new(arg) if UNDEFINED != arg

          raise ArgumentError, WRONG_NUMBER_OF_ARGS
        end
      end

      private

        def __call_before_expose_the_arg_in_a_block(input)
          input
        end
    end

    private_constant :Wrappable
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kind-4.0.0 lib/kind/maybe/wrappable.rb