Class: RSchema::Schemas::Set

Inherits:
Object
  • Object
show all
Defined in:
lib/rschema/schemas/set.rb

Overview

A schema that matches ‘Set` objects (from the Ruby standard library)

Examples:

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subschema) ⇒ Set

Returns a new instance of Set.



18
19
20
# File 'lib/rschema/schemas/set.rb', line 18

def initialize(subschema)
  @subschema = subschema
end

Instance Attribute Details

#subschemaObject (readonly)

Returns the value of attribute subschema.



16
17
18
# File 'lib/rschema/schemas/set.rb', line 16

def subschema
  @subschema
end

Instance Method Details

#call(value, options) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/rschema/schemas/set.rb', line 22

def call(value, options)
  return not_a_set_result(value) unless value.is_a?(::Set)

  result_value = ::Set.new
  result_errors = {}

  value.each do |subvalue|
    subresult = subschema.call(subvalue, options)
    if subresult.valid?
      result_value << subresult.value
    else
      result_errors[subvalue] = subresult.error
    end

    break if options.fail_fast?
  end

  if result_errors.empty?
    Result.success(result_value)
  else
    Result.failure(result_errors)
  end
end

#with_wrapped_subschemas(wrapper) ⇒ Object



46
47
48
49
# File 'lib/rschema/schemas/set.rb', line 46

def with_wrapped_subschemas(wrapper)
  wrapped_subschema = wrapper.wrap(subschema)
  self.class.new(wrapped_subschema)
end