Sha256: c7ed5e83287a4b3e16d573f907b4d286700f50080ab9e3f2e8ef2f447f38ab0b
Contents?: true
Size: 1.06 KB
Versions: 3
Compression:
Stored size: 1.06 KB
Contents
# frozen_string_literal: true require "active_support/core_ext/object/inclusion" class Kredis::Types::Enum < Kredis::Types::Proxying prepend Kredis::DefaultValues InvalidDefault = Class.new(StandardError) proxying :set, :get, :del, :exists?, :multi attr_accessor :values def initialize(...) super define_predicates_for_values end def value=(value) if validated_choice = value.presence_in(values) set validated_choice end end def value get end def reset multi do del set_default end end private 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 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 end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
kredis-1.7.0 | lib/kredis/types/enum.rb |
kredis-1.6.1 | lib/kredis/types/enum.rb |
kredis-1.6.0 | lib/kredis/types/enum.rb |