Module: Familia::Horreum::DatabaseCommands

Included in:
Core
Defined in:
lib/familia/horreum/core/database_commands.rb

Overview

Methods that call Database commands (InstanceMethods)

NOTE: There is no hgetall for Horreum. This is because Horreum is a single hash in Database that we aren’t meant to have be working on in memory for more than, making changes -> committing. To emphasize this, instead of “refreshing” the object with hgetall, just load the object again.

Instance Method Summary collapse

Instance Method Details

#current_expirationInteger

Retrieves the remaining time to live (TTL) for the object’s dbkey.

This method accesses the ovjects Database client to obtain the TTL of dbkey. If debugging is enabled, it logs the TTL retrieval operation using Familia.trace.

Returns:

  • (Integer)

    The TTL of the key in seconds. Returns -1 if the key does not exist or has no associated expire time.



70
71
72
73
# File 'lib/familia/horreum/core/database_commands.rb', line 70

def current_expiration
  Familia.trace :CURRENT_EXPIRATION, dbclient, uri, caller(1..1) if Familia.debug?
  dbclient.ttl dbkey
end

#data_typeObject



85
86
87
88
# File 'lib/familia/horreum/core/database_commands.rb', line 85

def data_type
  Familia.trace :DATATYPE, dbclient, uri, caller(1..1) if Familia.debug?
  dbclient.type dbkey(suffix)
end

#decr(field) ⇒ Object Also known as: decrement



157
158
159
# File 'lib/familia/horreum/core/database_commands.rb', line 157

def decr(field)
  dbclient.hdecr field
end

#decrby(field, decrement) ⇒ Object Also known as: decrementby



152
153
154
# File 'lib/familia/horreum/core/database_commands.rb', line 152

def decrby(field, decrement)
  dbclient.decrby dbkey(suffix), field, decrement
end

#delete!Boolean Also known as: clear

Deletes the entire dbkey

Returns:

  • (Boolean)

    true if the key was deleted, false otherwise



174
175
176
177
178
# File 'lib/familia/horreum/core/database_commands.rb', line 174

def delete!
  Familia.trace :DELETE!, dbclient, uri, caller(1..1) if Familia.debug?
  ret = dbclient.del dbkey
  ret.positive?
end

#exists?(check_size: true) ⇒ Boolean

Note:

The default behavior maintains backward compatibility by treating empty hashes as non-existent. Use check_size: false for pure key existence checking.

Checks if the calling object’s key exists in Redis.

Examples:

Check existence with size validation (default behavior)

some_object.exists?                    # => false for empty hashes
some_object.exists?(check_size: true)  # => false for empty hashes

Check existence only

some_object.exists?(check_size: false)  # => true for empty hashes

Parameters:

  • check_size (Boolean) (defaults to: true)

    When true (default), also verifies the hash has a non-zero size. When false, only checks key existence regardless of content.

Returns:

  • (Boolean)

    Returns true if the key exists in Redis. When check_size is true, also requires the hash to have at least one field.



39
40
41
42
43
44
# File 'lib/familia/horreum/core/database_commands.rb', line 39

def exists?(check_size: true)
  key_exists = self.class.exists?(identifier)
  return key_exists unless check_size

  key_exists && !size.zero?
end

#expire(default_expiration = nil) ⇒ Object

Sets a timeout on key. After the timeout has expired, the key will automatically be deleted. Returns 1 if the timeout was set, 0 if key does not exist or the timeout could not be set.



57
58
59
60
61
# File 'lib/familia/horreum/core/database_commands.rb', line 57

def expire(default_expiration = nil)
  default_expiration ||= self.class.default_expiration
  Familia.trace :EXPIRE, dbclient, default_expiration, caller(1..1) if Familia.debug?
  dbclient.expire dbkey, default_expiration.to_i
end

#field_countInteger Also known as: size

Returns the number of fields in the main object hash

Returns:

  • (Integer)

    number of fields



48
49
50
# File 'lib/familia/horreum/core/database_commands.rb', line 48

def field_count
  dbclient.hlen dbkey
end

#hget(field) ⇒ Object



97
98
99
100
# File 'lib/familia/horreum/core/database_commands.rb', line 97

def hget(field)
  Familia.trace :HGET, dbclient, field, caller(1..1) if Familia.debug?
  dbclient.hget dbkey(suffix), field
