fakeredis 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,108 +0,0 @@
1
- module FakeRedis
2
- class Redis
3
- module ListsMethods
4
-
5
- def lindex(key, index)
6
- fail "Not a list" unless @data[key].is_a?(Array)
7
- return unless @data[key]
8
- @data[key][index]
9
- end
10
-
11
- def linsert(key, where, pivot, value)
12
- fail "Not a list" unless @data[key].is_a?(Array)
13
- return unless @data[key]
14
- index = @data[key].index(pivot)
15
- case where
16
- when :before then @data[key].insert(index, value)
17
- when :after then @data[key].insert(index + 1, value)
18
- else raise ArgumentError.new
19
- end
20
- end
21
-
22
- def llen(key)
23
- @data[key] ||= []
24
- fail "Not a list" unless @data[key].is_a?(Array)
25
- @data[key].size
26
- end
27
-
28
- def lpop(key)
29
- return unless @data[key]
30
- fail "Not a list" unless @data[key].is_a?(Array)
31
- @data[key].delete_at(0)
32
- end
33
-
34
- def lpush(key, value)
35
- @data[key] ||= []
36
- fail "Not a list" unless @data[key].is_a?(Array)
37
- @data[key] = [value] + @data[key]
38
- @data[key].size
39
- end
40
-
41
- def lpushx(key, value)
42
- return unless @data[key]
43
- fail "Not a list" unless @data[key].is_a?(Array)
44
- lpush(key, value)
45
- end
46
-
47
- def lrange(key, startidx, endidx)
48
- return unless @data[key]
49
- fail "Not a list" unless @data[key].is_a?(Array)
50
- @data[key][startidx..endidx]
51
- end
52
-
53
- def lrem(key, count, value)
54
- fail "Not a list" unless @data[key].is_a?(Array)
55
- return unless @data[key]
56
- old_size = @data[key].size
57
- if count == 0
58
- @data[key].delete(value)
59
- old_size - @data[key].size
60
- else
61
- array = count > 0 ? @data[key].dup : @data[key].reverse
62
- count.abs.times{ array.delete_at(array.index(value) || array.length) }
63
- @data[key] = count > 0 ? array.dup : array.reverse
64
- old_size - @data[key].size
65
- end
66
- end
67
-
68
- def lset(key, index, value)
69
- fail "Not a list" unless @data[key].is_a?(Array)
70
- return unless @data[key]
71
- raise RuntimeError unless index < @data[key].size
72
- @data[key][index] = value
73
- end
74
-
75
- def ltrim(key, start, stop)
76
- fail "Not a list" unless @data[key].is_a?(Array)
77
- return unless @data[key]
78
- @data[key] = @data[key][start..stop]
79
- end
80
-
81
- def rpop(key)
82
- fail "Not a list" unless @data[key].is_a?(Array)
83
- @data[key].pop
84
- end
85
-
86
- def rpoplpush(key1, key2)
87
- fail "Not a list" unless @data[key1].is_a?(Array)
88
- elem = @data[key1].pop
89
- lpush(key2, elem)
90
- end
91
-
92
- def rpush(key, value)
93
- @data[key] ||= []
94
- fail "Not a list" unless @data[key].is_a?(Array)
95
- @data[key].push(value)
96
- end
97
-
98
- def rpushx(key, value)
99
- return unless @data[key]
100
- fail "Not a list" unless @data[key].is_a?(Array)
101
- rpush(key, value)
102
- end
103
-
104
- end
105
-
106
- include ListsMethods
107
- end
108
- end
@@ -1,65 +0,0 @@
1
- module FakeRedis
2
- class Redis
3
- module ServerMethods
4
-
5
- def bgreriteaof ; end
6
-
7
- def bgsave ; end
8
-
9
- def config_get(param) ; end
10
-
11
- def config_set(param, value) ; end
12
-
13
- def config_resetstat ; end
14
-
15
- def dbsize
16
- @data.keys.count
17
- end
18
-
19
- def debug_object(key)
20
- return @data[key].inspect
21
- end
22
-
23
- def flushdb
24
- @data = {}
25
- @expires = {}
26
- end
27
-
28
- alias flushall flushdb
29
-
30
- def info
31
- server_info = {
32
- "redis_version" => "0.07",
33
- "connected_clients" => "1",
34
- "connected_slaves" => "0",
35
- "used_memory" => "3187",
36
- "changes_since_last_save" => "0",
37
- "last_save_time" => "1237655729",
38
- "total_connections_received" => "1",
39
- "total_commands_processed" => "1",
40
- "uptime_in_seconds" => "36000",
41
- "uptime_in_days" => 0
42
- }
43
- return server_info
44
- end
45
-
46
- def lastsave
47
- Time.now.to_i
48
- end
49
-
50
- def monitor ; end
51
-
52
- def save ; end
53
-
54
- def shutdown ; end
55
-
56
- def slaveof(host, port) ; end
57
-
58
- def sync ; end
59
-
60
- alias reset flushdb
61
- end
62
-
63
- include ServerMethods
64
- end
65
- end
@@ -1,122 +0,0 @@
1
- module FakeRedis
2
- class Redis
3
- module SetsMethods
4
- def sadd(key, value)
5
- fail_unless_set(key)
6
- case set = @data[key]
7
- when nil then @data[key] = Set.new([value.to_s])
8
- when Set then set.add(value.to_s)
9
- end
10
- end
11
-
12
- def scard(key)
13
- fail_unless_set(key)
14
- case set = @data[key]
15
- when nil then 0
16
- when Set then set.size
17
- end
18
- end
19
-
20
- def sdiff(key1, *keys)
21
- [key1, *keys].each { |k| fail_unless_set(k) }
22
- keys = keys.map { |k| @data[k] || Set.new }
23
- keys.inject(@data[key1]) do |memo, set|
24
- memo - set
25
- end.to_a
26
- end
27
-
28
- def sdiffstore(destination, key1, *keys)
29
- fail_unless_set(destination)
30
- result = sdiff(key1, *keys)
31
- @data[destination] = Set.new(result)
32
- end
33
-
34
- def sinter(*keys)
35
- keys.each { |k| fail_unless_set(k) }
36
- return Set.new if keys.any? { |k| @data[k].nil? }
37
- keys = keys.map { |k| @data[k] || Set.new }
38
- keys.inject do |set, key|
39
- set & key
40
- end.to_a
41
- end
42
-
43
- def sinterstore(destination, *keys)
44
- fail_unless_set(destination)
45
- result = sinter(*keys)
46
- @data[destination] = Set.new(result)
47
- end
48
-
49
- def sismember(key, value)
50
- fail_unless_set(key)
51
- case set = @data[key]
52
- when nil then false
53
- when Set then set.include?(value.to_s)
54
- end
55
- end
56
-
57
- def smembers(key)
58
- fail_unless_set(key)
59
- case set = @data[key]
60
- when nil then []
61
- when Set then set.to_a.reverse
62
- end
63
- end
64
-
65
- def smove(source, destination, value)
66
- fail_unless_set(destination)
67
- if elem = self.srem(source, value)
68
- self.sadd(destination, value)
69
- end
70
- end
71
-
72
- def spop(key)
73
- fail_unless_set(key)
74
- elem = srandmember(key)
75
- srem(key, elem)
76
- elem
77
- end
78
-
79
- def srandmember(key)
80
- fail_unless_set(key)
81
- case set = @data[key]
82
- when nil then nil
83
- when Set then set.to_a[rand(set.size)]
84
- end
85
- end
86
-
87
- def srem(key, value)
88
- fail_unless_set(key)
89
- case set = @data[key]
90
- when nil then return
91
- when Set then set.delete(value.to_s)
92
- end
93
- end
94
-
95
- def sunion(*keys)
96
- keys.each { |k| fail_unless_set(k) }
97
- keys = keys.map { |k| @data[k] || Set.new }
98
- keys.inject(Set.new) do |set, key|
99
- set | key
100
- end.to_a
101
- end
102
-
103
- def sunionstore(destination, *keys)
104
- fail_unless_set(destination)
105
- result = sunion(*keys)
106
- @data[destination] = Set.new(result)
107
- end
108
-
109
- private
110
-
111
- def is_a_set?(key)
112
- @data[key].is_a?(Set) || @data[key].nil?
113
- end
114
-
115
- def fail_unless_set(key)
116
- fail "Not a set" unless is_a_set?(key)
117
- end
118
- end
119
-
120
- include SetsMethods
121
- end
122
- end
@@ -1,108 +0,0 @@
1
- module FakeRedis
2
- class Redis
3
- module SortedSetsMethods
4
- class Elem < String
5
- attr_accessor :score
6
- def initialize(str="", score)
7
- super(str)
8
- @score = score
9
- end
10
- def <=>(other)
11
- @score <=> other.score
12
- end
13
- end
14
-
15
- class CustomSortedSet < SortedSet
16
- attr_accessor :indexed_set
17
- def add(o)
18
- super(o)
19
- @indexed_set ||= Set.new
20
- @indexed_set.add(o)
21
- end
22
-
23
- def delete(o)
24
- super(o)
25
- @indexed_set ||= Set.new
26
- @indexed_set.delete(o)
27
- end
28
- end
29
-
30
- def zadd(key, score, value)
31
- fail_unless_sorted_set(key)
32
- case set = @data[key]
33
- when nil then @data[key] = CustomSortedSet.new([Elem.new(value.to_s, score)])
34
- when CustomSortedSet then set.delete(value.to_s) ; set.add(Elem.new(value.to_s, score))
35
- end
36
- end
37
-
38
- def zcard(key)
39
- fail_unless_sorted_set(key)
40
- case set = @data[key]
41
- when nil then 0
42
- when CustomSortedSet then set.size
43
- end
44
- end
45
-
46
- def zcount(key, min, max)
47
- fail_unless_sorted_set(key)
48
- case set = @data[key]
49
- when nil then 0
50
- when CustomSortedSet then set.select{|x| x.score >= min && x.score <= max }.size
51
- end
52
- end
53
-
54
- def zincrby(key, incr, value)
55
- fail_unless_sorted_set(key)
56
- case set = @data[key]
57
- when nil then @data[key] = CustomSortedSet.new([Elem.new(value.to_s, incr)])
58
- when CustomSortedSet then
59
- score = set.to_a.select{|x| x == value.to_s}.first.score
60
- set.delete(value.to_s)
61
- set.add(Elem.new(value.to_s, score+incr))
62
- end
63
- end
64
-
65
- def zrange(key, start, stop)
66
- fail_unless_sorted_set(key)
67
- case set = @data[key]
68
- when nil then []
69
- when CustomSortedSet then set.indexed_set.to_a[start..stop]
70
- end
71
- end
72
-
73
- def zrangescore(key, start, stop)
74
- fail_unless_sorted_set(key)
75
- case set = @data[key]
76
- when nil then []
77
- when CustomSortedSet then set.to_a.reverse[start..stop]
78
- end
79
- end
80
-
81
- def zrank(key, value)
82
- fail_unless_sorted_set(key)
83
- case set = @data[key]
84
- when nil then nil
85
- when CustomSortedSet then set.to_a.index(value)
86
- end
87
- end
88
-
89
- def zscore(key, value)
90
- case set = @data[key]
91
- when nil then 0
92
- when CustomSortedSet then set.to_a.select{|x| x == value.to_s}.first.score
93
- end
94
- end
95
-
96
- private
97
-
98
- def is_a_sorted_set?(key)
99
- @data[key].is_a?(CustomSortedSet) || @data[key].nil?
100
- end
101
-
102
- def fail_unless_sorted_set(key)
103
- fail "Not a sorted set" unless is_a_sorted_set?(key)
104
- end
105
- end
106
- include SortedSetsMethods
107
- end
108
- end
@@ -1,116 +0,0 @@
1
- module FakeRedis
2
- class Redis
3
- module StringsMethods
4
-
5
- def append(key, value)
6
- @data[key] = (@data[key] || "")
7
- @data[key] = @data[key] + value.to_s
8
- end
9
-
10
- def decr(key)
11
- @data[key] = (@data[key] || "0")
12
- @data[key] = (@data[key].to_i - 1).to_s
13
- end
14
-
15
- def decrby(key, by)
16
- @data[key] = (@data[key] || "0")
17
- @data[key] = (@data[key].to_i - by.to_i).to_s
18
- end
19
-
20
- def get(key)
21
- #return if expired?(key)
22
- @data[key]
23
- end
24
-
25
- def getbit(key, offset)
26
- #return if expired?(key)
27
- return unless @data[key]
28
- @data[key].unpack('B8')[0].split("")[offset]
29
- end
30
-
31
- def getrange(key, start, ending)
32
- return unless @data[key]
33
- @data[key][start..ending]
34
- end
35
-
36
- def getset(key, value)
37
- old_value = @data[key]
38
- @data[key] = value
39
- return old_value
40
- end
41
-
42
- def incr(key)
43
- @data[key] = (@data[key] || "0")
44
- @data[key] = (@data[key].to_i + 1).to_s
45
- end
46
-
47
- def incrby(key, by)
48
- @data[key] = (@data[key] || "0")
49
- @data[key] = (@data[key].to_i + by.to_i).to_s
50
- end
51
-
52
- def mget(*keys)
53
- @data.values_at(*keys)
54
- end
55
-
56
- def mapped_mget(*keys)
57
- reply = mget(*keys)
58
- Hash[*keys.zip(reply).flatten]
59
- end
60
-
61
- def mset(*pairs)
62
- pairs.each_slice(2) do |pair|
63
- @data[pair[0].to_s] = pair[1].to_s
64
- end
65
- "OK"
66
- end
67
-
68
- def msetnx(*pairs)
69
- keys = []
70
- pairs.each_with_index{|item, index| keys << item.to_s if index % 2 == 0}
71
- return if keys.any?{|key| @data.key?(key) }
72
- mset(*pairs)
73
- true
74
- end
75
-
76
- def set(key, value)
77
- @data[key] = value.to_s
78
- "OK"
79
- end
80
-
81
- def setbit(key, offset, bit)
82
- return unless @data[key]
83
- old_val = @data[key].unpack('B*')[0].split("")
84
- old_val[offset] = bit.to_s
85
- new_val = ""
86
- old_val.each_slice(8){|b| new_val = new_val + b.join("").to_i(2).chr }
87
- @data[key] = new_val
88
- end
89
-
90
- def setex(key, seconds, value)
91
- @data[key] = value
92
- expire(key, seconds)
93
- end
94
-
95
- def setnx(key, value)
96
- set(key, value) unless @data.key?(key)
97
- end
98
-
99
- def setrange(key, offset, value)
100
- return unless @data[key]
101
- s = @data[key][offset,value.size]
102
- @data[key][s] = value
103
- end
104
-
105
- def strlen(key)
106
- return unless @data[key]
107
- @data[key].size
108
- end
109
-
110
- alias [] get
111
- alias []= set
112
- end
113
-
114
- include StringsMethods
115
- end
116
- end