class RSchema::Schemas::Enum
A schema that matches a values in a given set.
@example Rock-Paper-Scissors values
schema = RSchema.define { enum([:rock, :paper, :scissors]) } schema.valid?(:rock) #=> true schema.valid?(:paper) #=> true schema.valid?(:gun) #=> false
Attributes
members[R]
subschema[R]
Public Class Methods
new(members, subschema)
click to toggle source
# File lib/rschema/schemas/enum.rb, line 17 def initialize(members, subschema) @members = members @subschema = subschema end
Public Instance Methods
call(value, options)
click to toggle source
# File lib/rschema/schemas/enum.rb, line 22 def call(value, options) subresult = subschema.call(value, options) if subresult.invalid? subresult elsif members.include?(subresult.value) subresult else Result.failure(error(subresult.value)) end end
with_wrapped_subschemas(wrapper)
click to toggle source
# File lib/rschema/schemas/enum.rb, line 33 def with_wrapped_subschemas(wrapper) self.class.new(members, wrapper.wrap(subschema)) end
Private Instance Methods
error(value)
click to toggle source
# File lib/rschema/schemas/enum.rb, line 39 def error(value) Error.new( schema: self, value: value, symbolic_name: :not_a_member, ) end