Sha256: 8cf4f85fe0fdbe1a1080a14f10ff3cc433fc6906869d7eb71a0a9746f9982e36

Contents?: true

Size: 1011 Bytes

Versions: 5

Compression:

Stored size: 1011 Bytes

Contents

require 'dry/types/decorator'

module Dry
  module Types
    class Default
      include Dry::Equalizer(:type, :options, :value)
      include Decorator
      include Builder

      class Callable < Default
        include Dry::Equalizer(:type, :options)

        def evaluate
          value.call
        end
      end

      attr_reader :value

      alias_method :evaluate, :value

      def self.[](value)
        if value.respond_to?(:call)
          Callable
        else
          self
        end
      end

      def initialize(type, value, *)
        super
        @value = value
      end

      def constrained(*args)
        type.constrained(*args).default(value)
      end

      def default?
        true
      end

      def try(input)
        success(call(input))
      end

      def call(input)
        if input.nil?
          evaluate
        else
          output = type[input]
          output.nil? ? evaluate : output
        end
      end
      alias_method :[], :call
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
dry-types-0.9.2 lib/dry/types/default.rb
dry-types-0.9.1 lib/dry/types/default.rb
dry-types-0.9.0 lib/dry/types/default.rb
dry-types-0.8.1 lib/dry/types/default.rb
dry-types-0.8.0 lib/dry/types/default.rb