Class: Familia::StringKey

Inherits:
DataType show all
Defined in:
lib/familia/data_type/types/stringkey.rb

Direct Known Subclasses

Counter, Lock

Instance Attribute Summary collapse

Attributes included from Settings

#current_key_version, #default_expiration, #delim, #encryption_keys, #encryption_personalization, #logical_database, #prefix, #schema_path, #schema_validator, #schemas, #strict_write_order, #suffix, #transaction_mode

Instance Method Summary collapse

Methods included from Features::Autoloader

autoload_files, included, normalize_to_config_name

Methods included from DataType::Serialization

#deserialize_values, #deserialize_values_with_nil

Methods included from DataType::DatabaseCommands

#current_expiration, #delete!, #echo, #exists?, #expire, #expireat, #move, #persist, #rename, #renamenx, #type

Methods included from DataType::Connection

#dbclient, #dbkey, #direct_access, #uri

Methods included from Connection::Behavior

#connect, #create_dbclient, #multi, #normalize_uri, #pipeline, #pipelined, #transaction, #uri=, #url, #url=

Methods included from Settings

#configure, #default_suffix, #pipelined_mode, #pipelined_mode=

Methods included from Base

add_feature, #as_json, #expired?, #expires?, find_feature, #generate_id, #to_json, #ttl, #update_expiration, #uuid

Constructor Details

This class inherits a constructor from Familia::DataType

Instance Attribute Details

#features_enabledObject (readonly) Originally defined in module Features

Returns the value of attribute features_enabled.

#logical_database(val = nil) ⇒ Object Originally defined in module DataType::ClassMethods

#parentObject Originally defined in module DataType::ClassMethods

Returns the value of attribute parent.

#prefixObject Originally defined in module DataType::ClassMethods

Returns the value of attribute prefix.

#suffixObject Originally defined in module DataType::ClassMethods

Returns the value of attribute suffix.

#uri(val = nil) ⇒ Object Originally defined in module DataType::ClassMethods

Returns the value of attribute uri.

Instance Method Details

#append(val) ⇒ Object Also known as: <<



107
108
109
110
111
# File 'lib/familia/data_type/types/stringkey.rb', line 107

def append(val)
  ret = dbclient.append dbkey, val
  update_expiration
  ret
end

#char_countInteger Also known as: size, length

Returns the number of elements in the list

Returns:

  • (Integer)

    number of elements



33
34
35
# File 'lib/familia/data_type/types/stringkey.rb', line 33

def char_count
  to_s.size
end

#decrementObject Also known as: decr



93
94
95
96
97
# File 'lib/familia/data_type/types/stringkey.rb', line 93

def decrement
  ret = dbclient.decr dbkey
  update_expiration
  ret
end

#decrementby(val) ⇒ Object Also known as: decrby



100
101
102
103
104
# File 'lib/familia/data_type/types/stringkey.rb', line 100

def decrementby(val)
  ret = dbclient.decrby dbkey, val.to_i
  update_expiration
  ret
end

#delObject



140
141
142
143
# File 'lib/familia/data_type/types/stringkey.rb', line 140

def del
  ret = dbclient.del dbkey
  ret.positive?
end

#deserialize_value(val) ⇒ Object

StringKey returns raw values (not JSON parsed)



25
26
27
28
29
# File 'lib/familia/data_type/types/stringkey.rb', line 25

def deserialize_value(val)
  return val if val.is_a?(Redis::Future)
  return @opts[:default] if val.nil?
  val
end

#empty?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/familia/data_type/types/stringkey.rb', line 39

def empty?
  char_count.zero?
end

#getbit(offset) ⇒ Object



114
115
116
# File 'lib/familia/data_type/types/stringkey.rb', line 114

def getbit(offset)
  dbclient.getbit dbkey, offset
end

#getrange(spoint, epoint) ⇒ Object



124
125
126
# File 'lib/familia/data_type/types/stringkey.rb', line 124

def getrange(spoint, epoint)
  dbclient.getrange dbkey, spoint, epoint
end

#getset(val) ⇒ Object



134
135
136
137
138
# File 'lib/familia/data_type/types/stringkey.rb', line 134

def getset(val)
  ret = dbclient.getset dbkey, val
  update_expiration
  ret
end

#incrementObject Also known as: incr



79
80
81
82
83
# File 'lib/familia/data_type/types/stringkey.rb', line 79

def increment
  ret = dbclient.incr(dbkey)
  update_expiration
  ret
end

#incrementby(val) ⇒ Object Also known as: incrby



86
87
88
89
90
# File 'lib/familia/data_type/types/stringkey.rb', line 86

def incrementby(val)
  ret = dbclient.incrby(dbkey, val.to_i)
  update_expiration
  ret
end

#initObject



7
# File 'lib/familia/data_type/types/stringkey.rb', line 7

def init; end

#serialize_value(val) ⇒ Object

StringKey uses raw string serialization (not JSON) because Redis string operations like INCR, DECR, APPEND operate on raw values. This overrides the base JSON serialization from DataType.



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/familia/data_type/types/stringkey.rb', line 12

def serialize_value(val)
  Familia.trace :TOREDIS, nil, "#{val}<#{val.class}>" if Familia.debug?

  # Handle Familia object references - extract identifier
  if val.is_a?(Familia::Base) || (val.is_a?(Class) && val.ancestors.include?(Familia::Base))
    return val.is_a?(Class) ? val.name : val.identifier
  end

  # StringKey uses raw string conversion for Redis compatibility
  val.to_s
end

#setbit(offset, val) ⇒ Object



118
119
120
121
122
# File 'lib/familia/data_type/types/stringkey.rb', line 118

def setbit(offset, val)
  ret = dbclient.setbit dbkey, offset, val
  update_expiration
  ret
end

#setnx(val) ⇒ Object



73
74
75
76
77
# File 'lib/familia/data_type/types/stringkey.rb', line 73

def setnx(val)
  ret = dbclient.setnx(dbkey, serialize_value(val))
  update_expiration
  ret
end

#setrange(offset, val) ⇒ Object



128
129
130
131
132
# File 'lib/familia/data_type/types/stringkey.rb', line 128

def setrange(offset, val)
  ret = dbclient.setrange dbkey, offset, val
  update_expiration
  ret
end

#to_iObject



57
58
59
# File 'lib/familia/data_type/types/stringkey.rb', line 57

def to_i
  value.to_i
end

#to_sObject



51
52
53
54
55
# File 'lib/familia/data_type/types/stringkey.rb', line 51

def to_s
  return super if value.to_s.empty?

  value.to_s
end

#valueObject Also known as: content, get



43
44
45
46
47
# File 'lib/familia/data_type/types/stringkey.rb', line 43

def value
  echo :value, Familia.pretty_stack(limit: 1) if Familia.debug
  dbclient.setnx dbkey, @opts[:default] if @opts[:default]
  deserialize_value dbclient.get(dbkey)
end

#value=(val) ⇒ Object Also known as: replace, set

Note:

This method executes a Redis SET immediately, unlike scalar field setters which are deferred until save. If the parent object has unsaved scalar field changes, consider calling save first to avoid split-brain state.



64
65
66
67
68
69
# File 'lib/familia/data_type/types/stringkey.rb', line 64

def value=(val)
  warn_if_dirty!
  ret = dbclient.set(dbkey, serialize_value(val))
  update_expiration
  ret
end