fakeredis 0.4.2 → 0.4.3

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 88195a8e3e41a553347ff30096fac78a8dcec153
4
+ data.tar.gz: 3ea4aa2ec9ec9857486a503ef8032b2f22562a60
5
+ SHA512:
6
+ metadata.gz: 28fd4cbbe0ec660365112a7b7485c950771a4c8d75c933d0d55afdb3cfbdabdd1fdeba98d687e9050b01fdf2e52e07278b8497a8d0e03ac97f974c0211afaa72
7
+ data.tar.gz: 0c5c519761c03545a014d0822c3c4a32d63ea6ae3bd96f7c7b6e433dd5acf646dec8b195b5675838cd56e3ac6e5320164654318724e8c3e57ee8f53e32a408cd
@@ -5,4 +5,4 @@ rvm:
5
5
  - 2.0.0
6
6
  - ree
7
7
  - jruby
8
- - rbx-19mode
8
+ - rbx
data/Gemfile CHANGED
@@ -3,5 +3,7 @@ source "http://rubygems.org"
3
3
  gem 'rake'
4
4
  gem 'rdoc'
5
5
 
6
+ gem 'rubysl', :platforms => :rbx
7
+
6
8
  # Specify your gem's dependencies in fakeredis.gemspec
7
9
  gemspec
@@ -1,3 +1,3 @@
1
1
  module FakeRedis
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -77,7 +77,7 @@ class Redis
77
77
  end
78
78
 
79
79
  def write(command)
80
- meffod = command.shift
80
+ meffod = command.shift.to_s.downcase.to_sym
81
81
  if respond_to?(meffod)
82
82
  reply = send(meffod, *command)
83
83
  else
@@ -131,7 +131,7 @@ class Redis
131
131
 
132
132
  def info
