Sha256: 74cf5258542f3780f060d77785bfc39241d09dbfe620fd4179a94e620418b900

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Kind
  module Maybe
    class None < Result
      INVALID_DEFAULT_ARG = 'the default value must be defined as an argument or block'.freeze

      def value_or(default = UNDEFINED, &block)
        raise ArgumentError, INVALID_DEFAULT_ARG if UNDEFINED == default && !block

        UNDEFINED != default ? default : block.call
      end

      def none?; true; end

      def map(&fn)
        self
      end

      alias_method :map!, :map
      alias_method :then, :map
      alias_method :then!, :map
      alias_method :check, :map

      def try!(method_name = UNDEFINED, *args, &block)
        KIND.of!(::Symbol, method_name)if UNDEFINED != method_name

        self
      end

      alias_method :try, :try!

      def dig(*keys)
        self
      end

      def presence
        self
      end

      private_constant :INVALID_DEFAULT_ARG
    end

    NONE_WITH_NIL_VALUE = None.new(nil)
    NONE_WITH_UNDEFINED_VALUE = None.new(Undefined)

    def self.none
      NONE_WITH_NIL_VALUE
    end

    def self.__none__(value) # :nodoc:
      None.new(value)
    end

    private_constant :NONE_WITH_NIL_VALUE, :NONE_WITH_UNDEFINED_VALUE
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kind-5.1.0 lib/kind/core/maybe/none.rb