Sha256: 052a9a5febf3255f34c859139dc7aa8f4bd41c00d956c9de39774c1935dfd4f7

Contents?: true

Size: 988 Bytes

Versions: 3

Compression:

Stored size: 988 Bytes

Contents

# frozen_string_literal: true

require "active_support/core_ext/hash"

class Kredis::Types::Hash < Kredis::Types::Proxying
  prepend Kredis::DefaultValues

  proxying :hget, :hset, :hmget, :hdel, :hgetall, :hkeys, :hvals, :del, :exists?

  attr_accessor :typed

  def [](key)
    string_to_type(hget(key), typed)
  end

  def []=(key, value)
    update key => value
  end

  def update(**entries)
    hset entries.transform_values { |val| type_to_string(val, typed) } if entries.flatten.any?
  end

  def values_at(*keys)
    strings_to_types(hmget(keys) || [], typed)
  end

  def delete(*keys)
    hdel keys if keys.flatten.any?
  end

  def remove
    del
  end
  alias clear remove

  def entries
    (hgetall || {}).transform_values { |val| string_to_type(val, typed) }.with_indifferent_access
  end
  alias to_h entries

  def keys
    hkeys || []
  end

  def values
    strings_to_types(hvals || [], typed)
  end

  private
    def set_default
      update(**default)
    end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kredis-1.7.0 lib/kredis/types/hash.rb
kredis-1.6.1 lib/kredis/types/hash.rb
kredis-1.6.0 lib/kredis/types/hash.rb