133
133
  {
134
- "redis_version" => "0.07",
134
+ "redis_version" => "2.6.16",
135
135
  "connected_clients" => "1",
136
136
  "connected_slaves" => "0",
137
137
  "used_memory" => "3187",
@@ -185,7 +185,7 @@ class Redis
185
185
  end
186
186
 
187
187
  def mget(*keys)
188
- raise Redis::CommandError, "wrong number of arguments for 'mget' command" if keys.empty?
188
+ raise_argument_error('mget') if keys.empty?
189
189
  # We work with either an array, or list of arguments
190
190
  keys = keys.first if keys.size == 1
191
191
  data.values_at(*keys)
@@ -212,6 +212,7 @@ class Redis
212
212
  end
213
213
 
214
214
  def hdel(key, field)
215
+ field = field.to_s
215
216
  data_type_check(key, Hash)
216
217
  data[key] && data[key].delete(field)
217
218
  remove_key_for_empty_collection(key)
@@ -224,8 +225,7 @@ class Redis
224
225
  end
225
226
 
226
227
  def keys(pattern = "*")
227
- regexp = Regexp.new(pattern.split("*").map { |r| Regexp.escape(r) }.join(".*"))
228
- data.keys.select { |key| key =~ regexp }
228
+ data.keys.select { |key| File.fnmatch(pattern, key) }
229
229
  end
230
230
 
231
231
  def randomkey
@@ -266,7 +266,18 @@ class Redis
266
266
  def ltrim(key, start, stop)
267
267
  data_type_check(key, Array)
268
268
  return unless data[key]
269
- data[key] = data[key][start..stop]
269
+
270
+ if start < 0 && data[key].count < start.abs
271
+ # Example: we have a list of 3 elements and
272
+ # we give it a ltrim list, -5, -1. This means
273
+ # it should trim to a max of 5. Since 3 < 5
274
+ # we should not touch the list. This is consistent
275
+ # with behavior of real Redis's ltrim with a negative
276
+ # start argument.
277
+ data[key]
278
+ else
279
+ data[key] = data[key][start..stop]
280
+ end
270
281
  end
271
282
 
272
283
  def lindex(key, index)
@@ -281,14 +292,14 @@ class Redis
281
292
  case where
282
293
  when :before then data[key].insert(index, value)
283
294
  when :after then data[key].insert(index + 1, value)
284
- else raise Redis::CommandError, "ERR syntax error"
295
+ else raise_syntax_error
285
296
  end
286
297
  end
287
298
 
288
299
  def lset(key, index, value)
289
300
  data_type_check(key, Array)
290
301
  return unless data[key]
291
- raise(Redis::CommandError, "ERR index out of range") if index >= data[key].size
302
+ raise Redis::CommandError, "ERR index out of range" if index >= data[key].size
292
303
  data[key][index] = value
293
304
  end
294
305
 
@@ -374,6 +385,7 @@ class Redis
374
385
  def sadd(key, value)
375
386
  data_type_check(key, ::Set)
376
387
  value = Array(value)
388
+ raise_argument_error('sadd') if value.empty?
377
389
 
378
390
  result = if data[key]
379
391
  old_set = data[key].dup
@@ -417,6 +429,8 @@ class Redis
417
429
  end
418
430
 
419
431
  def sinter(*keys)
432
+ raise_argument_error('sinter') if keys.empty?
433
+
420
434
  keys.each { |k| data_type_check(k, ::Set) }
421
435
  return ::Set.new if keys.any? { |k| data[k].nil? }
422
436
  keys = keys.map { |k| data[k] || ::Set.new }
@@ -448,7 +462,7 @@ class Redis
448
462
  def sdiff(key1, *keys)
449
463
  [key1, *keys].each { |k| data_type_check(k, ::Set) }
450
464
  keys = keys.map { |k| data[k] || ::Set.new }
451
- keys.inject(data[key1]) do |memo, set|
465
+ keys.inject(data[key1] || Set.new) do |memo, set|
452
466
  memo - set
453
467
  end.to_a
454
468
  end
@@ -467,7 +481,8 @@ class Redis
467
481
 
468
482
  def del(*keys)
469
483
  keys = keys.flatten(1)
470
- raise Redis::CommandError, "ERR wrong number of arguments for 'del' command" if keys.empty?
484
+ raise_argument_error('del') if keys.empty?
485
+
471
486
  old_count = data.keys.size
472
487
  keys.each do |key|
473
488
  data.delete(key)
@@ -510,7 +525,7 @@ class Redis
510
525
  if data.expires.include?(key) && (ttl = data.expires[key].to_i - Time.now.to_i) > 0
511
526
  ttl
512
527
  else
513
- -1
528
+ exists(key) ? -1 : -2
514
529
  end
515
530
  end
516
531
 
@@ -546,16 +561,30 @@ class Redis
546
561
  def hmset(key, *fields)
547
562
  # mapped_hmset gives us [[:k1, "v1", :k2, "v2"]] for `fields`. Fix that.
548
563
  fields = fields[0] if mapped_param?(fields)
549
- raise Redis::CommandError, "ERR wrong number of arguments for HMSET" if fields.empty? || fields.size.odd?
564
+ raise_argument_error('hmset') if fields.empty?
565
+
566
+ is_list_of_arrays = fields.all?{|field| field.instance_of?(Array)}
567
+
568
+ raise_argument_error('hmset') if fields.size.odd? and !is_list_of_arrays
569
+ raise_argument_error('hmset') if is_list_of_arrays and !fields.all?{|field| field.length == 2}
570
+
550
571
  data_type_check(key, Hash)
551
572
  data[key] ||= {}
552
- fields.each_slice(2) do |field|
553
- data[key][field[0].to_s] = field[1].to_s
573
+
574
+ if is_list_of_arrays
575
+ fields.each do |pair|
576
+ data[key][pair[0].to_s] = pair[1].to_s
577
+ end
578
+ else
579
+ fields.each_slice(2) do |field|
580
+ data[key][field[0].to_s] = field[1].to_s
581
+ end
554
582
  end
555
583
  end
556
584
 
557
585
  def hmget(key, *fields)
558
- raise Redis::CommandError, "wrong number of arguments for 'hmget' command" if fields.empty?
586
+ raise_argument_error('hmget') if fields.empty?
587
+
559
588
  data_type_check(key, Hash)
560
589
  fields.map do |field|
561
590
  field = field.to_s
@@ -581,8 +610,9 @@ class Redis
581
610
 
582
611
  def hincrby(key, field, increment)
583
612
  data_type_check(key, Hash)
613
+ field = field.to_s
584
614
  if data[key]
585
- data[key][field] = (data[key][field.to_s].to_i + increment.to_i).to_s
615
+ data[key][field] = (data[key][field].to_i + increment.to_i).to_s
586
616
  else
587
617
  data[key] = { field => increment.to_s }
588
618
  end
@@ -592,7 +622,7 @@ class Redis
592
622
  def hexists(key, field)
593
623
  data_type_check(key, Hash)
594
624
  return false unless data[key]
595
- data[key].key?(field)
625
+ data[key].key?(field.to_s)
596
626
  end
597
627
 
598
628
  def sync ; end
@@ -625,6 +655,7 @@ class Redis
625
655
  def setex(key, seconds, value)
626
656
  data[key] = value.to_s
627
657
  expire(key, seconds)
658
+ "OK"
628
659
  end
629
660
 
630
661
  def setrange(key, offset, value)
@@ -636,6 +667,10 @@ class Redis
636
667
  def mset(*pairs)
637
668
  # Handle pairs for mapped_mset command
638
669
  pairs = pairs[0] if mapped_param?(pairs)
670
+ raise_argument_error('mset') if pairs.empty? || pairs.size == 1
671
+ # We have to reply with a different error message here to be consistent with redis-rb 3.0.6 / redis-server 2.8.1
672
+ raise_argument_error("mset", "mset_odd") if pairs.size.odd?
673
+
639
674
  pairs.each_slice(2) do |pair|
640
675
  data[pair[0].to_s] = pair[1].to_s
641
676
  end
@@ -680,6 +715,7 @@ class Redis
680
715
  case data[key]
681
716
  when nil then "none"
682
717
  when String then "string"
718
+ when ZSet then "zset"
683
719
  when Hash then "hash"
684
720
  when Array then "list"
685
721
  when ::Set then "set"
@@ -713,20 +749,20 @@ class Redis
713
749
  def zadd(key, *args)
714
750
  if !args.first.is_a?(Array)
715
751
  if args.size < 2
716
- raise Redis::CommandError, "ERR wrong number of arguments for 'zadd' command"
752
+ raise_argument_error('zadd')
717
753
  elsif args.size.odd?
718
- raise Redis::CommandError, "ERR syntax error"
754
+ raise_syntax_error
719
755
  end
720
756
  else
721
757
  unless args.all? {|pair| pair.size == 2 }
722
- raise(Redis::CommandError, "ERR syntax error")
758
+ raise_syntax_error
723
759
  end
724
760
  end
725
761
 
726
762
  data_type_check(key, ZSet)
727
763
  data[key] ||= ZSet.new
728
764
 
729
- if args.size == 2
765
+ if args.size == 2 && !(Array === args.first)
730
766
  score, value = args
731
767
  exists = !data[key].key?(value.to_s)
732
768
  data[key][value.to_s] = score
@@ -746,7 +782,7 @@ class Redis
746
782
  return 0 unless data[key]
747
783
 
748
784
  response = values.map do |v|
749
- data[key].delete(v) if data[key].has_key?(v)
785
+ data[key].delete(v.to_s) if data[key].has_key?(v.to_s)
750
786
  end.compact.size
751
787
 
752
788
  remove_key_for_empty_collection(key)
@@ -780,12 +816,16 @@ class Redis
780
816
 
781
817
  def zrank(key, value)
782
818
  data_type_check(key, ZSet)
783
- data[key].keys.sort_by {|k| data[key][k] }.index(value.to_s)
819
+ z = data[key]
820
+ return unless z
821
+ z.keys.sort_by {|k| z[k] }.index(value.to_s)
784
822
  end
785
823
 
786
824
  def zrevrank(key, value)
787
825
  data_type_check(key, ZSet)
788
- data[key].keys.sort_by {|k| -data[key][k] }.index(value.to_s)
826
+ z = data[key]
827
+ return unless z
828
+ z.keys.sort_by {|k| -z[k] }.index(value.to_s)
789
829
  end
790
830
 
791
831
  def zrange(key, start, stop, with_scores = nil)
@@ -834,6 +874,7 @@ class Redis
834
874
  end
835
875
 
836
876
  def zrevrangebyscore(key, max, min, *opts)
877
+ opts = opts.flatten
837
878
  data_type_check(key, ZSet)
838
879
  return [] unless data[key]
839
880
 
@@ -882,6 +923,19 @@ class Redis
882
923
  end
883
924
 
884
925
  private
926
+ def raise_argument_error(command, match_string=command)
927
+ error_message = if %w(hmset mset_odd).include?(match_string.downcase)
928
+ "ERR wrong number of arguments for #{command.upcase}"
929
+ else
930
+ "ERR wrong number of arguments for '#{command}' command"
931
+ end
932
+
933
+ raise Redis::CommandError, error_message
934
+ end
935
+
936
+ def raise_syntax_error
937
+ raise Redis::CommandError, "ERR syntax error"
938
+ end
885
939
 
886
940
  def remove_key_for_empty_collection(key)
887
941
  del(key) if data[key] && data[key].empty?
@@ -890,7 +944,7 @@ class Redis
890
944
  def data_type_check(key, klass)
891
945
  if data[key] && !data[key].is_a?(klass)
892
946
  warn "Operation against a key holding the wrong kind of value: Expected #{klass} at #{key}."
893
- raise Redis::CommandError.new("ERR Operation against a key holding the wrong kind of value")
947
+ raise Redis::CommandError.new("WRONGTYPE Operation against a key holding the wrong kind of value")
894
948
  end
895
949
  end
896
950
 
@@ -153,5 +153,30 @@ module FakeRedis
153
153
  @client.hvals("key1").should =~ ["val1", "val2"]
154
154
  end
155
155
 
156
+ it "should accept a list of array pairs as arguments and not throw an invalid argument number error" do
157
+ @client.hmset("key1", [:k1, "val1"], [:k2, "val2"], [:k3, "val3"])
158
+ @client.hget("key1", :k1).should be == "val1"
159
+ @client.hget("key1", :k2).should be == "val2"
160
+ @client.hget("key1", :k3).should be == "val3"
161
+ end
162
+
163
+ it "should reject a list of arrays that contain an invalid number of arguments" do
164
+ expect { @client.hmset("key1", [:k1, "val1"], [:k2, "val2", "bogus val"]) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for HMSET")
165
+ end
166
+
167
+ it "should convert a integer field name to string for hdel" do
168
+ @client.hset("key1", "1", 1)
169
+ @client.hdel("key1", 1).should be(1)
170
+ end
171
+
172
+ it "should convert a integer field name to string for hexists" do
173
+ @client.hset("key1", "1", 1)
174
+ @client.hexists("key1", 1).should be_true
175
+ end
176
+
177
+ it "should convert a integer field name to string for hincrby" do
178
+ @client.hset("key1", 1, 0)
179
+ @client.hincrby("key1", 1, 1).should be(1)
180
+ end
156
181
  end
157
182
  end
@@ -58,11 +58,11 @@ module FakeRedis
58
58
  @client.ttl("key1").should be == -1
59
59
  end
60
60
 
61
- it "should not have a ttl if expired" do
61
+ it "should not have a ttl if expired (and thus key does not exist)" do
62
62
  @client.set("key1", "1")
63
63
  @client.expireat("key1", Time.now.to_i)
64
64
 
65
- @client.ttl("key1").should be == -1
65
+ @client.ttl("key1").should be == -2
66
66
  end
67
67
 
68
68
  it "should not find a key if expired" do
@@ -102,7 +102,10 @@ module FakeRedis
102
102
  @client.set("akeyd", "4")
103
103
  @client.set("key1", "5")
104
104
 
105
+ @client.mset("database", 1, "above", 2, "suitability", 3, "able", 4)
106
+
105
107
  @client.keys("key:*").should =~ ["key:a", "key:b", "key:c"]
108
+ @client.keys("ab*").should =~ ["above", "able"]
106
109
  end
107
110
 
108
111
  it "should remove the expiration from a key" do
@@ -147,10 +150,28 @@ module FakeRedis
147
150
  end
148
151
 
149
152
  it "should determine the type stored at key" do
150
- @client.set("key1", "1")
153
+ # Non-existing key
154
+ @client.type("key0").should be == "none"
151
155
 
156
+ # String
157
+ @client.set("key1", "1")
152
158
  @client.type("key1").should be == "string"
153
- @client.type("key0").should be == "none"
159
+
160
+ # List
161
+ @client.lpush("key2", "1")
162
+ @client.type("key2").should be == "list"
163
+
164
+ # Set
165
+ @client.sadd("key3", "1")
166
+ @client.type("key3").should be == "set"
167
+
168
+ # Sorted Set
169
+ @client.zadd("key4", 1.0, "1")
170
+ @client.type("key4").should be == "zset"
171
+
172
+ # Hash
173
+ @client.hset("key5", "a", "1")
174
+ @client.type("key5").should be == "hash"
154
175
  end
155
176
 
156
177
  it "should convert the value into a string before storing" do
@@ -164,6 +185,10 @@ module FakeRedis
164
185
  @client.get("key3").should be == "1"
165
186
  end
166
187
 
188
+ it "should return 'OK' for the setex command" do
189
+ @client.setex("key4", 30, 1).should be == "OK"
190
+ end
191
+
167
192
  it "should convert the key into a string before storing" do
168
193
  @client.set(123, "foo")
169
194
  @client.keys.should include("123")
@@ -180,12 +205,12 @@ module FakeRedis
180
205
 
181
206
  it "should only operate against keys containing string values" do
182
207
  @client.sadd("key1", "one")
183
- lambda { @client.get("key1") }.should raise_error(Redis::CommandError, "ERR Operation against a key holding the wrong kind of value")
184
- lambda { @client.getset("key1", 1) }.should raise_error(Redis::CommandError, "ERR Operation against a key holding the wrong kind of value")
208
+ lambda { @client.get("key1") }.should raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
209
+ lambda { @client.getset("key1", 1) }.should raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
185
210
 
186
211
  @client.hset("key2", "one", "two")
187
- lambda { @client.get("key2") }.should raise_error(Redis::CommandError, "ERR Operation against a key holding the wrong kind of value")
188
- lambda { @client.getset("key2", 1) }.should raise_error(Redis::CommandError, "ERR Operation against a key holding the wrong kind of value")
212
+ lambda { @client.get("key2") }.should raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
213
+ lambda { @client.getset("key2", 1) }.should raise_error(Redis::CommandError, "WRONGTYPE Operation against a key holding the wrong kind of value")
189
214
  end
190
215
 
191
216
  it "should move a key from one database to another successfully" do
@@ -123,6 +123,39 @@ module FakeRedis
123
123
  @client.lrange("key1", 0, -1).should be == ["two", "three"]
124
124
  end
125
125
 
126
+
127
+ context "when the list is smaller than the requested trim" do
128
+ before { @client.rpush("listOfOne", "one") }
129
+
130
+ context "trimming with a negative start (specifying a max)" do
131
+ before { @client.ltrim("listOfOne", -5, -1) }
132
+
133
+ it "returns the unmodified list" do
134
+ @client.lrange("listOfOne", 0, -1).should be == ["one"]
135
+ end
136
+ end
137
+ end
138
+
139
+ context "when the list is larger than the requested trim" do
140
+ before do
141
+ @client.rpush("maxTest", "one")
142
+ @client.rpush("maxTest", "two")
143
+ @client.rpush("maxTest", "three")
144
+ @client.rpush("maxTest", "four")
145
+ @client.rpush("maxTest", "five")
146
+ @client.rpush("maxTest", "six")
147
+ end
148
+
149
+ context "trimming with a negative start (specifying a max)" do
150
+ before { @client.ltrim("maxTest", -5, -1) }
151
+
152
+ it "should trim a list to the specified maximum size" do
153
+ @client.lrange("maxTest", 0, -1).should be == ["two","three", "four", "five", "six"]
154
+ end
155
+ end
156
+ end
157
+
158
+
126
159
  it "should remove and return the last element in a list" do
127
160
  @client.rpush("key1", "one")
128
161
  @client.rpush("key1", "two")
@@ -13,6 +13,13 @@ module FakeRedis
13
13
  @client.smembers("key").should be == ["value"]
14
14
  end
15
15
 
16
+ it "should raise error if command arguments count is not enough" do
17
+ expect { @client.sadd("key", []) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'sadd' command")
18
+ expect { @client.sinter(*[]) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'sinter' command")
19
+
20
+ @client.smembers("key").should be_empty
21
+ end
22
+
16
23
  it "should add multiple members to a set" do
17
24
  @client.sadd("key", %w(value other something more)).should be == 4
18
25
  @client.sadd("key", %w(and additional values)).should be == 3
@@ -39,6 +46,13 @@ module FakeRedis
39
46
  @client.sdiff("key1", "key2", "key3").should =~ ["b", "d"]
40
47
  end
41
48
 
49
+ it "should subtract from a nonexistent set" do
50
+ @client.sadd("key2", "a")
51
+ @client.sadd("key2", "b")
52
+
53
+ @client.sdiff("key1", "key2").should == []
54
+ end
55
+
42
56
  it "should subtract multiple sets and store the resulting set in a key" do
43
57
  @client.sadd("key1", "a")
44
58
  @client.sadd("key1", "b")
@@ -44,6 +44,10 @@ module FakeRedis
44
44
  @client.zscore("key", "val2").should be == 2
45
45
  @client.zscore("key", "val3").should be == 3
46
46
  @client.zscore("key", "val4").should be == 4
47
+
48
+ @client.zadd("key", [[5, "val5"], [3, "val6"]]).should be == 2
49
+ @client.zscore("key", "val5").should be == 5
50
+ @client.zscore("key", "val6").should be == 3
47
51
  end
48
52
 
49
53
  it "should error with wrong number of arguments when adding members" do
@@ -178,10 +182,10 @@ module FakeRedis
178
182
  @client.zrevrangebyscore("key", 100, 0).should be == ["three", "two", "one"]
179
183
  @client.zrevrangebyscore("key", 2, 1).should be == ["two", "one"]
180
184
  @client.zrevrangebyscore("key", 1, 2).should be == []
181
- @client.zrevrangebyscore("key", 2, 1, :with_scores => true).should be == [["two", 2], ["one", 1]]
185
+ @client.zrevrangebyscore("key", 2, 1, :with_scores => true).should be == [["two", 2.0], ["one", 1.0]]
182
186
  @client.zrevrangebyscore("key", 100, 0, :limit => [0, 1]).should be == ["three"]
183
187
  @client.zrevrangebyscore("key", 100, 0, :limit => [0, -1]).should be == ["three", "two", "one"]
184
- @client.zrevrangebyscore("key", 100, 0, :limit => [1, -1], :with_scores => true).should be == [["two", 2], ["one", 1]]
188
+ @client.zrevrangebyscore("key", 100, 0, :limit => [1, -1], :with_scores => true).should be == [["two", 2.0], ["one", 1.0]]
185
189
  end
186
190
 
187
191
  it "should determine the index of a member in a sorted set" do
@@ -202,6 +206,14 @@ module FakeRedis
202
206
  @client.zrevrank("key", "four").should be_nil
203
207
  end
204
208
 
209
+ it "should not raise errors for zrank() on accessing a non-existing key in a sorted set" do
210
+ @client.zrank("no_such_key", "no_suck_id").should be_nil
211
+ end
212
+
213
+ it "should not raise errors for zrevrank() on accessing a non-existing key in a sorted set" do
214
+ @client.zrevrank("no_such_key", "no_suck_id").should be_nil
215
+ end
216
+
205
217
  describe "#zinterstore" do
206
218
  before do
207
219
  @client.zadd("key1", 1, "one")
@@ -409,5 +421,11 @@ module FakeRedis
409
421
  #it "should get the score associated with the given member in a sorted set"
410
422
 
411
423
  #it "should add multiple sorted sets and store the resulting sorted set in a new key"
424
+
425
+ it "zrem should remove members add by zadd" do
426
+ @client.zadd("key1", 1, 3)
427
+ @client.zrem("key1", 3)
428
+ @client.zscore("key1", 3).should be_nil
429
+ end
412
430
  end
413
431
  end
@@ -158,6 +158,15 @@ module FakeRedis
158
158
  @client.get("key2").should be == "value2"
159
159
  end
160
160
 
161
+ it "should raise error if command arguments count is wrong" do
162
+ expect { @client.mset }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'mset' command")
163
+ expect { @client.mset(:key1) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for 'mset' command")
164
+ expect { @client.mset(:key1, "value", :key2) }.to raise_error(Redis::CommandError, "ERR wrong number of arguments for MSET")
165
+
166
+ @client.get("key1").should be_nil
167
+ @client.get("key2").should be_nil
168
+ end
169
+
161
170
  it "should set multiple keys to multiple values, only if none of the keys exist" do
162
171
  @client.msetnx(:key1, "value1", :key2, "value2").should be == true
163
172
  @client.msetnx(:key1, "value3", :key2, "value4").should be == false
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ module FakeRedis
4
+ describe "UPCASE method name will call downcase method" do
5
+
6
+ before do
7
+ @client = Redis.new
8
+ end
9
+
10
+ it "#ZCOUNT" do
11
+ @client.ZCOUNT("key", 2, 3).should == @client.zcount("key", 2, 3)
12
+ end
13
+
14
+ it "#ZSCORE" do
15
+ @client.ZSCORE("key", 2).should == @client.zscore("key", 2)
16
+ end
17
+ end
18
+ end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fakeredis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
5
- prerelease:
4
+ version: 0.4.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Guillermo Iguaran
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-28 00:00:00.000000000 Z
11
+ date: 2013-12-14 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,17 +27,15 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 2.0.0
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 2.0.0
46
41
  description: Fake (In-memory) driver for redis-rb. Useful for testing environment
@@ -80,30 +75,30 @@ files:
80
75
  - spec/spec_helper_live_redis.rb
81
76
  - spec/strings_spec.rb
82
77
  - spec/transactions_spec.rb
78
+ - spec/upcase_method_name_spec.rb
83
79
  homepage: https://guilleiguaran.github.com/fakeredis
84
80
  licenses:
85
81
  - MIT
82
+ metadata: {}
86
83
  post_install_message:
87
84
  rdoc_options: []
88
85
  require_paths:
89
86
  - lib
90
87
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
88
  requirements:
93
- - - ! '>='
89
+ - - '>='
94
90
  - !ruby/object:Gem::Version
95
91
  version: '0'
96
92
  required_rubygems_version: !ruby/object:Gem::Requirement
97
- none: false
98
93
  requirements:
99
- - - ! '>='
94
+ - - '>='
100
95
  - !ruby/object:Gem::Version
101
96
  version: '0'
102
97
  requirements: []
103
98
  rubyforge_project:
104
- rubygems_version: 1.8.23
99
+ rubygems_version: 2.0.14
105
100
  signing_key:
106
- specification_version: 3
101
+ specification_version: 4
107
102
  summary: Fake (In-memory) driver for redis-rb.
108
103
  test_files:
109
104
  - spec/compatibility_spec.rb
@@ -118,3 +113,4 @@ test_files:
118
113
  - spec/spec_helper_live_redis.rb
119
114
  - spec/strings_spec.rb
120
115
  - spec/transactions_spec.rb
116
+ - spec/upcase_method_name_spec.rb