end

#hgetallObject Also known as: all

For parity with DataType#hgetall



91
92
93
94
# File 'lib/familia/horreum/core/database_commands.rb', line 91

def hgetall
  Familia.trace :HGETALL, dbclient, uri, caller(1..1) if Familia.debug?
  dbclient.hgetall dbkey(suffix)
end

#hkeysObject



128
129
130
131
# File 'lib/familia/horreum/core/database_commands.rb', line 128

def hkeys
  Familia.trace :HKEYS, dbclient, 'uri', caller(1..1) if Familia.debug?
  dbclient.hkeys dbkey(suffix)
end

#hmset(hsh = {}) ⇒ Object



122
123
124
125
126
# File 'lib/familia/horreum/core/database_commands.rb', line 122

def hmset(hsh = {})
  hsh ||= to_h
  Familia.trace :HMSET, dbclient, hsh, caller(1..1) if Familia.debug?
  dbclient.hmset dbkey(suffix), hsh
end

#hset(field, value) ⇒ Object

Returns The number of fields that were added to the hash. If the field already exists, this will return 0.

Returns:

  • The number of fields that were added to the hash. If the field already exists, this will return 0.



104
105
106
107
# File 'lib/familia/horreum/core/database_commands.rb', line 104

def hset(field, value)
  Familia.trace :HSET, dbclient, field, caller(1..1) if Familia.debug?
  dbclient.hset dbkey, field, value
end

#hsetnx(field, value) ⇒ Integer

Sets field in the hash stored at key to value, only if field does not yet exist. If key does not exist, a new key holding a hash is created. If field already exists, this operation has no effect.

Parameters:

  • field (String)

    The field to set in the hash

  • value (String)

    The value to set for the field

Returns:

  • (Integer)

    1 if the field is a new field in the hash and the value was set, 0 if the field already exists in the hash and no operation was performed



117
118
119
120
# File 'lib/familia/horreum/core/database_commands.rb', line 117

def hsetnx(field, value)
  Familia.trace :HSETNX, dbclient, field, caller(1..1) if Familia.debug?
  dbclient.hsetnx dbkey, field, value
end

#hstrlen(field) ⇒ Object Also known as: hstrlength



162
163
164
# File 'lib/familia/horreum/core/database_commands.rb', line 162

def hstrlen(field)
  dbclient.hstrlen dbkey(suffix), field
end

#hvalsObject



133
134
135
# File 'lib/familia/horreum/core/database_commands.rb', line 133

def hvals
  dbclient.hvals dbkey(suffix)
end

#incr(field) ⇒ Object Also known as: increment



137
138
139
# File 'lib/familia/horreum/core/database_commands.rb', line 137

def incr(field)
  dbclient.hincrby dbkey(suffix), field, 1
end

#incrby(field, increment) ⇒ Object Also known as: incrementby



142
143
144
# File 'lib/familia/horreum/core/database_commands.rb', line 142

def incrby(field, increment)
  dbclient.hincrby dbkey(suffix), field, increment
end

#incrbyfloat(field, increment) ⇒ Object Also known as: incrementbyfloat



147
148
149
# File 'lib/familia/horreum/core/database_commands.rb', line 147

def incrbyfloat(field, increment)
  dbclient.hincrbyfloat dbkey(suffix), field, increment
end

#key?(field) ⇒ Boolean Also known as: has_key?

Returns:

  • (Boolean)


167
168
169
# File 'lib/familia/horreum/core/database_commands.rb', line 167

def key?(field)
  dbclient.hexists dbkey(suffix), field
end

#move(logical_database) ⇒ Object



19
20
21
# File 'lib/familia/horreum/core/database_commands.rb', line 19

def move(logical_database)
  dbclient.move dbkey, logical_database
end

#remove_field(field) ⇒ Integer Also known as: remove

Removes a field from the hash stored at the dbkey.

Parameters:

  • field (String)

    The field to remove from the hash.

Returns:

  • (Integer)

    The number of fields that were removed from the hash (0 or 1).



79
80
81
82
# File 'lib/familia/horreum/core/database_commands.rb', line 79

def remove_field(field)
  Familia.trace :HDEL, dbclient, field, caller(1..1) if Familia.debug?
  dbclient.hdel dbkey, field
end