class RSchema::Schemas::Set
A schema that matches `Set` objects (from the Ruby standard library)
@example A set of integers
require 'set' schema = RSchema.define { set(_Integer) } schema.valid?(Set[1, 2, 3]) #=> true schema.valid?(Set[:a, :b, :c]) #=> false
Attributes
subschema[R]
Public Class Methods
new(subschema)
click to toggle source
# File lib/rschema/schemas/set.rb, line 19 def initialize(subschema) @subschema = subschema end
Public Instance Methods
call(value, options)
click to toggle source
# File lib/rschema/schemas/set.rb, line 23 def call(value, options) return not_a_set_result(value) unless value.is_a?(::Set) validated_set, errors = apply_subschema(value, options) if errors.empty? Result.success(validated_set) else Result.failure(errors) end end
with_wrapped_subschemas(wrapper)
click to toggle source
# File lib/rschema/schemas/set.rb, line 35 def with_wrapped_subschemas(wrapper) wrapped_subschema = wrapper.wrap(subschema) self.class.new(wrapped_subschema) end
Private Instance Methods
apply_subschema(set, options)
click to toggle source
# File lib/rschema/schemas/set.rb, line 42 def apply_subschema(set, options) validated_set = ::Set.new errors = {} set.each do |subvalue| subresult = subschema.call(subvalue, options) if subresult.valid? validated_set << subresult.value else errors[subvalue] = subresult.error break if options.fail_fast? end end [validated_set, errors] end
not_a_set_result(value)
click to toggle source
# File lib/rschema/schemas/set.rb, line 59 def not_a_set_result(value) Result.failure( Error.new( schema: self, symbolic_name: :not_a_set, value: value, ), ) end