Class: Redis::List

Inherits:
Object
  • Object
show all
Includes:
Enumerable, Helpers::CoreCommands, Helpers::Serialize
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 collapse

Instance Method Summary collapse

Methods included from Helpers::Serialize

#from_redis, #to_redis

Methods included from Helpers::CoreCommands

#exists?, #expire, #expireat, #move, #rename, #renamenx, #type

Constructor Details

#initialize(key, *args) ⇒ List

Returns a new instance of List.



15
16
17
18
19
# File 'lib/redis/list.rb', line 15

def initialize(key, *args)
  @key = key
  @options = args.last.is_a?(Hash) ? args.pop : {}
  @redis = args.first || $redis
end

Instance Attribute Details

#keyObject (readonly)

Returns the value of attribute key.



14
15
16
# File 'lib/redis/list.rb', line 14

def key
  @key
end

#optionsObject (readonly)

Returns the value of attribute options.



14
15
16
# File 'lib/redis/list.rb', line 14

def options
  @options
end

#redisObject (readonly)

Returns the value of attribute redis.



14
15
16
# File 'lib/redis/list.rb', line 14

def redis
  @redis
end

Instance Method Details

#<<(value) ⇒ Object

Works like push. Can chain together: list << ‘a’ << ‘b’



22
23
24
25
# File 'lib/redis/list.rb', line 22

def <<(value)
  push(value)
  self  # for << 'a' << 'b'
end

#==(x) ⇒ Object



113
114
115
# File 'lib/redis/list.rb', line 113

def ==(x)
  values == x
end

#[](index, length = nil) ⇒ Object

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.



56
57
58
59
60
61
62
63
64
# File 'lib/redis/list.rb', line 56

def [](index, length=nil)
  if index.is_a? Range
    range(index.first, index.last)
  elsif length
    range(index, length)
  else
    at(index)
  end
end

#at(index) ⇒ Object

Return the value at the given index. Can also use familiar list syntax. Redis: LINDEX



88
89
90
# File 'lib/redis/list.rb', line 88

def at(index)
  from_redis 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



70
71
72
# File 'lib/redis/list.rb', line 70

def delete(name, count=0)
  redis.lrem(key, count, name)  # weird api
end

#each(&block) ⇒ Object

Iterate through each member of the set. Redis::Objects mixes in Enumerable, so you can also use familiar methods like collect, detect, and so forth.



76
77
78
# File 'lib/redis/list.rb', line 76

def each(&block)
  values.each(&block)
end

#empty?Boolean

Returns true if there are no elements in the list. Redis: LLEN == 0

Returns:

  • (Boolean)


109
110
111
# File 'lib/redis/list.rb', line 109

def empty?
  length == 0
end

#firstObject

Return the first element in the list. Redis: LINDEX(0)



93
94
95
# File 'lib/redis/list.rb', line 93

def first
  at(0)
end

#lastObject

Return the last element in the list. Redis: LINDEX(-1)



98
99
100
# File 'lib/redis/list.rb', line 98

def last
  at(-1)
end

#lengthObject Also known as: size

Return the length of the list. Aliased as size. Redis: LLEN



103
104
105
# File 'lib/redis/list.rb', line 103

def length
  redis.llen(key)
end

#popObject

Remove a member from the end of the list. Redis: RPOP



33
34
35
# File 'lib/redis/list.rb', line 33

def pop
  from_redis redis.rpop(key)
end

#push(value) ⇒ Object

Add a member to the end of the list. Redis: RPUSH



28
29
30
# File 'lib/redis/list.rb', line 28

def push(value)
  redis.rpush(key, to_redis(value))
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



82
83
84
# File 'lib/redis/list.rb', line 82

def range(start_index, end_index)
  from_redis redis.lrange(key, start_index, end_index)
end

#shiftObject

Remove a member from the start of the list. Redis: LPOP



43
44
45
# File 'lib/redis/list.rb', line 43

def shift
  from_redis redis.lpop(key)
end

#to_sObject



117
118
119
# File 'lib/redis/list.rb', line 117

def to_s
  values.join(', ')
end

#unshift(value) ⇒ Object

Add a member to the start of the list. Redis: LPUSH



38
39
40
# File 'lib/redis/list.rb', line 38

def unshift(value)
  redis.lpush(key, to_redis(value))
end

#valuesObject Also known as: get

Return all values in the list. Redis: LRANGE(0,-1)



48
49
50
# File 'lib/redis/list.rb', line 48

def values
  from_redis range(0, -1)
end