mock_redis 0.36.0 → 0.37.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.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +1 -1
  4. data/lib/mock_redis/database.rb +1 -1
  5. data/lib/mock_redis/hash_methods.rb +1 -1
  6. data/lib/mock_redis/list_methods.rb +7 -2
  7. data/lib/mock_redis/multi_db_wrapper.rb +1 -1
  8. data/lib/mock_redis/pipelined_wrapper.rb +12 -14
  9. data/lib/mock_redis/set_methods.rb +6 -1
  10. data/lib/mock_redis/stream.rb +3 -3
  11. data/lib/mock_redis/string_methods.rb +3 -3
  12. data/lib/mock_redis/transaction_wrapper.rb +5 -7
  13. data/lib/mock_redis/utility_methods.rb +4 -2
  14. data/lib/mock_redis/version.rb +1 -1
  15. data/lib/mock_redis/zset.rb +4 -2
  16. data/lib/mock_redis/zset_methods.rb +3 -3
  17. data/lib/mock_redis.rb +1 -2
  18. metadata +19 -360
  19. data/.github/workflows/lint.yml +0 -31
  20. data/.github/workflows/tests.yml +0 -63
  21. data/.gitignore +0 -5
  22. data/.mailmap +0 -2
  23. data/.overcommit.yml +0 -21
  24. data/.rspec +0 -1
  25. data/.rubocop.yml +0 -148
  26. data/.rubocop_todo.yml +0 -35
  27. data/.simplecov +0 -4
  28. data/Gemfile +0 -13
  29. data/Rakefile +0 -2
  30. data/mock_redis.gemspec +0 -32
  31. data/spec/client_spec.rb +0 -36
  32. data/spec/cloning_spec.rb +0 -95
  33. data/spec/commands/append_spec.rb +0 -24
  34. data/spec/commands/auth_spec.rb +0 -7
  35. data/spec/commands/bgrewriteaof_spec.rb +0 -7
  36. data/spec/commands/bgsave_spec.rb +0 -7
  37. data/spec/commands/bitcount_spec.rb +0 -25
  38. data/spec/commands/bitfield_spec.rb +0 -169
  39. data/spec/commands/blmove_spec.rb +0 -52
  40. data/spec/commands/blpop_spec.rb +0 -53
  41. data/spec/commands/brpop_spec.rb +0 -59
  42. data/spec/commands/brpoplpush_spec.rb +0 -52
  43. data/spec/commands/connected_spec.rb +0 -7
  44. data/spec/commands/connection_spec.rb +0 -15
  45. data/spec/commands/dbsize_spec.rb +0 -18
  46. data/spec/commands/decr_spec.rb +0 -34
  47. data/spec/commands/decrby_spec.rb +0 -34
  48. data/spec/commands/del_spec.rb +0 -52
  49. data/spec/commands/disconnect_spec.rb +0 -7
  50. data/spec/commands/dump_spec.rb +0 -19
  51. data/spec/commands/echo_spec.rb +0 -11
  52. data/spec/commands/eval_spec.rb +0 -7
  53. data/spec/commands/evalsha_spec.rb +0 -10
  54. data/spec/commands/exists_spec.rb +0 -43
  55. data/spec/commands/expire_spec.rb +0 -111
  56. data/spec/commands/expireat_spec.rb +0 -47
  57. data/spec/commands/flushall_spec.rb +0 -38
  58. data/spec/commands/flushdb_spec.rb +0 -38
  59. data/spec/commands/future_spec.rb +0 -30
  60. data/spec/commands/geoadd_spec.rb +0 -58
  61. data/spec/commands/geodist_spec.rb +0 -118
  62. data/spec/commands/geohash_spec.rb +0 -52
  63. data/spec/commands/geopos_spec.rb +0 -55
  64. data/spec/commands/get_spec.rb +0 -31
  65. data/spec/commands/getbit_spec.rb +0 -34
  66. data/spec/commands/getdel.rb +0 -24
  67. data/spec/commands/getrange_spec.rb +0 -22
  68. data/spec/commands/getset_spec.rb +0 -23
  69. data/spec/commands/hdel_spec.rb +0 -77
  70. data/spec/commands/hexists_spec.rb +0 -27
  71. data/spec/commands/hget_spec.rb +0 -28
  72. data/spec/commands/hgetall_spec.rb +0 -32
  73. data/spec/commands/hincrby_spec.rb +0 -58
  74. data/spec/commands/hincrbyfloat_spec.rb +0 -58
  75. data/spec/commands/hkeys_spec.rb +0 -19
  76. data/spec/commands/hlen_spec.rb +0 -19
  77. data/spec/commands/hmget_spec.rb +0 -46
  78. data/spec/commands/hmset_spec.rb +0 -69
  79. data/spec/commands/hscan_each_spec.rb +0 -48
  80. data/spec/commands/hscan_spec.rb +0 -27
  81. data/spec/commands/hset_spec.rb +0 -42
  82. data/spec/commands/hsetnx_spec.rb +0 -44
  83. data/spec/commands/hvals_spec.rb +0 -19
  84. data/spec/commands/incr_spec.rb +0 -34
  85. data/spec/commands/incrby_spec.rb +0 -44
  86. data/spec/commands/incrbyfloat_spec.rb +0 -44
  87. data/spec/commands/info_spec.rb +0 -62
  88. data/spec/commands/keys_spec.rb +0 -139
  89. data/spec/commands/lastsave_spec.rb +0 -8
  90. data/spec/commands/lindex_spec.rb +0 -49
  91. data/spec/commands/linsert_spec.rb +0 -68
  92. data/spec/commands/llen_spec.rb +0 -16
  93. data/spec/commands/lmove_spec.rb +0 -72
  94. data/spec/commands/lpop_spec.rb +0 -35
  95. data/spec/commands/lpush_spec.rb +0 -43
  96. data/spec/commands/lpushx_spec.rb +0 -46
  97. data/spec/commands/lrange_spec.rb +0 -51
  98. data/spec/commands/lrem_spec.rb +0 -80
  99. data/spec/commands/lset_spec.rb +0 -43
  100. data/spec/commands/ltrim_spec.rb +0 -45
  101. data/spec/commands/mapped_hmget_spec.rb +0 -29
  102. data/spec/commands/mapped_hmset_spec.rb +0 -47
  103. data/spec/commands/mapped_mget_spec.rb +0 -22
  104. data/spec/commands/mapped_mset_spec.rb +0 -19
  105. data/spec/commands/mapped_msetnx_spec.rb +0 -26
  106. data/spec/commands/mget_spec.rb +0 -65
  107. data/spec/commands/move_spec.rb +0 -147
  108. data/spec/commands/mset_spec.rb +0 -43
  109. data/spec/commands/msetnx_spec.rb +0 -40
  110. data/spec/commands/persist_spec.rb +0 -48
  111. data/spec/commands/pexpire_spec.rb +0 -86
  112. data/spec/commands/pexpireat_spec.rb +0 -48
  113. data/spec/commands/ping_spec.rb +0 -11
  114. data/spec/commands/pipelined_spec.rb +0 -114
  115. data/spec/commands/psetex_spec.rb +0 -44
  116. data/spec/commands/pttl_spec.rb +0 -41
  117. data/spec/commands/quit_spec.rb +0 -7
  118. data/spec/commands/randomkey_spec.rb +0 -20
  119. data/spec/commands/rename_spec.rb +0 -42
  120. data/spec/commands/renamenx_spec.rb +0 -41
  121. data/spec/commands/restore_spec.rb +0 -47
  122. data/spec/commands/rpop_spec.rb +0 -35
  123. data/spec/commands/rpoplpush_spec.rb +0 -50
  124. data/spec/commands/rpush_spec.rb +0 -43
  125. data/spec/commands/rpushx_spec.rb +0 -46
  126. data/spec/commands/sadd_spec.rb +0 -45
  127. data/spec/commands/save_spec.rb +0 -7
  128. data/spec/commands/scan_each_spec.rb +0 -39
  129. data/spec/commands/scan_spec.rb +0 -64
  130. data/spec/commands/scard_spec.rb +0 -18
  131. data/spec/commands/script_spec.rb +0 -9
  132. data/spec/commands/sdiff_spec.rb +0 -47
  133. data/spec/commands/sdiffstore_spec.rb +0 -58
  134. data/spec/commands/select_spec.rb +0 -61
  135. data/spec/commands/set_spec.rb +0 -134
  136. data/spec/commands/setbit_spec.rb +0 -55
  137. data/spec/commands/setex_spec.rb +0 -38
  138. data/spec/commands/setnx_spec.rb +0 -25
  139. data/spec/commands/setrange_spec.rb +0 -30
  140. data/spec/commands/sinter_spec.rb +0 -39
  141. data/spec/commands/sinterstore_spec.rb +0 -53
  142. data/spec/commands/sismember_spec.rb +0 -29
  143. data/spec/commands/smembers_spec.rb +0 -28
  144. data/spec/commands/smismember_spec.rb +0 -34
  145. data/spec/commands/smove_spec.rb +0 -41
  146. data/spec/commands/sort_list_spec.rb +0 -21
  147. data/spec/commands/sort_set_spec.rb +0 -21
  148. data/spec/commands/sort_zset_spec.rb +0 -21
  149. data/spec/commands/spop_spec.rb +0 -40
  150. data/spec/commands/srandmember_spec.rb +0 -49
  151. data/spec/commands/srem_spec.rb +0 -45
  152. data/spec/commands/sscan_each_spec.rb +0 -48
  153. data/spec/commands/sscan_spec.rb +0 -39
  154. data/spec/commands/strlen_spec.rb +0 -18
  155. data/spec/commands/sunion_spec.rb +0 -42
  156. data/spec/commands/sunionstore_spec.rb +0 -59
  157. data/spec/commands/ttl_spec.rb +0 -40
  158. data/spec/commands/type_spec.rb +0 -36
  159. data/spec/commands/unwatch_spec.rb +0 -7
  160. data/spec/commands/watch_spec.rb +0 -21
  161. data/spec/commands/xadd_spec.rb +0 -122
  162. data/spec/commands/xlen_spec.rb +0 -22
  163. data/spec/commands/xrange_spec.rb +0 -164
  164. data/spec/commands/xread_spec.rb +0 -66
  165. data/spec/commands/xrevrange_spec.rb +0 -130
  166. data/spec/commands/xtrim_spec.rb +0 -36
  167. data/spec/commands/zadd_spec.rb +0 -129
  168. data/spec/commands/zcard_spec.rb +0 -19
  169. data/spec/commands/zcount_spec.rb +0 -39
  170. data/spec/commands/zincrby_spec.rb +0 -31
  171. data/spec/commands/zinterstore_spec.rb +0 -130
  172. data/spec/commands/zpopmax_spec.rb +0 -60
  173. data/spec/commands/zpopmin_spec.rb +0 -60
  174. data/spec/commands/zrange_spec.rb +0 -80
  175. data/spec/commands/zrangebyscore_spec.rb +0 -83
  176. data/spec/commands/zrank_spec.rb +0 -29
  177. data/spec/commands/zrem_spec.rb +0 -50
  178. data/spec/commands/zremrangebyrank_spec.rb +0 -27
  179. data/spec/commands/zremrangebyscore_spec.rb +0 -35
  180. data/spec/commands/zrevrange_spec.rb +0 -56
  181. data/spec/commands/zrevrangebyscore_spec.rb +0 -58
  182. data/spec/commands/zrevrank_spec.rb +0 -29
  183. data/spec/commands/zscan_each_spec.rb +0 -48
  184. data/spec/commands/zscan_spec.rb +0 -26
  185. data/spec/commands/zscore_spec.rb +0 -22
  186. data/spec/commands/zunionstore_spec.rb +0 -137
  187. data/spec/mock_redis_spec.rb +0 -93
  188. data/spec/spec_helper.rb +0 -74
  189. data/spec/support/redis_multiplexer.rb +0 -123
  190. data/spec/support/shared_examples/does_not_cleanup_empty_strings.rb +0 -14
  191. data/spec/support/shared_examples/only_operates_on_hashes.rb +0 -15
  192. data/spec/support/shared_examples/only_operates_on_lists.rb +0 -15
  193. data/spec/support/shared_examples/only_operates_on_sets.rb +0 -15
  194. data/spec/support/shared_examples/only_operates_on_strings.rb +0 -13
  195. data/spec/support/shared_examples/only_operates_on_zsets.rb +0 -59
  196. data/spec/support/shared_examples/sorts_enumerables.rb +0 -56
  197. data/spec/transactions_spec.rb +0 -163
