class Kredis::Types::Enum

def define_predicates_for_values

def define_predicates_for_values
  values.each do |defined_value|
    define_singleton_method("#{defined_value}?") { value == defined_value }
    define_singleton_method("#{defined_value}!") { self.value = defined_value }
  end
end

def initialize(...)

def initialize(...)
  super
  define_predicates_for_values
end

def reset

def reset
  multi do
    del
    set_default
  end
end

def set_default

def set_default
  if default.in?(values) || default.nil?
    set default
  else
    raise InvalidDefault, "Default value #{default.inspect} for #{key} is not a valid option (Valid values: #{values.join(", ")})"
  end
end

def value

def value
  get
end

def value=(value)

def value=(value)
  if validated_choice = value.presence_in(values)
    set validated_choice
  end
end