Class: Redis::List
- Inherits:
-
EnumerableObject
- Object
- BaseObject
- EnumerableObject
- Redis::List
- Defined in:
- lib/redis/list.rb
Overview
Class representing a Redis list. Instances of Redis::List are designed to behave as much like Ruby arrays as possible.
Instance Attribute Summary
Attributes inherited from BaseObject
Instance Method Summary collapse
-
#<<(value) ⇒ Object
Works like push.
- #==(x) ⇒ Object
-
#[](index, length = nil) ⇒ Object
(also: #slice)
Same functionality as Ruby arrays.
-
#[]=(index, value) ⇒ Object
Same functionality as Ruby arrays.
-
#at(index) ⇒ Object
Return the value at the given index.
-
#delete(name, count = 0) ⇒ Object
Delete the element(s) from the list that match name.
-
#empty? ⇒ Boolean
Returns true if there are no elements in the list.
-
#first ⇒ Object
Return the first element in the list.
-
#insert(where, pivot, value) ⇒ Object
Add a member before or after pivot in the list.
-
#last ⇒ Object
Return the last element in the list.
-
#length ⇒ Object
(also: #size)
Return the length of the list.
-
#pop(n = nil) ⇒ Object
Remove a member from the end of the list.
-
#push(*values) ⇒ Object
Add a member to the end of the list.
-
#range(start_index, end_index) ⇒ Object
Return a range of values from
start_index
toend_index
. -
#rpoplpush(destination) ⇒ Object
Atomically pops a value from one list, pushes to another and returns the value.
-
#shift(n = nil) ⇒ Object
Remove a member from the start of the list.
- #to_s ⇒ Object
-
#unshift(*values) ⇒ Object
Add a member to the start of the list.
-
#values ⇒ Object
(also: #get, #value)
Return all values in the list.
Methods inherited from EnumerableObject
Methods inherited from BaseObject
#allow_expiration, #as_json, #initialize, #redis, #set_expiration, #to_hash, #to_json
Methods included from Helpers::CoreCommands
#exists?, #expire, #expireat, #marshal, #move, #persist, #rename, #renamenx, #serializer, #ttl, #type, #unmarshal
Constructor Details
This class inherits a constructor from Redis::BaseObject
Instance Method Details
#<<(value) ⇒ Object
Works like push. Can chain together: list << ‘a’ << ‘b’
10 11 12 13 |
# File 'lib/redis/list.rb', line 10 def <<(value) push(value) # marshal in push() self # for << 'a' << 'b' end |
#==(x) ⇒ Object
152 153 154 |
# File 'lib/redis/list.rb', line 152 def ==(x) values == x end |
#[](index, length = nil) ⇒ Object Also known as: slice
Same functionality as Ruby arrays. If a single number is given, return just the element at that index using Redis: LINDEX. Otherwise, return a range of values using Redis: LRANGE.
89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/redis/list.rb', line 89 def [](index, length=nil) if index.is_a? Range range(index.first, index.max) elsif length case length <=> 0 when 1 then range(index, index + length - 1) when 0 then [] when -1 then nil # Ruby does this (a bit weird) end else at(index) end end |
#[]=(index, value) ⇒ Object
Same functionality as Ruby arrays.
105 106 107 108 109 |
# File 'lib/redis/list.rb', line 105 def []=(index, value) allow_expiration do redis.lset(key, index, marshal(value)) end end |
#at(index) ⇒ Object
Return the value at the given index. Can also use familiar list syntax. Redis: LINDEX
127 128 129 |
# File 'lib/redis/list.rb', line 127 def at(index) unmarshal redis.lindex(key, index) end |
#delete(name, count = 0) ⇒ Object
Delete the element(s) from the list that match name. If count is specified, only the first-N (if positive) or last-N (if negative) will be removed. Use .del to completely delete the entire key. Redis: LREM
115 116 117 |
# File 'lib/redis/list.rb', line 115 def delete(name, count=0) redis.lrem(key, count, marshal(name)) # weird api end |
#empty? ⇒ Boolean
Returns true if there are no elements in the list. Redis: LLEN == 0
148 149 150 |
# File 'lib/redis/list.rb', line 148 def empty? length == 0 end |
#first ⇒ Object
Return the first element in the list. Redis: LINDEX(0)
132 133 134 |
# File 'lib/redis/list.rb', line 132 def first at(0) end |
#insert(where, pivot, value) ⇒ Object
Add a member before or after pivot in the list. Redis: LINSERT
16 17 18 19 20 |
# File 'lib/redis/list.rb', line 16 def insert(where,pivot,value) allow_expiration do redis.linsert(key,where,marshal(pivot),marshal(value)) end end |
#last ⇒ Object
Return the last element in the list. Redis: LINDEX(-1)
137 138 139 |
# File 'lib/redis/list.rb', line 137 def last at(-1) end |
#length ⇒ Object Also known as: size
Return the length of the list. Aliased as size. Redis: LLEN
142 143 144 |
# File 'lib/redis/list.rb', line 142 def length redis.llen(key) end |
#pop(n = nil) ⇒ Object
Remove a member from the end of the list. Redis: RPOP
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/redis/list.rb', line 32 def pop(n=nil) if n result, = redis.multi do redis.lrange(key, -n, -1) redis.ltrim(key, 0, -n - 1) end unmarshal result else unmarshal redis.rpop(key) end end |
#push(*values) ⇒ Object
Add a member to the end of the list. Redis: RPUSH
23 24 25 26 27 28 29 |
# File 'lib/redis/list.rb', line 23 def push(*values) allow_expiration do count = redis.rpush(key, values.map{|v| marshal(v) }) redis.ltrim(key, -[:maxlength], -1) if [:maxlength] count end end |
#range(start_index, end_index) ⇒ Object
Return a range of values from start_index
to end_index
. Can also use the familiar list Ruby syntax. Redis: LRANGE
121 122 123 |
# File 'lib/redis/list.rb', line 121 def range(start_index, end_index) redis.lrange(key, start_index, end_index).map{|v| unmarshal(v) } end |
#rpoplpush(destination) ⇒ Object
Atomically pops a value from one list, pushes to another and returns the value. Destination can be a String or a Redis::List
list.rpoplpush(destination)
Returns the popped/pushed value.
Redis: RPOPLPUSH
52 53 54 |
# File 'lib/redis/list.rb', line 52 def rpoplpush(destination) unmarshal redis.rpoplpush(key, destination.is_a?(Redis::List) ? destination.key : destination.to_s) end |
#shift(n = nil) ⇒ Object
Remove a member from the start of the list. Redis: LPOP
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/redis/list.rb', line 66 def shift(n=nil) if n result, = redis.multi do redis.lrange(key, 0, n - 1) redis.ltrim(key, n, -1) end unmarshal result else unmarshal redis.lpop(key) end end |
#to_s ⇒ Object
156 157 158 |
# File 'lib/redis/list.rb', line 156 def to_s values.join(', ') end |
#unshift(*values) ⇒ Object
Add a member to the start of the list. Redis: LPUSH
57 58 59 60 61 62 63 |
# File 'lib/redis/list.rb', line 57 def unshift(*values) allow_expiration do count = redis.lpush(key, values.map{|v| marshal(v) }) redis.ltrim(key, 0, [:maxlength] - 1) if [:maxlength] count end end |
#values ⇒ Object Also known as: get, value
Return all values in the list. Redis: LRANGE(0,-1)
79 80 81 82 |
# File 'lib/redis/list.rb', line 79 def values vals = range(0, -1) vals.nil? ? [] : vals end |