fakeredis 0.5.0 → 0.6.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +16 -5
- data/LICENSE +1 -1
- data/README.md +18 -2
- data/fakeredis.gemspec +1 -1
- data/gemfiles/redisrb-master.gemfile +14 -0
- data/lib/fakeredis/bitop_command.rb +56 -0
- data/lib/fakeredis/expiring_hash.rb +1 -1
- data/lib/fakeredis/minitest.rb +24 -0
- data/lib/fakeredis/rspec.rb +1 -0
- data/lib/fakeredis/sort_method.rb +3 -2
- data/lib/fakeredis/transaction_commands.rb +1 -1
- data/lib/fakeredis/version.rb +1 -1
- data/lib/fakeredis/zset.rb +7 -1
- data/lib/redis/connection/memory.rb +424 -38
- data/spec/bitop_command_spec.rb +209 -0
- data/spec/compatibility_spec.rb +1 -1
- data/spec/connection_spec.rb +20 -20
- data/spec/hashes_spec.rb +123 -57
- data/spec/keys_spec.rb +197 -80
- data/spec/lists_spec.rb +61 -34
- data/spec/memory_spec.rb +60 -7
- data/spec/server_spec.rb +24 -24
- data/spec/sets_spec.rb +95 -46
- data/spec/sort_method_spec.rb +6 -0
- data/spec/sorted_sets_spec.rb +288 -150
- data/spec/spec_helper.rb +1 -0
- data/spec/strings_spec.rb +83 -78
- data/spec/subscription_spec.rb +107 -0
- data/spec/support/shared_examples/bitwise_operation.rb +59 -0
- data/spec/support/shared_examples/sortable.rb +20 -16
- data/spec/transactions_spec.rb +20 -12
- data/spec/upcase_method_name_spec.rb +2 -2
- metadata +14 -5
data/spec/spec_helper.rb
CHANGED
data/spec/strings_spec.rb
CHANGED
@@ -13,42 +13,42 @@ module FakeRedis
|
|
13
13
|
@client.set("key1", "Hello")
|
14
14
|
@client.append("key1", " World")
|
15
15
|
|
16
|
-
@client.get("key1").
|
16
|
+
expect(@client.get("key1")).to eq("Hello World")
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should decrement the integer value of a key by one" do
|
20
20
|
@client.set("counter", "1")
|
21
21
|
@client.decr("counter")
|
22
22
|
|
23
|
-
@client.get("counter").
|
23
|
+
expect(@client.get("counter")).to eq("0")
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should decrement the integer value of a key by the given number" do
|
27
27
|
@client.set("counter", "10")
|
28
28
|
@client.decrby("counter", "5")
|
29
29
|
|
30
|
-
@client.get("counter").
|
30
|
+
expect(@client.get("counter")).to eq("5")
|
31
31
|
end
|
32
32
|
|
33
33
|
it "should get the value of a key" do
|
34
|
-
@client.get("key2").
|
34
|
+
expect(@client.get("key2")).to eq(nil)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should returns the bit value at offset in the string value stored at key" do
|
38
38
|
@client.set("key1", "a")
|
39
39
|
|
40
|
-
@client.getbit("key1", 1).
|
41
|
-
@client.getbit("key1", 2).
|
42
|
-
@client.getbit("key1", 3).
|
43
|
-
@client.getbit("key1", 4).
|
44
|
-
@client.getbit("key1", 5).
|
45
|
-
@client.getbit("key1", 6).
|
46
|
-
@client.getbit("key1", 7).
|
40
|
+
expect(@client.getbit("key1", 1)).to eq(1)
|
41
|
+
expect(@client.getbit("key1", 2)).to eq(1)
|
42
|
+
expect(@client.getbit("key1", 3)).to eq(0)
|
43
|
+
expect(@client.getbit("key1", 4)).to eq(0)
|
44
|
+
expect(@client.getbit("key1", 5)).to eq(0)
|
45
|
+
expect(@client.getbit("key1", 6)).to eq(0)
|
46
|
+
expect(@client.getbit("key1", 7)).to eq(1)
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should allow direct bit manipulation even if the string isn't set" do
|
50
50
|
@client.setbit("key1", 10, 1)
|
51
|
-
@client.getbit("key1", 10).
|
51
|
+
expect(@client.getbit("key1", 10)).to eq(1)
|
52
52
|
end
|
53
53
|
|
54
54
|
context 'when a bit is previously set to 0' do
|
@@ -78,80 +78,86 @@ module FakeRedis
|
|
78
78
|
it "should get a substring of the string stored at a key" do
|
79
79
|
@client.set("key1", "This a message")
|
80
80
|
|
81
|
-
@client.getrange("key1", 0, 3).
|
82
|
-
@client.substr("key1", 0, 3).
|
81
|
+
expect(@client.getrange("key1", 0, 3)).to eq("This")
|
82
|
+
expect(@client.substr("key1", 0, 3)).to eq("This")
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should set the string value of a key and return its old value" do
|
86
86
|
@client.set("key1","value1")
|
87
87
|
|
88
|
-
@client.getset("key1", "value2").
|
89
|
-
@client.get("key1").
|
88
|
+
expect(@client.getset("key1", "value2")).to eq("value1")
|
89
|
+
expect(@client.get("key1")).to eq("value2")
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should return nil for #getset if the key does not exist when setting" do
|
93
|
-
@client.getset("key1", "value1").
|
94
|
-
@client.get("key1").
|
93
|
+
expect(@client.getset("key1", "value1")).to eq(nil)
|
94
|
+
expect(@client.get("key1")).to eq("value1")
|
95
95
|
end
|
96
96
|
|
97
97
|
it "should increment the integer value of a key by one" do
|
98
98
|
@client.set("counter", "1")
|
99
|
-
@client.incr("counter").
|
99
|
+
expect(@client.incr("counter")).to eq(2)
|
100
100
|
|
101
|
-
@client.get("counter").
|
101
|
+
expect(@client.get("counter")).to eq("2")
|
102
102
|
end
|
103
103
|
|
104
104
|
it "should not change the expire value of the key during incr" do
|
105
105
|
@client.set("counter", "1")
|
106
|
-
@client.expire("counter", 600).
|
107
|
-
@client.ttl("counter").
|
108
|
-
@client.incr("counter").
|
109
|
-
@client.ttl("counter").
|
106
|
+
expect(@client.expire("counter", 600)).to be true
|
107
|
+
expect(@client.ttl("counter")).to eq(600)
|
108
|
+
expect(@client.incr("counter")).to eq(2)
|
109
|
+
expect(@client.ttl("counter")).to eq(600)
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should decrement the integer value of a key by one" do
|
113
113
|
@client.set("counter", "1")
|
114
|
-
@client.decr("counter").
|
114
|
+
expect(@client.decr("counter")).to eq(0)
|
115
115
|
|
116
|
-
@client.get("counter").
|
116
|
+
expect(@client.get("counter")).to eq("0")
|
117
117
|
end
|
118
118
|
|
119
119
|
it "should not change the expire value of the key during decr" do
|
120
120
|
@client.set("counter", "2")
|
121
|
-
@client.expire("counter", 600).
|
122
|
-
@client.ttl("counter").
|
123
|
-
@client.decr("counter").
|
124
|
-
@client.ttl("counter").
|
121
|
+
expect(@client.expire("counter", 600)).to be true
|
122
|
+
expect(@client.ttl("counter")).to eq(600)
|
123
|
+
expect(@client.decr("counter")).to eq(1)
|
124
|
+
expect(@client.ttl("counter")).to eq(600)
|
125
125
|
end
|
126
126
|
|
127
127
|
it "should increment the integer value of a key by the given number" do
|
128
128
|
@client.set("counter", "10")
|
129
|
-
@client.incrby("counter", "5").
|
130
|
-
@client.incrby("counter", 2).
|
131
|
-
@client.get("counter").
|
129
|
+
expect(@client.incrby("counter", "5")).to eq(15)
|
130
|
+
expect(@client.incrby("counter", 2)).to eq(17)
|
131
|
+
expect(@client.get("counter")).to eq("17")
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should increment the float value of a key by the given number" do
|
135
|
+
@client.set("counter", 10.0)
|
136
|
+
expect(@client.incrbyfloat("counter", 2.1)).to eq(12.1)
|
137
|
+
expect(@client.get("counter")).to eq("12.1")
|
132
138
|
end
|
133
139
|
|
134
140
|
it "should not change the expire value of the key during incrby" do
|
135
141
|
@client.set("counter", "1")
|
136
|
-
@client.expire("counter", 600).
|
137
|
-
@client.ttl("counter").
|
138
|
-
@client.incrby("counter", "5").
|
139
|
-
@client.ttl("counter").
|
142
|
+
expect(@client.expire("counter", 600)).to be true
|
143
|
+
expect(@client.ttl("counter")).to eq(600)
|
144
|
+
expect(@client.incrby("counter", "5")).to eq(6)
|
145
|
+
expect(@client.ttl("counter")).to eq(600)
|
140
146
|
end
|
141
147
|
|
142
148
|
it "should decrement the integer value of a key by the given number" do
|
143
149
|
@client.set("counter", "10")
|
144
|
-
@client.decrby("counter", "5").
|
145
|
-
@client.decrby("counter", 2).
|
146
|
-
@client.get("counter").
|
150
|
+
expect(@client.decrby("counter", "5")).to eq(5)
|
151
|
+
expect(@client.decrby("counter", 2)).to eq(3)
|
152
|
+
expect(@client.get("counter")).to eq("3")
|
147
153
|
end
|
148
154
|
|
149
155
|
it "should not change the expire value of the key during decrby" do
|
150
156
|
@client.set("counter", "8")
|
151
|
-
@client.expire("counter", 600).
|
152
|
-
@client.ttl("counter").
|
153
|
-
@client.decrby("counter", "3").
|
154
|
-
@client.ttl("counter").
|
157
|
+
expect(@client.expire("counter", 600)).to be true
|
158
|
+
expect(@client.ttl("counter")).to eq(600)
|
159
|
+
expect(@client.decrby("counter", "3")).to eq(5)
|
160
|
+
expect(@client.ttl("counter")).to eq(600)
|
155
161
|
end
|
156
162
|
|
157
163
|
it "should get the values of all the given keys" do
|
@@ -159,29 +165,29 @@ module FakeRedis
|
|
159
165
|
@client.set("key2", "value2")
|
160
166
|
@client.set("key3", "value3")
|
161
167
|
|
162
|
-
@client.mget("key1", "key2", "key3").
|
163
|
-
@client.mget(["key1", "key2", "key3"]).
|
168
|
+
expect(@client.mget("key1", "key2", "key3")).to eq(["value1", "value2", "value3"])
|
169
|
+
expect(@client.mget(["key1", "key2", "key3"])).to eq(["value1", "value2", "value3"])
|
164
170
|
end
|
165
171
|
|
166
172
|
it "returns nil for non existent keys" do
|
167
173
|
@client.set("key1", "value1")
|
168
174
|
@client.set("key3", "value3")
|
169
175
|
|
170
|
-
@client.mget("key1", "key2", "key3", "key4").
|
171
|
-
@client.mget(["key1", "key2", "key3", "key4"]).
|
176
|
+
expect(@client.mget("key1", "key2", "key3", "key4")).to eq(["value1", nil, "value3", nil])
|
177
|
+
expect(@client.mget(["key1", "key2", "key3", "key4"])).to eq(["value1", nil, "value3", nil])
|
172
178
|
end
|
173
179
|
|
174
180
|
it 'raises an argument error when not passed any fields' do
|
175
181
|
@client.set("key3", "value3")
|
176
182
|
|
177
|
-
|
183
|
+
expect { @client.mget }.to raise_error(Redis::CommandError)
|
178
184
|
end
|
179
185
|
|
180
186
|
it "should set multiple keys to multiple values" do
|
181
187
|
@client.mset(:key1, "value1", :key2, "value2")
|
182
188
|
|
183
|
-
@client.get("key1").
|
184
|
-
@client.get("key2").
|
189
|
+
expect(@client.get("key1")).to eq("value1")
|
190
|
+
expect(@client.get("key2")).to eq("value2")
|
185
191
|
end
|
186
192
|
|
187
193
|
it "should raise error if command arguments count is wrong" do
|
@@ -189,51 +195,51 @@ module FakeRedis
|
|
189
195
|
expect { @client.mset(:key1) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'mset' command")
|
190
196
|
expect { @client.mset(:key1, "value", :key2) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for MSET")
|
191
197
|
|
192
|
-
@client.get("key1").
|
193
|
-
@client.get("key2").
|
198
|
+
expect(@client.get("key1")).to be_nil
|
199
|
+
expect(@client.get("key2")).to be_nil
|
194
200
|
end
|
195
201
|
|
196
202
|
it "should set multiple keys to multiple values, only if none of the keys exist" do
|
197
|
-
@client.msetnx(:key1, "value1", :key2, "value2").
|
198
|
-
@client.msetnx(:key1, "value3", :key2, "value4").
|
203
|
+
expect(@client.msetnx(:key1, "value1", :key2, "value2")).to eq(true)
|
204
|
+
expect(@client.msetnx(:key1, "value3", :key2, "value4")).to eq(false)
|
199
205
|
|
200
|
-
@client.get("key1").
|
201
|
-
@client.get("key2").
|
206
|
+
expect(@client.get("key1")).to eq("value1")
|
207
|
+
expect(@client.get("key2")).to eq("value2")
|
202
208
|
end
|
203
209
|
|
204
210
|
it "should set multiple keys to multiple values with a hash" do
|
205
211
|
@client.mapped_mset(:key1 => "value1", :key2 => "value2")
|
206
212
|
|
207
|
-
@client.get("key1").
|
208
|
-
@client.get("key2").
|
213
|
+
expect(@client.get("key1")).to eq("value1")
|
214
|
+
expect(@client.get("key2")).to eq("value2")
|
209
215
|
end
|
210
216
|
|
211
217
|
it "should set multiple keys to multiple values with a hash, only if none of the keys exist" do
|
212
|
-
@client.mapped_msetnx(:key1 => "value1", :key2 => "value2").
|
213
|
-
@client.mapped_msetnx(:key1 => "value3", :key2 => "value4").
|
218
|
+
expect(@client.mapped_msetnx(:key1 => "value1", :key2 => "value2")).to eq(true)
|
219
|
+
expect(@client.mapped_msetnx(:key1 => "value3", :key2 => "value4")).to eq(false)
|
214
220
|
|
215
|
-
@client.get("key1").
|
216
|
-
@client.get("key2").
|
221
|
+
expect(@client.get("key1")).to eq("value1")
|
222
|
+
expect(@client.get("key2")).to eq("value2")
|
217
223
|
end
|
218
224
|
|
219
225
|
it "should set the string value of a key" do
|
220
226
|
@client.set("key1", "1")
|
221
227
|
|
222
|
-
@client.get("key1").
|
228
|
+
expect(@client.get("key1")).to eq("1")
|
223
229
|
end
|
224
230
|
|
225
231
|
it "should sets or clears the bit at offset in the string value stored at key" do
|
226
232
|
@client.set("key1", "abc")
|
227
233
|
@client.setbit("key1", 11, 1)
|
228
234
|
|
229
|
-
@client.get("key1").
|
235
|
+
expect(@client.get("key1")).to eq("arc")
|
230
236
|
end
|
231
237
|
|
232
238
|
it "should set the value and expiration of a key" do
|
233
239
|
@client.setex("key1", 30, "value1")
|
234
240
|
|
235
|
-
@client.get("key1").
|
236
|
-
@client.ttl("key1").
|
241
|
+
expect(@client.get("key1")).to eq("value1")
|
242
|
+
expect(@client.ttl("key1")).to eq(30)
|
237
243
|
end
|
238
244
|
|
239
245
|
it "should set the value of a key, only if the key does not exist" do
|
@@ -241,44 +247,43 @@ module FakeRedis
|
|
241
247
|
@client.setnx("key1", "new value")
|
242
248
|
@client.setnx("key2", "another value")
|
243
249
|
|
244
|
-
@client.get("key1").
|
245
|
-
@client.get("key2").
|
250
|
+
expect(@client.get("key1")).to eq("test value")
|
251
|
+
expect(@client.get("key2")).to eq("another value")
|
246
252
|
end
|
247
253
|
|
248
254
|
it "should overwrite part of a string at key starting at the specified offset" do
|
249
255
|
@client.set("key1", "Hello World")
|
250
256
|
@client.setrange("key1", 6, "Redis")
|
251
257
|
|
252
|
-
@client.get("key1").
|
258
|
+
expect(@client.get("key1")).to eq("Hello Redis")
|
253
259
|
end
|
254
260
|
|
255
261
|
it "should get the length of the value stored in a key" do
|
256
262
|
@client.set("key1", "abc")
|
257
263
|
|
258
|
-
@client.strlen("key1").
|
264
|
+
expect(@client.strlen("key1")).to eq(3)
|
259
265
|
end
|
260
266
|
|
261
267
|
it "should return 0 bits when there's no key" do
|
262
|
-
@client.bitcount("key1").
|
268
|
+
expect(@client.bitcount("key1")).to eq(0)
|
263
269
|
end
|
264
270
|
|
265
271
|
it "should count the number of bits of a string" do
|
266
272
|
@client.set("key1", "foobar")
|
267
|
-
@client.bitcount("key1").
|
273
|
+
expect(@client.bitcount("key1")).to eq(26)
|
268
274
|
end
|
269
275
|
|
270
276
|
it "should count correctly with UTF-8 strings" do
|
271
277
|
@client.set("key1", '判')
|
272
|
-
@client.bitcount("key1").
|
278
|
+
expect(@client.bitcount("key1")).to eq(10)
|
273
279
|
end
|
274
280
|
|
275
281
|
it "should count the number of bits of a string given a range" do
|
276
282
|
@client.set("key1", "foobar")
|
277
283
|
|
278
|
-
@client.bitcount("key1", 0, 0).
|
279
|
-
@client.bitcount("key1", 1, 1).
|
280
|
-
@client.bitcount("key1", 0, 1).
|
284
|
+
expect(@client.bitcount("key1", 0, 0)).to eq(4)
|
285
|
+
expect(@client.bitcount("key1", 1, 1)).to eq(6)
|
286
|
+
expect(@client.bitcount("key1", 0, 1)).to eq(10)
|
281
287
|
end
|
282
|
-
|
283
288
|
end
|
284
289
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'timeout' #Need to use this avoid blocking
|
3
|
+
|
4
|
+
module FakeRedis
|
5
|
+
describe "SubscriptionMethods" do
|
6
|
+
before(:each) do
|
7
|
+
@client = Redis.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context "publish" do
|
11
|
+
it "should add to channels" do
|
12
|
+
@client.publish("channel1", "val1").should be == 0
|
13
|
+
@client.publish("channel1", "val2").should be == 0
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "subscribe" do
|
18
|
+
it "should get all messages from a channel" do
|
19
|
+
@client.publish("channel1", "val1")
|
20
|
+
@client.publish("channel1", "val2")
|
21
|
+
@client.publish("channel2", "val3")
|
22
|
+
|
23
|
+
msgs = []
|
24
|
+
subscribe_sent = unsubscribe_sent = false
|
25
|
+
Timeout.timeout(1) do
|
26
|
+
@client.subscribe("channel1") do |on|
|
27
|
+
on.subscribe do |channel|
|
28
|
+
subscribe_sent = true
|
29
|
+
channel.should be == "channel1"
|
30
|
+
end
|
31
|
+
|
32
|
+
on.message do |channel,msg|
|
33
|
+
channel.should be == "channel1"
|
34
|
+
msgs << msg
|
35
|
+
end
|
36
|
+
|
37
|
+
on.unsubscribe do
|
38
|
+
unsubscribe_sent = true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
msgs.should be == ["val1", "val2"]
|
44
|
+
subscribe_sent.should
|
45
|
+
unsubscribe_sent.should
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should get all messages from multiple channels" do
|
49
|
+
@client.publish("channel1", "val1")
|
50
|
+
@client.publish("channel2", "val2")
|
51
|
+
@client.publish("channel2", "val3")
|
52
|
+
|
53
|
+
msgs = []
|
54
|
+
Timeout.timeout(1) do
|
55
|
+
@client.subscribe("channel1", "channel2") do |on|
|
56
|
+
on.message do |channel,msg|
|
57
|
+
msgs << [channel, msg]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
msgs[0].should be == ["channel1", "val1"]
|
63
|
+
msgs[1].should be == ["channel2", "val2"]
|
64
|
+
msgs[2].should be == ["channel2", "val3"]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "unsubscribe" do
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with patterns" do
|
72
|
+
context "psubscribe" do
|
73
|
+
it "should get all messages using pattern" do
|
74
|
+
@client.publish("channel1", "val1")
|
75
|
+
@client.publish("channel1", "val2")
|
76
|
+
@client.publish("channel2", "val3")
|
77
|
+
|
78
|
+
msgs = []
|
79
|
+
subscribe_sent = unsubscribe_sent = false
|
80
|
+
Timeout.timeout(1) do
|
81
|
+
@client.psubscribe("channel*") do |on|
|
82
|
+
on.psubscribe do |channel|
|
83
|
+
subscribe_sent = true
|
84
|
+
end
|
85
|
+
|
86
|
+
on.pmessage do |pattern,channel,msg|
|
87
|
+
pattern.should be == "channel*"
|
88
|
+
msgs << msg
|
89
|
+
end
|
90
|
+
|
91
|
+
on.punsubscribe do
|
92
|
+
unsubscribe_sent = true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
msgs.should be == ["val1", "val2", "val3"]
|
98
|
+
subscribe_sent.should
|
99
|
+
unsubscribe_sent.should
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "punsubscribe" do
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
shared_examples_for "a bitwise operation" do |operator|
|
2
|
+
it 'raises an argument error when not passed any source keys' do
|
3
|
+
lambda { @client.bitop(operator, "destkey") }.should raise_error(Redis::CommandError)
|
4
|
+
end
|
5
|
+
|
6
|
+
it "should not create destination key if nothing found" do
|
7
|
+
@client.bitop(operator, "dest1", "nothing_here1").should be == 0
|
8
|
+
@client.exists("dest1").should be false
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should accept operator as a case-insensitive symbol" do
|
12
|
+
@client.set("key1", "foobar")
|
13
|
+
@client.bitop(operator.to_s.downcase.to_sym, "dest1", "key1")
|
14
|
+
@client.bitop(operator.to_s.upcase.to_sym, "dest2", "key1")
|
15
|
+
|
16
|
+
@client.get("dest1").should be == "foobar"
|
17
|
+
@client.get("dest2").should be == "foobar"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should accept operator as a case-insensitive string" do
|
21
|
+
@client.set("key1", "foobar")
|
22
|
+
@client.bitop(operator.to_s.downcase, "dest1", "key1")
|
23
|
+
@client.bitop(operator.to_s.upcase, "dest2", "key1")
|
24
|
+
|
25
|
+
@client.get("dest1").should be == "foobar"
|
26
|
+
@client.get("dest2").should be == "foobar"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should copy original string for single key" do
|
30
|
+
@client.set("key1", "foobar")
|
31
|
+
@client.bitop(operator, "dest1", "key1")
|
32
|
+
|
33
|
+
@client.get("dest1").should be == "foobar"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should copy original string for single key" do
|
37
|
+
@client.set("key1", "foobar")
|
38
|
+
@client.bitop(operator, "dest1", "key1")
|
39
|
+
|
40
|
+
@client.get("dest1").should be == "foobar"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return length of the string stored in the destination key" do
|
44
|
+
@client.set("key1", "foobar")
|
45
|
+
@client.set("key2", "baz")
|
46
|
+
|
47
|
+
@client.bitop(operator, "dest1", "key1").should be == 6
|
48
|
+
@client.bitop(operator, "dest2", "key2").should be == 3
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should overwrite previous value with new one" do
|
52
|
+
@client.set("key1", "foobar")
|
53
|
+
@client.set("key2", "baz")
|
54
|
+
@client.bitop(operator, "dest1", "key1")
|
55
|
+
@client.bitop(operator, "dest1", "key2")
|
56
|
+
|
57
|
+
@client.get("dest1").should be == "baz"
|
58
|
+
end
|
59
|
+
end
|