Class: Familia::ListKey
- Defined in:
- lib/familia/data_type/types/listkey.rb
Instance Attribute Summary collapse
-
#features_enabled ⇒ Object
included
from Features
readonly
Returns the value of attribute features_enabled.
- #logical_database(val = nil) ⇒ Object included from DataType::ClassMethods
-
#parent ⇒ Object
included
from DataType::ClassMethods
Returns the value of attribute parent.
-
#prefix ⇒ Object
included
from DataType::ClassMethods
Returns the value of attribute prefix.
-
#suffix ⇒ Object
included
from DataType::ClassMethods
Returns the value of attribute suffix.
-
#uri(val = nil) ⇒ Object
included
from DataType::ClassMethods
Returns the value of attribute uri.
Attributes included from Settings
#current_key_version, #default_expiration, #delim, #encryption_keys, #encryption_personalization, #logical_database, #prefix, #suffix, #transaction_mode
Instance Method Summary collapse
- #<<(val) ⇒ Object (also: #add_element, #add)
- #[](idx, count = nil) ⇒ Object (also: #slice)
- #at(idx) ⇒ Object
- #collect ⇒ Object
- #collectraw ⇒ Object
- #each ⇒ Object
- #each_with_index ⇒ Object
- #eachraw ⇒ Object
- #eachraw_with_index ⇒ Object
-
#element_count ⇒ Integer
(also: #size, #length, #count)
Returns the number of elements in the list.
- #empty? ⇒ Boolean
- #first ⇒ Object
-
#insert(position, pivot, value) ⇒ Integer
(also: #linsert)
Inserts an element before or after a pivot element.
- #last ⇒ Object
- #member?(value) ⇒ Boolean
- #members(count = -1)) ⇒ Object (also: #all, #to_a)
- #membersraw(count = -1)) ⇒ Object
-
#move(destination, wherefrom, whereto) ⇒ Object?
(also: #lmove)
Moves an element from this list to another list atomically.
-
#pop(count = nil) ⇒ Object, ...
Removes and returns the last element(s) from the list.
- #push(*values) ⇒ Object (also: #append)
-
#pushx(*values) ⇒ Integer
(also: #rpushx)
Pushes values only if the list already exists.
- #range(sidx = 0, eidx = -1)) ⇒ Object
- #rangeraw(sidx = 0, eidx = -1)) ⇒ Object
-
#remove_element(value, count = 0) ⇒ Integer
(also: #remove)
Removes elements equal to value from the list.
- #select ⇒ Object
- #selectraw ⇒ Object
-
#set(index, value) ⇒ String
(also: #lset)
Sets the element at the specified index.
-
#shift(count = nil) ⇒ Object, ...
Removes and returns the first element(s) from the list.
-
#trim(start, stop) ⇒ String
(also: #ltrim)
Trims the list to the specified range.
- #unshift(*values) ⇒ Object (also: #prepend)
-
#unshiftx(*values) ⇒ Integer
(also: #lpushx)
Pushes values to the head only if the list already exists.
Methods included from Features::Autoloader
autoload_files, included, normalize_to_config_name
Methods included from DataType::Serialization
#deserialize_value, #deserialize_values, #deserialize_values_with_nil, #serialize_value
Methods included from DataType::DatabaseCommands
#current_expiration, #delete!, #echo, #exists?, #expire, #expireat, #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, #to_s, #ttl, #update_expiration, #uuid
Constructor Details
This class inherits a constructor from Familia::DataType
Instance Attribute Details
#features_enabled ⇒ Object (readonly) Originally defined in module Features
Returns the value of attribute features_enabled.
#logical_database(val = nil) ⇒ Object Originally defined in module DataType::ClassMethods
#parent ⇒ Object Originally defined in module DataType::ClassMethods
Returns the value of attribute parent.
#prefix ⇒ Object Originally defined in module DataType::ClassMethods
Returns the value of attribute prefix.
#suffix ⇒ Object 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
#<<(val) ⇒ Object Also known as: add_element, add
29 30 31 |
# File 'lib/familia/data_type/types/listkey.rb', line 29 def <<(val) push(val) end |
#[](idx, count = nil) ⇒ Object Also known as: slice
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/familia/data_type/types/listkey.rb', line 72 def [](idx, count = nil) if idx.is_a? Range range idx.first, idx.last elsif count case count <=> 0 when 1 then range(idx, idx + count - 1) when 0 then [] when -1 then nil end else at idx end end |
#at(idx) ⇒ Object
154 155 156 |
# File 'lib/familia/data_type/types/listkey.rb', line 154 def at(idx) deserialize_value dbclient.lindex(dbkey, idx) end |
#collect ⇒ Object
138 139 140 |
# File 'lib/familia/data_type/types/listkey.rb', line 138 def collect(&) range.collect(&) end |
#collectraw ⇒ Object
146 147 148 |
# File 'lib/familia/data_type/types/listkey.rb', line 146 def collectraw(&) rangeraw.collect(&) end |
#each ⇒ Object
122 123 124 |
# File 'lib/familia/data_type/types/listkey.rb', line 122 def each(&) range.each(&) end |
#each_with_index ⇒ Object
126 127 128 |
# File 'lib/familia/data_type/types/listkey.rb', line 126 def each_with_index(&) range.each_with_index(&) end |
#eachraw ⇒ Object
130 131 132 |
# File 'lib/familia/data_type/types/listkey.rb', line 130 def eachraw(&) rangeraw.each(&) end |
#eachraw_with_index ⇒ Object
134 135 136 |
# File 'lib/familia/data_type/types/listkey.rb', line 134 def eachraw_with_index(&) rangeraw.each_with_index(&) end |
#element_count ⇒ Integer Also known as: size, length, count
Returns the number of elements in the list
9 10 11 |
# File 'lib/familia/data_type/types/listkey.rb', line 9 def element_count dbclient.llen dbkey end |
#empty? ⇒ Boolean
16 17 18 |
# File 'lib/familia/data_type/types/listkey.rb', line 16 def empty? element_count.zero? end |
#first ⇒ Object
244 245 246 |
# File 'lib/familia/data_type/types/listkey.rb', line 244 def first at 0 end |
#insert(position, pivot, value) ⇒ Integer Also known as: linsert
Inserts an element before or after a pivot element
184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/familia/data_type/types/listkey.rb', line 184 def insert(position, pivot, value) pos = case position when :before, 'BEFORE' then 'BEFORE' when :after, 'AFTER' then 'AFTER' else raise ArgumentError, "position must be :before or :after, got #{position.inspect}" end result = dbclient.linsert dbkey, pos, serialize_value(pivot), serialize_value(value) update_expiration if result.positive? result end |
#last ⇒ Object
248 249 250 |
# File 'lib/familia/data_type/types/listkey.rb', line 248 def last at(-1) end |
#member?(value) ⇒ Boolean
87 88 89 |
# File 'lib/familia/data_type/types/listkey.rb', line 87 def member?(value) !dbclient.lpos(dbkey, serialize_value(value)).nil? end |
#members(count = -1)) ⇒ Object Also known as: all, to_a
109 110 111 112 113 |
# File 'lib/familia/data_type/types/listkey.rb', line 109 def members(count = -1) echo :members, Familia.pretty_stack(limit: 1) if Familia.debug count -= 1 if count.positive? range 0, count end |
#membersraw(count = -1)) ⇒ Object
117 118 119 120 |
# File 'lib/familia/data_type/types/listkey.rb', line 117 def membersraw(count = -1) count -= 1 if count.positive? rangeraw 0, count end |
#move(destination, wherefrom, whereto) ⇒ Object? Also known as: lmove
Moves an element from this list to another list atomically
202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/familia/data_type/types/listkey.rb', line 202 def move(destination, wherefrom, whereto) dest_key = destination.respond_to?(:dbkey) ? destination.dbkey : destination from = wherefrom.to_s.upcase to = whereto.to_s.upcase unless %w[LEFT RIGHT].include?(from) && %w[LEFT RIGHT].include?(to) raise ArgumentError, 'wherefrom and whereto must be :left or :right' end result = dbclient.lmove dbkey, dest_key, from, to deserialize_value result end |
#pop(count = nil) ⇒ Object, ...
Removes and returns the last element(s) from the list
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/familia/data_type/types/listkey.rb', line 47 def pop(count = nil) if count result = dbclient.rpop(dbkey, count) return nil if result.nil? deserialize_values(*result) else deserialize_value dbclient.rpop(dbkey) end end |
#push(*values) ⇒ Object Also known as: append
20 21 22 23 24 25 26 |
# File 'lib/familia/data_type/types/listkey.rb', line 20 def push *values echo :push, Familia.pretty_stack(limit: 1) if Familia.debug values.flatten.compact.each { |v| dbclient.rpush dbkey, serialize_value(v) } dbclient.ltrim dbkey, -@opts[:maxlength], -1 if @opts[:maxlength] update_expiration self end |
#pushx(*values) ⇒ Integer Also known as: rpushx
Pushes values only if the list already exists
219 220 221 222 223 224 225 226 227 |
# File 'lib/familia/data_type/types/listkey.rb', line 219 def pushx(*values) return 0 if values.empty? result = values.flatten.compact.reduce(0) do |len, v| dbclient.rpushx dbkey, serialize_value(v) end update_expiration if result.positive? result end |
#range(sidx = 0, eidx = -1)) ⇒ Object
100 101 102 103 |
# File 'lib/familia/data_type/types/listkey.rb', line 100 def range(sidx = 0, eidx = -1) elements = rangeraw sidx, eidx deserialize_values(*elements) end |
#rangeraw(sidx = 0, eidx = -1)) ⇒ Object
105 106 107 |
# File 'lib/familia/data_type/types/listkey.rb', line 105 def rangeraw(sidx = 0, eidx = -1) dbclient.lrange(dbkey, sidx, eidx) end |
#remove_element(value, count = 0) ⇒ Integer Also known as: remove
Removes elements equal to value from the list
95 96 97 |
# File 'lib/familia/data_type/types/listkey.rb', line 95 def remove_element(value, count = 0) dbclient.lrem dbkey, count, serialize_value(value) end |
#select ⇒ Object
142 143 144 |
# File 'lib/familia/data_type/types/listkey.rb', line 142 def select(&) range.select(&) end |
#selectraw ⇒ Object
150 151 152 |
# File 'lib/familia/data_type/types/listkey.rb', line 150 def selectraw(&) rangeraw.select(&) end |
#set(index, value) ⇒ String Also known as: lset
Sets the element at the specified index
172 173 174 175 176 |
# File 'lib/familia/data_type/types/listkey.rb', line 172 def set(index, value) result = dbclient.lset dbkey, index, serialize_value(value) update_expiration result end |
#shift(count = nil) ⇒ Object, ...
Removes and returns the first element(s) from the list
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/familia/data_type/types/listkey.rb', line 61 def shift(count = nil) if count result = dbclient.lpop(dbkey, count) return nil if result.nil? deserialize_values(*result) else deserialize_value dbclient.lpop(dbkey) end end |
#trim(start, stop) ⇒ String Also known as: ltrim
Trims the list to the specified range
162 163 164 |
# File 'lib/familia/data_type/types/listkey.rb', line 162 def trim(start, stop) dbclient.ltrim dbkey, start, stop end |
#unshift(*values) ⇒ Object Also known as: prepend
35 36 37 38 39 40 41 |
# File 'lib/familia/data_type/types/listkey.rb', line 35 def unshift *values values.flatten.compact.each { |v| dbclient.lpush dbkey, serialize_value(v) } # TODO: test maxlength dbclient.ltrim dbkey, 0, @opts[:maxlength] - 1 if @opts[:maxlength] update_expiration self end |
#unshiftx(*values) ⇒ Integer Also known as: lpushx
Pushes values to the head only if the list already exists
233 234 235 236 237 238 239 240 241 |
# File 'lib/familia/data_type/types/listkey.rb', line 233 def unshiftx(*values) return 0 if values.empty? result = values.flatten.compact.reduce(0) do |len, v| dbclient.lpushx dbkey, serialize_value(v) end update_expiration if result.positive? result end |