Sha256: 69fae83cc11c1d9da8c144aa07d9c89c87bc977300a0b453f1caf582685df2d0

Contents?: true

Size: 740 Bytes

Versions: 3

Compression:

Stored size: 740 Bytes

Contents

require 'dry/data/constraints'

module Dry
  module Data
    class Type
      class Constrained < Type
        attr_reader :rule

        def initialize(constructor, primitive, rule)
          super(constructor, primitive)
          @rule = rule
        end

        def call(input)
          result = super(input)

          if valid?(result)
            result
          else
            raise ConstraintError, "#{input.inspect} violates constraints"
          end
        end
        alias_method :[], :call

        def valid?(input)
          super && rule.(input).success?
        end
      end

      def constrained(options)
        Constrained.new(constructor, primitive, Data.Rule(primitive, options))
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dry-data-0.4.2 lib/dry/data/type/constrained.rb
dry-data-0.4.1 lib/dry/data/type/constrained.rb
dry-data-0.4.0 lib/dry/data/type/constrained.rb