Sha256: 3fa47acd2e44b905ccd33c9d58abba0bee248015ce02e30e3e4e7d81b46d29cd

Contents?: true

Size: 1.64 KB

Versions: 7

Compression:

Stored size: 1.64 KB

Contents

require 'dry/monads/maybe'
require 'dry/types/decorator'

module Dry
  module Types
    class Maybe
      include Type
      include Dry::Equalizer(:type, :options)
      include Decorator
      include Builder
      include Dry::Monads::Maybe::Mixin

      # @param [Dry::Monads::Maybe, Object] input
      # @return [Dry::Monads::Maybe]
      def call(input = Undefined)
        case input
        when Dry::Monads::Maybe
          input
        when Undefined
          None()
        else
          Maybe(type[input])
        end
      end
      alias_method :[], :call

      # @param [Object] input
      # @return [Result::Success]
      def try(input = Undefined)
        res = if input.equal?(Undefined)
                None()
              else
                Maybe(type[input])
              end

        Result::Success.new(res)
      end

      # @return [true]
      def default?
        true
      end

      # @param [Object] value
      # @see Dry::Types::Builder#default
      # @raise [ArgumentError] if nil provided as default value
      def default(value)
        if value.nil?
          raise ArgumentError, "nil cannot be used as a default of a maybe type"
        else
          super
        end
      end
    end

    module Builder
      # @return [Maybe]
      def maybe
        Maybe.new(Types['strict.nil'] | self)
      end
    end

    # Register non-coercible maybe types
    NON_NIL.each_key do |name|
      register("maybe.strict.#{name}", self["strict.#{name}"].maybe)
    end

    # Register coercible maybe types
    COERCIBLE.each_key do |name|
      register("maybe.coercible.#{name}", self["coercible.#{name}"].maybe)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
dry-types-0.14.1 lib/dry/types/extensions/maybe.rb
dry-types-0.14.0 lib/dry/types/extensions/maybe.rb
dry-types-0.13.4 lib/dry/types/extensions/maybe.rb
dry-types-0.13.3 lib/dry/types/extensions/maybe.rb
dry-types-0.13.2 lib/dry/types/extensions/maybe.rb
dry-types-0.13.1 lib/dry/types/extensions/maybe.rb
dry-types-0.13.0 lib/dry/types/extensions/maybe.rb