Sha256: b0425ecd6a8f38a8dc155559308a3101d0519670382931d7aba0567ae71649bb
Contents?: true
Size: 841 Bytes
Versions: 1
Compression:
Stored size: 841 Bytes
Contents
require 'dry/types/decorator' require 'dry/types/constraints' module Dry module Types class Constrained include Decorator include Builder attr_reader :rule def initialize(type, options) super @rule = options.fetch(:rule) end def call(input) result = try(input) if valid?(result) result else raise ConstraintError, "#{input.inspect} violates constraints" end end alias_method :[], :call def try(input) type[input] end def valid?(input) rule.(input).success? end def constrained(options) with(rule: rule & Types.Rule(options)) end private def decorate?(response) super || response.kind_of?(Constructor) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dry-types-0.6.0 | lib/dry/types/constrained.rb |