Sha256: 1f1b1482e75bb63349897664ce0cff5308c3821eabaa74d189bcb7053b68625c

Contents?: true

Size: 699 Bytes

Versions: 5

Compression:

Stored size: 699 Bytes

Contents

require "active_support/core_ext/object/inclusion"

class Kredis::Types::Enum < Kredis::Types::Proxying
  proxying :set, :get, :del, :exists?

  attr_accessor :values, :default

  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 || default
  end

  def reset
    del
  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
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kredis-1.5.0 lib/kredis/types/enum.rb
kredis-1.4.0 lib/kredis/types/enum.rb
kredis-1.3.0.1 lib/kredis/types/enum.rb
kredis-1.3.0 lib/kredis/types/enum.rb
kredis-1.2.0 lib/kredis/types/enum.rb