@@ -1,30 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe MockRedis::Future do
4
- let(:command) { [:get, 'foo'] }
5
- let(:result) { 'bar' }
6
- let(:block) { ->(value) { value.upcase } }
7
-
8
- before do
9
- @future = MockRedis::Future.new(command)
10
- @future2 = MockRedis::Future.new(command, block)
11
- end
12
-
13
- it 'remembers the command' do
14
- @future.command.should eq(command)
15
- end
16
-
17
- it 'raises an error if the value is requested before the result is set' do
18
- expect { @future.value }.to raise_error(MockRedis::FutureNotReady)
19
- end
20
-
21
- it 'returns the value after the result has been set' do
22
- @future.store_result(result)
23
- @future.value.should eq(result)
24
- end
25
-
26
- it 'executes the block on the value if block is passed in' do
27
- @future2.store_result(result)
28
- @future2.value.should eq('BAR')
29
- end
30
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#geoadd' do
4
- let(:key) { 'cities' }
5
-
6
- context 'with valid points' do
7
- let(:san_francisco) { [-122.5076404, 37.757815, 'SF'] }
8
- let(:los_angeles) { [-118.6919259, 34.0207305, 'LA'] }
9
- let(:expected_result) do
10
- [['LA', 1.364461589564902e+15], ['SF', 1.367859319053696e+15]]
11
- end
12
-
13
- before { @redises.geoadd(key, *san_francisco, *los_angeles) }
14
-
15
- after { @redises.zrem(key, %w[SF LA]) }
16
-
17
- it 'adds members to ZSET' do
18
- cities = @redises.zrange(key, 0, -1, with_scores: true)
19
- expect(cities).to be == expected_result
20
- end
21
- end
22
-
23
- context 'with invalud points' do
24
- context 'when number of arguments wrong' do
25
- let(:message) { "ERR wrong number of arguments for 'geoadd' command" }
26
-
27
- it 'raises Redis::CommandError' do
28
- expect { @redises.geoadd(key, 1, 1) }
29
- .to raise_error(Redis::CommandError, message)
30
- end
31
- end
32
-
33
- context 'when coordinates are not in allowed range' do
34
- let(:coords) { [181, 86] }
35
- let(:message) do
36
- formatted_coords = coords.map { |c| format('%<coords>.6f', coords: c) }
37
- "ERR invalid longitude,latitude pair #{formatted_coords.join(',')}"
38
- end
39
-
40
- after { @redises.zrem(key, 'SF') }
41
-
42
- it 'raises Redis::CommandError' do
43
- expect { @redises.geoadd(key, *coords, 'SF') }
44
- .to raise_error(Redis::CommandError, message)
45
- end
46
- end
47
-
48
- context 'when coordinates are not valid floats' do
49
- let(:coords) { ['x', 35] }
50
- let(:message) { 'ERR value is not a valid float' }
51
-
52
- it 'raises Redis::CommandError' do
53
- expect { @redises.geoadd key, *coords, 'SF' }
54
- .to raise_error(Redis::CommandError, message)
55
- end
56
- end
57
- end
58
- end
@@ -1,118 +0,0 @@
1
- require 'spec_helper'
2
-
3
- shared_examples 'a distance calculator' do
4
- it 'returns distance between two points in specified unit' do
5
- dist = @redises.geodist(key, 'SF', 'LA', unit)
6
- expect(dist).to be == expected_result
7
- end
8
- end
9
-
10
- describe '#geodist' do
11
- let(:key) { 'cities' }
12
-
13
- context 'with existing key' do
14
- let(:san_francisco) { [-122.5076404, 37.757815, 'SF'] }
15
- let(:los_angeles) { [-118.6919259, 34.0207305, 'LA'] }
16
-
17
- before { @redises.geoadd(key, *san_francisco, *los_angeles) }
18
-
19
- after { @redises.zrem(key, %w[SF LA]) }
20
-
21
- context 'with existing points only' do
22
- context 'using m as unit' do
23
- let(:unit) { 'm' }
24
- let(:expected_result) { '539327.9659' }
25
-
26
- it 'returns distance between two points in meters' do
27
- dist = @redises.geodist(key, 'SF', 'LA')
28
- expect(dist).to be == expected_result
29
- end
30
-
31
- it_behaves_like 'a distance calculator'
32
- end
33
-
34
- context 'using km as unit' do
35
- let(:unit) { 'km' }
36
- let(:expected_result) { '539.3280' }
37
-
38
- it_behaves_like 'a distance calculator'
39
- end
40
-
41
- context 'using ft as unit' do
42
- let(:unit) { 'ft' }
43
- let(:expected_result) { '1769448.7069' }
44
-
45
- it_behaves_like 'a distance calculator'
46
- end
47
-
48
- context 'using mi as unit' do
49
- let(:unit) { 'mi' }
50
- let(:expected_result) { '335.1237' }
51
-
52
- it_behaves_like 'a distance calculator'
53
- end
54
-
55
- context 'with non-existing points only' do
56
- it 'returns nil' do
57
- dist = @redises.geodist(key, 'FF', 'FA')
58
- expect(dist).to be_nil
59
- end
60
- end
61
-
62
- context 'with both existing and non-existing points' do
63
- it 'returns nil' do
64
- dist = @redises.geodist(key, 'SF', 'FA')
65
- expect(dist).to be_nil
66
- end
67
- end
68
- end
69
- end
70
-
71
- context 'with non-existing key' do
72
- it 'returns empty string' do
73
- dist = @redises.geodist(key, 'SF', 'LA')
74
- expect(dist).to be_nil
75
- end
76
- end
77
-
78
- context 'with wrong number of arguments' do
79
- let(:list) { [key, 'SF', 'LA', 'm', 'smth'] }
80
-
81
- context 'with less than 3 arguments' do
82
- [1, 2].each do |count|
83
- context "with #{count} arguments" do
84
- it 'raises an error' do
85
- args = list.slice(0, count)
86
- expect { @redises.geodist(*args) }
87
- .to raise_error(
88
- ArgumentError,
89
- /wrong number of arguments \((given\s)?#{count}(,\sexpected\s|\sfor\s)3?\.\.4\)$/
90
- )
91
- end
92
- end
93
- end
94
- end
95
-
96
- context 'with more than 3 arguments' do
97
- let(:message) { 'ERR syntax error' }
98
-
99
- it 'raises an error' do
100
- args = list.slice(0, 5)
101
- expect { @redises.geodist(*args) }
102
- .to raise_error(
103
- ArgumentError,
104
- /wrong number of arguments \((given\s)?5(,\sexpected\s|\sfor\s)3?\.\.4\)$/
105
- )
106
- end
107
- end
108
- end
109
-
110
- context 'with wrong unit' do
111
- let(:message) { 'ERR unsupported unit provided. please use m, km, ft, mi' }
112
-
113
- it 'raises an error' do
114
- expect { @redises.geodist(key, 'SF', 'LA', 'a') }
115
- .to raise_error(Redis::CommandError, message)
116
- end
117
- end
118
- end
@@ -1,52 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#geohash' do
4
- let(:key) { 'cities' }
5
-
6
- context 'with existing key' do
7
- let(:san_francisco) { [-122.5076404, 37.757815, 'SF'] }
8
- let(:los_angeles) { [-118.6919259, 34.0207305, 'LA'] }
9
-
10
- before { @redises.geoadd(key, *san_francisco, *los_angeles) }
11
-
12
- after { @redises.zrem(key, %w[SF LA]) }
13
-
14
- context 'with existing points only' do
15
- let(:expected_result) do
16
- %w[9q8yu38ejp0 9q59e171je0]
17
- end
18
-
19
- it 'returns decoded coordinates pairs for each point' do
20
- results = @redises.geohash(key, %w[SF LA])
21
- expect(results).to be == expected_result
22
- end
23
-
24
- context 'with non-existing points only' do
25
- it 'returns array filled with nils' do
26
- results = @redises.geohash(key, %w[FF FA])
27
- expect(results).to be == [nil, nil]
28
- end
29
- end
30
-
31
- context 'with both existing and non-existing points' do
32
- let(:expected_result) do
33
- ['9q8yu38ejp0', nil]
34
- end
35
-
36
- it 'returns mixture of nil and coordinates pair' do
37
- results = @redises.geohash(key, %w[SF FA])
38
- expect(results).to be == expected_result
39
- end
40
- end
41
- end
42
- end
43
-
44
- context 'with non-existing key' do
45
- before { @redises.del(key) }
46
-
47
- it 'returns empty array' do
48
- results = @redises.geohash(key, %w[SF LA])
49
- expect(results).to be == [nil, nil]
50
- end
51
- end
52
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#geopos' do
4
- let(:key) { 'cities' }
5
-
6
- context 'with existing key' do
7
- let(:san_francisco) { [-122.5076404, 37.757815, 'SF'] }
8
- let(:los_angeles) { [-118.6919259, 34.0207305, 'LA'] }
9
-
10
- before { @redises.geoadd(key, *san_francisco, *los_angeles) }
11
-
12
- after { @redises.zrem(key, %w[SF LA]) }
13
-
14
- context 'with existing points only' do
15
- let(:expected_result) do
16
- [
17
- %w[-122.5076410174369812 37.75781598995183685],
18
- %w[-118.69192510843276978 34.020729570911179]
19
- ]
20
- end
21
-
22
- it 'returns decoded coordinates pairs for each point' do
23
- coords = @redises.geopos(key, %w[SF LA])
24
- expect(coords).to be == expected_result
25
- end
26
-
27
- context 'with non-existing points only' do
28
- it 'returns array filled with nils' do
29
- coords = @redises.geopos(key, %w[FF FA])
30
- expect(coords).to be == [nil, nil]
31
- end
32
- end
33
-
34
- context 'with both existing and non-existing points' do
35
- let(:expected_result) do
36
- [%w[-122.5076410174369812 37.75781598995183685], nil]
37
- end
38
-
39
- it 'returns mixture of nil and coordinates pair' do
40
- coords = @redises.geopos(key, %w[SF FA])
41
- expect(coords).to be == expected_result
42
- end
43
- end
44
- end
45
- end
46
-
47
- context 'with non-existing key' do
48
- before { @redises.del(key) }
49
-
50
- it 'returns empty array' do
51
- coords = @redises.geopos(key, %w[SF LA])
52
- expect(coords).to be == [nil, nil]
53
- end
54
- end
55
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#get(key)' do
4
- before do
5
- @key = 'mock-redis-test:73288'
6
- end
7
-
8
- it 'returns nil for a nonexistent value' do
9
- @redises.get('mock-redis-test:does-not-exist').should be_nil
10
- end
11
-
12
- it 'returns a stored string value' do
13
- @redises.set(@key, 'forsooth')
14
- @redises.get(@key).should == 'forsooth'
15
- end
16
-
17
- it 'treats integers as strings' do
18
- @redises.set(@key, 100)
19
- @redises.get(@key).should == '100'
20
- end
21
-
22
- it 'stringifies key' do
23
- key = :a_symbol
24
-
25
- @redises.set(key, 'hello')
26
- @redises.get(key.to_s).should == 'hello'
27
- @redises.get(key).should == 'hello'
28
- end
29
-
30
- it_should_behave_like 'a string-only command'
31
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#getbit(key, offset)' do
4
- before do
5
- @key = 'mock-redis-test:getbit'
6
- @redises.set(@key, 'h') # ASCII 0x68
7
- end
8
-
9
- it 'gets the bits from the key' do
10
- @redises.getbit(@key, 0).should == 0
11
- @redises.getbit(@key, 1).should == 1
12
- @redises.getbit(@key, 2).should == 1
13
- @redises.getbit(@key, 3).should == 0
14
- @redises.getbit(@key, 4).should == 1
15
- @redises.getbit(@key, 5).should == 0
16
- @redises.getbit(@key, 6).should == 0
17
- @redises.getbit(@key, 7).should == 0
18
- end
19
-
20
- it 'returns 0 for out-of-range bits' do
21
- @redises.getbit(@key, 100).should == 0
22
- end
23
-
24
- it 'does not modify the stored value for out-of-range bits' do
25
- @redises.getbit(@key, 100)
26
- @redises.get(@key).should == 'h'
27
- end
28
-
29
- it 'treats nonexistent keys as empty strings' do
30
- @redises.getbit('mock-redis-test:not-found', 0).should == 0
31
- end
32
-
33
- it_should_behave_like 'a string-only command'
34
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#getdel(key)' do
4
- before do
5
- @key = 'mock-redis-test:73288'
6
- end
7
-
8
- it 'returns nil for a nonexistent value' do
9
- @redises.getdel('mock-redis-test:does-not-exist').should be_nil
10
- end
11
-
12
- it 'returns a stored string value' do
13
- @redises.set(@key, 'forsooth')
14
- @redises.getdel(@key).should == 'forsooth'
15
- end
16
-
17
- it 'deletes the key after returning it' do
18
- @redises.set(@key, 'forsooth')
19
- @redises.getdel(@key)
20
- @redises.get(@key).should be_nil
21
- end
22
-
23
- it_should_behave_like 'a string-only command'
24
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#getrange(key, start, stop)' do
4
- before do
5
- @key = 'mock-redis-test:getrange'
6
- @redises.set(@key, 'This is a string')
7
- end
8
-
9
- it 'returns a substring' do
10
- @redises.getrange(@key, 0, 3).should == 'This'
11
- end
12
-
13
- it 'works with negative indices' do
14
- @redises.getrange(@key, -3, -1).should == 'ing'
15
- end
16
-
17
- it 'limits the result to the actual length of the string' do
18
- @redises.getrange(@key, 10, 100).should == 'string'
19
- end
20
-
21
- it_should_behave_like 'a string-only command'
22
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#getrange(key, value)' do
4
- before do
5
- @key = 'mock-redis-test:getset'
6
- @redises.set(@key, 'oldvalue')
7
- end
8
-
9
- it 'returns the old value' do
10
- @redises.getset(@key, 'newvalue').should == 'oldvalue'
11
- end
12
-
13
- it 'sets the value to the new value' do
14
- @redises.getset(@key, 'newvalue')
15
- @redises.get(@key).should == 'newvalue'
16
- end
17
-
18
- it 'returns nil for nonexistent keys' do
19
- @redises.getset('mock-redis-test:not-found', 1).should be_nil
20
- end
21
-
22
- it_should_behave_like 'a string-only command'
23
- end
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#hdel(key, field)' do
4
- before do
5
- @key = 'mock-redis-test:hdel'
6
- @redises.hset(@key, 'k1', 'v1')
7
- @redises.hset(@key, 'k2', 'v2')
8
- end
9
-
10
- it 'returns 1 when it removes a field' do
11
- @redises.hdel(@key, 'k1').should == 1
12
- end
13
-
14
- it 'returns 0 when it does not remove a field' do
15
- @redises.hdel(@key, 'nonesuch').should == 0
16
- end
17
-
18
- it 'actually removes the field' do
19
- @redises.hdel(@key, 'k1')
20
- @redises.hget(@key, 'k1').should be_nil
21
- end
22
-
23
- it 'treats the field as a string' do
24
- field = 2
25
- @redises.hset(@key, field, 'two')
26
- @redises.hdel(@key, field)
27
- @redises.hget(@key, field).should be_nil
28
- end
29
-
30
- it 'removes only the field specified' do
31
- @redises.hdel(@key, 'k1')
32
- @redises.hget(@key, 'k2').should == 'v2'
33
- end
34
-
35
- it 'cleans up empty hashes' do
36
- @redises.hdel(@key, 'k1')
37
- @redises.hdel(@key, 'k2')
38
- @redises.get(@key).should be_nil
39
- end
40
-
41
- it 'supports a variable number of arguments' do
42
- @redises.hdel(@key, 'k1', 'k2')
43
- @redises.get(@key).should be_nil
44
- end
45
-
46
- it 'treats variable arguments as strings' do
47
- field = 2
48
- @redises.hset(@key, field, 'two')
49
- @redises.hdel(@key, field)
50
- @redises.hget(@key, field).should be_nil
51
- end
52
-
53
- it 'supports a variable number of fields as array' do
54
- @redises.hdel(@key, %w[k1 k2]).should == 2
55
-
56
- @redises.hget(@key, 'k1').should be_nil
57
- @redises.hget(@key, 'k2').should be_nil
58
- @redises.get(@key).should be_nil
59
- end
60
-
61
- it 'supports a list of fields in various way' do
62
- @redises.hdel(@key, ['k1'], 'k2').should == 2
63
-
64
- @redises.hget(@key, 'k1').should be_nil
65
- @redises.hget(@key, 'k2').should be_nil
66
- @redises.get(@key).should be_nil
67
- end
68
-
69
- it 'raises error if an empty array is passed' do
70
- expect { @redises.hdel(@key, []) }.to raise_error(
71
- Redis::CommandError,
72
- "ERR wrong number of arguments for 'hdel' command"
73
- )
74
- end
75
-
76
- it_should_behave_like 'a hash-only command'
77
- end
@@ -1,27 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#hexists(key, field)' do
4
- before do
5
- @key = 'mock-redis-test:hexists'
6
- @redises.hset(@key, 'field', 'value')
7
- end
8
-
9
- it 'returns true if the hash has that field' do
10
- @redises.hexists(@key, 'field').should == true
11
- end
12
-
13
- it 'returns false if the hash lacks that field' do
14
- @redises.hexists(@key, 'nonesuch').should == false
15
- end
16
-
17
- it 'treats the field as a string' do
18
- @redises.hset(@key, 1, 'one')
19
- @redises.hexists(@key, 1).should == true
20
- end
21
-
22
- it 'returns nil when there is no such key' do
23
- @redises.hexists('mock-redis-test:nonesuch', 'key').should == false
24
- end
25
-
26
- it_should_behave_like 'a hash-only command'
27
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#hget(key, field)' do
4
- before do
5
- @key = 'mock-redis-test:hget'
6
- @redises.hset(@key, 'k1', 'v1')
7
- @redises.hset(@key, 'k2', 'v2')
8
- end
9
-
10
- it 'returns the value stored at field' do
11
- @redises.hget(@key, 'k1').should == 'v1'
12
- end
13
-
14
- it 'treats the field as a string' do
15
- @redises.hset(@key, '3', 'v3')
16
- @redises.hget(@key, 3).should == 'v3'
17
- end
18
-
19
- it 'returns nil when there is no such field' do
20
- @redises.hget(@key, 'nonesuch').should be_nil
21
- end
22
-
23
- it 'returns nil when there is no such key' do
24
- @redises.hget('mock-redis-test:nonesuch', 'k1').should be_nil
25
- end
26
-
27
- it_should_behave_like 'a hash-only command'
28
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#hgetall(key)' do
4
- before do
5
- @key = 'mock-redis-test:hgetall'
6
- @redises.hset(@key, 'k1', 'v1')
7
- @redises.hset(@key, 'k2', 'v2')
8
- end
9
-
10
- it 'returns the (key, value) pairs stored in the hash' do
11
- @redises.hgetall(@key).should == {
12
- 'k1' => 'v1',
13
- 'k2' => 'v2',
14
- }
15
- end
16
-
17
- it 'returns [] when there is no such key' do
18
- @redises.hgetall('mock-redis-test:nonesuch').should == {}
19
- end
20
-
21
- it "doesn't return a mutable reference to the returned data" do
22
- mr = MockRedis.new
23
- mr.hset(@key, 'k1', 'v1')
24
- mr.hset(@key, 'k2', 'v2')
25
- hash = mr.hgetall(@key)
26
- hash['dont'] = 'mutate'
27
- new_hash = mr.hgetall(@key)
28
- new_hash.keys.sort.should == %w[k1 k2]
29
- end
30
-
31
- it_should_behave_like 'a hash-only command'
32
- end
@@ -1,58 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '#hincrby(key, field, increment)' do
4
- before do
5
- @key = 'mock-redis-test:hincrby'
6
- @field = 'count'
7
- end
8
-
9
- it 'returns the value after the increment' do
10
- @redises.hset(@key, @field, 2)
11
- @redises.hincrby(@key, @field, 2).should == 4
12
- end
13
-
14
- it 'treats a missing key like 0' do
15
- @redises.hincrby(@key, @field, 1).should == 1
16
- end
17
-
18
- it 'creates a hash if nothing is present' do
19
- @redises.hincrby(@key, @field, 1)
20
- @redises.hget(@key, @field).should == '1'
21
- end
22
-
23
- it 'increments negative numbers' do
24
- @redises.hset(@key, @field, -10)
25
- @redises.hincrby(@key, @field, 2).should == -8
26
- end
27
-
28
- it 'works multiple times' do
29
- @redises.hincrby(@key, @field, 2).should == 2
30
- @redises.hincrby(@key, @field, 2).should == 4
31
- @redises.hincrby(@key, @field, 2).should == 6
32
- end
33
-
34
- it 'accepts an integer-ish string' do
35
- @redises.hincrby(@key, @field, '2').should == 2
36
- end
37
-
38
- it 'treats the field as a string' do
39
- field = 11
40
- @redises.hset(@key, field, 2)
41
- @redises.hincrby(@key, field, 2).should == 4
42
- end
43
-
44
- it 'raises an error if the value does not look like an integer' do
45
- @redises.hset(@key, @field, 'one')
46
- lambda do
47
- @redises.hincrby(@key, @field, 1)
48
- end.should raise_error(Redis::CommandError)
49
- end
50
-
51
- it 'raises an error if the delta does not look like an integer' do
52
- lambda do
53
- @redises.hincrby(@key, @field, 'foo')
54
- end.should raise_error(Redis::CommandError)
55
- end
56
-
57
- it_should_behave_like 'a hash-only command'
58
- end