rediska 0.0.11 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +18 -14
- data/lib/rediska/command_executor.rb +25 -0
- data/lib/rediska/connection.rb +8 -1
- data/lib/rediska/driver.rb +30 -56
- data/lib/rediska/sort_method.rb +108 -0
- data/lib/rediska/transaction_commands.rb +83 -0
- data/lib/rediska/version.rb +1 -1
- data/rediska.gemspec +1 -1
- data/spec/lib/rediska/driver_spec.rb +5 -5
- data/spec/redis_spec.rb +3 -0
- data/spec/support/connection.rb +15 -15
- data/spec/support/hashes.rb +51 -51
- data/spec/support/keys.rb +106 -61
- data/spec/support/lists.rb +37 -30
- data/spec/support/server.rb +23 -23
- data/spec/support/sets.rb +44 -44
- data/spec/support/sorted_method.rb +136 -0
- data/spec/support/sorted_sets.rb +140 -136
- data/spec/support/strings.rb +74 -74
- data/spec/support/transactions.rb +65 -12
- data/spec/support/upcase_method_names.rb +2 -2
- metadata +22 -17
data/spec/support/lists.rb
CHANGED
@@ -3,9 +3,9 @@ shared_examples 'lists' do
|
|
3
3
|
subject.lpush('key1', 'val1')
|
4
4
|
subject.lpush('key1', 'val2')
|
5
5
|
|
6
|
-
subject.lindex('key1', 0).
|
7
|
-
subject.lindex('key1', -1).
|
8
|
-
subject.lindex('key1', 3).
|
6
|
+
expect(subject.lindex('key1', 0)).to eq('val2')
|
7
|
+
expect(subject.lindex('key1', -1)).to eq('val1')
|
8
|
+
expect(subject.lindex('key1', 3)).to be_nil
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'should insert an element before or after another element in a list' do
|
@@ -13,17 +13,17 @@ shared_examples 'lists' do
|
|
13
13
|
subject.rpush('key1', 'v3')
|
14
14
|
subject.linsert('key1', :before, 'v3', 'v2')
|
15
15
|
|
16
|
-
subject.lrange('key1', 0, -1).
|
16
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['v1', 'v2', 'v3'])
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should allow multiple values to be added to a list in a single rpush' do
|
20
20
|
subject.rpush('key1', [1, 2, 3])
|
21
|
-
subject.lrange('key1', 0, -1).
|
21
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['1', '2', '3'])
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should allow multiple values to be added to a list in a single lpush' do
|
25
25
|
subject.lpush('key1', [1, 2, 3])
|
26
|
-
subject.lrange('key1', 0, -1).
|
26
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['3', '2', '1'])
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'should error if an invalid where argument is given' do
|
@@ -39,8 +39,8 @@ shared_examples 'lists' do
|
|
39
39
|
subject.rpush('key1', 'v1')
|
40
40
|
subject.rpush('key1', 'v2')
|
41
41
|
|
42
|
-
subject.llen('key1').
|
43
|
-
subject.llen('key2').
|
42
|
+
expect(subject.llen('key1')).to eq(2)
|
43
|
+
expect(subject.llen('key2')).to eq(0)
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'should remove and get the first element in a list' do
|
@@ -48,15 +48,15 @@ shared_examples 'lists' do
|
|
48
48
|
subject.rpush('key1', 'v2')
|
49
49
|
subject.rpush('key1', 'v3')
|
50
50
|
|
51
|
-
subject.lpop('key1').
|
52
|
-
subject.lrange('key1', 0, -1).
|
51
|
+
expect(subject.lpop('key1')).to eq('v1')
|
52
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['v2', 'v3'])
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should prepend a value to a list' do
|
56
56
|
subject.rpush('key1', 'v1')
|
57
57
|
subject.rpush('key1', 'v2')
|
58
58
|
|
59
|
-
subject.lrange('key1', 0, -1).
|
59
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['v1', 'v2'])
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'should prepend a value to a list, only if the list exists' do
|
@@ -65,8 +65,8 @@ shared_examples 'lists' do
|
|
65
65
|
subject.lpushx('key1', 'v2')
|
66
66
|
subject.lpushx('key2', 'v3')
|
67
67
|
|
68
|
-
subject.lrange('key1', 0, -1).
|
69
|
-
subject.llen('key2').
|
68
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['v2', 'v1'])
|
69
|
+
expect(subject.llen('key2')).to eq(0)
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'should get a range of elements from a list' do
|
@@ -74,7 +74,7 @@ shared_examples 'lists' do
|
|
74
74
|
subject.rpush('key1', 'v2')
|
75
75
|
subject.rpush('key1', 'v3')
|
76
76
|
|
77
|
-
subject.lrange('key1', 1, -1).
|
77
|
+
expect(subject.lrange('key1', 1, -1)).to eq(['v2', 'v3'])
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'should remove elements from a list' do
|
@@ -84,9 +84,9 @@ shared_examples 'lists' do
|
|
84
84
|
subject.rpush('key1', 'v2')
|
85
85
|
subject.rpush('key1', 'v1')
|
86
86
|
|
87
|
-
subject.lrem('key1', 1, 'v1').
|
88
|
-
subject.lrem('key1', -2, 'v2').
|
89
|
-
subject.llen('key1').
|
87
|
+
expect(subject.lrem('key1', 1, 'v1')).to eq(1)
|
88
|
+
expect(subject.lrem('key1', -2, 'v2')).to eq(2)
|
89
|
+
expect(subject.llen('key1')).to eq(2)
|
90
90
|
end
|
91
91
|
|
92
92
|
it "should remove list's key when list is empty" do
|
@@ -95,7 +95,7 @@ shared_examples 'lists' do
|
|
95
95
|
subject.lrem('key1', 1, 'v1')
|
96
96
|
subject.lrem('key1', 1, 'v2')
|
97
97
|
|
98
|
-
subject.exists('key1').
|
98
|
+
expect(subject.exists('key1')).to be_falsey
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'should set the value of an element in a list by its index' do
|
@@ -105,7 +105,7 @@ shared_examples 'lists' do
|
|
105
105
|
|
106
106
|
subject.lset('key1', 0, 'four')
|
107
107
|
subject.lset('key1', -2, 'five')
|
108
|
-
subject.lrange('key1', 0, -1).
|
108
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['four', 'five', 'three'])
|
109
109
|
|
110
110
|
expect {
|
111
111
|
subject.lset('key1', 4, 'six')
|
@@ -118,7 +118,7 @@ shared_examples 'lists' do
|
|
118
118
|
subject.rpush('key1', 'three')
|
119
119
|
|
120
120
|
subject.ltrim('key1', 1, -1)
|
121
|
-
subject.lrange('key1', 0, -1).
|
121
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['two', 'three'])
|
122
122
|
end
|
123
123
|
|
124
124
|
context 'when the list is smaller than the requested trim' do
|
@@ -132,7 +132,7 @@ shared_examples 'lists' do
|
|
132
132
|
end
|
133
133
|
|
134
134
|
it 'returns the unmodified list' do
|
135
|
-
subject.lrange('listOfOne', 0, -1).
|
135
|
+
expect(subject.lrange('listOfOne', 0, -1)).to eq(['one'])
|
136
136
|
end
|
137
137
|
end
|
138
138
|
end
|
@@ -153,7 +153,7 @@ shared_examples 'lists' do
|
|
153
153
|
end
|
154
154
|
|
155
155
|
it 'should trim a list to the specified maximum size' do
|
156
|
-
subject.lrange('maxTest', 0, -1).
|
156
|
+
expect(subject.lrange('maxTest', 0, -1)).to eq(['two','three', 'four', 'five', 'six'])
|
157
157
|
end
|
158
158
|
end
|
159
159
|
end
|
@@ -163,8 +163,8 @@ shared_examples 'lists' do
|
|
163
163
|
subject.rpush('key1', 'two')
|
164
164
|
subject.rpush('key1', 'three')
|
165
165
|
|
166
|
-
subject.rpop('key1').
|
167
|
-
subject.lrange('key1', 0, -1).
|
166
|
+
expect(subject.rpop('key1')).to eq('three')
|
167
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['one', 'two'])
|
168
168
|
end
|
169
169
|
|
170
170
|
it 'should remove the last element in a list, append it to another list and return it' do
|
@@ -172,17 +172,24 @@ shared_examples 'lists' do
|
|
172
172
|
subject.rpush('key1', 'two')
|
173
173
|
subject.rpush('key1', 'three')
|
174
174
|
|
175
|
-
subject.rpoplpush('key1', 'key2').
|
175
|
+
expect(subject.rpoplpush('key1', 'key2')).to eq('three')
|
176
176
|
|
177
|
-
subject.lrange('key1', 0, -1).
|
178
|
-
subject.lrange('key2', 0, -1).
|
177
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['one', 'two'])
|
178
|
+
expect(subject.lrange('key2', 0, -1)).to eq(['three'])
|
179
|
+
end
|
180
|
+
|
181
|
+
context 'when the source list is empty' do
|
182
|
+
it 'rpoplpush does not add anything to the destination list' do
|
183
|
+
subject.rpoplpush('source', 'destination')
|
184
|
+
expect(subject.lrange('destination', 0, -1)).to eq([])
|
185
|
+
end
|
179
186
|
end
|
180
187
|
|
181
188
|
it 'should append a value to a list' do
|
182
189
|
subject.rpush('key1', 'one')
|
183
190
|
subject.rpush('key1', 'two')
|
184
191
|
|
185
|
-
subject.lrange('key1', 0, -1).
|
192
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['one', 'two'])
|
186
193
|
end
|
187
194
|
|
188
195
|
it 'should append a value to a list, only if the list exists' do
|
@@ -190,7 +197,7 @@ shared_examples 'lists' do
|
|
190
197
|
subject.rpushx('key1', 'two')
|
191
198
|
subject.rpushx('key2', 'two')
|
192
199
|
|
193
|
-
subject.lrange('key1', 0, -1).
|
194
|
-
subject.lrange('key2', 0, -1).
|
200
|
+
expect(subject.lrange('key1', 0, -1)).to eq(['one', 'two'])
|
201
|
+
expect(subject.lrange('key2', 0, -1)).to be_empty
|
195
202
|
end
|
196
203
|
end
|
data/spec/support/server.rb
CHANGED
@@ -4,11 +4,11 @@ shared_examples 'server' do
|
|
4
4
|
subject.set('key2', '2')
|
5
5
|
subject.set('key2', 'two')
|
6
6
|
|
7
|
-
subject.dbsize.
|
7
|
+
expect(subject.dbsize).to eq(2)
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'should get information and statistics about the server' do
|
11
|
-
subject.info.key?('redis_version').
|
11
|
+
expect(subject.info.key?('redis_version')).to be_truthy
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should handle non-existent methods' do
|
@@ -19,16 +19,16 @@ shared_examples 'server' do
|
|
19
19
|
|
20
20
|
describe 'multiple databases' do
|
21
21
|
it 'should default to database 0' do
|
22
|
-
subject.inspect.
|
22
|
+
expect(subject.inspect).to match(%r#/0>$#)
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should select another database' do
|
26
26
|
subject.select(1)
|
27
|
-
subject.inspect.
|
27
|
+
expect(subject.inspect).to match(%r#/1>$#)
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should store keys separately in each database' do
|
31
|
-
subject.select(0).
|
31
|
+
expect(subject.select(0)).to eq('OK')
|
32
32
|
subject.set('key1', '1')
|
33
33
|
subject.set('key2', '2')
|
34
34
|
|
@@ -38,56 +38,56 @@ shared_examples 'server' do
|
|
38
38
|
subject.set('key5', '5')
|
39
39
|
|
40
40
|
subject.select(0)
|
41
|
-
subject.dbsize.
|
42
|
-
subject.exists('key1').
|
43
|
-
subject.exists('key3').
|
41
|
+
expect(subject.dbsize).to eq(2)
|
42
|
+
expect(subject.exists('key1')).to be_truthy
|
43
|
+
expect(subject.exists('key3')).to be_falsey
|
44
44
|
|
45
45
|
subject.select(1)
|
46
|
-
subject.dbsize.
|
47
|
-
subject.exists('key4').
|
48
|
-
subject.exists('key2').
|
46
|
+
expect(subject.dbsize).to eq(3)
|
47
|
+
expect(subject.exists('key4')).to be_truthy
|
48
|
+
expect(subject.exists('key2')).to be_falsey
|
49
49
|
|
50
50
|
subject.flushall
|
51
|
-
subject.dbsize.
|
51
|
+
expect(subject.dbsize).to eq(0)
|
52
52
|
|
53
53
|
subject.select(0)
|
54
|
-
subject.dbsize.
|
54
|
+
expect(subject.dbsize).to eq(0)
|
55
55
|
end
|
56
56
|
|
57
57
|
it 'should flush a database' do
|
58
58
|
subject.select(0)
|
59
59
|
subject.set('key1', '1')
|
60
60
|
subject.set('key2', '2')
|
61
|
-
subject.dbsize.
|
61
|
+
expect(subject.dbsize).to eq(2)
|
62
62
|
|
63
63
|
subject.select(1)
|
64
64
|
subject.set('key3', '3')
|
65
65
|
subject.set('key4', '4')
|
66
|
-
subject.dbsize.
|
66
|
+
expect(subject.dbsize).to eq(2)
|
67
67
|
|
68
|
-
subject.flushdb.
|
68
|
+
expect(subject.flushdb).to eq('OK')
|
69
69
|
|
70
|
-
subject.dbsize.
|
70
|
+
expect(subject.dbsize).to eq(0)
|
71
71
|
subject.select(0)
|
72
|
-
subject.dbsize.
|
72
|
+
expect(subject.dbsize).to eq(2)
|
73
73
|
end
|
74
74
|
|
75
75
|
it 'should flush all databases' do
|
76
76
|
subject.select(0)
|
77
77
|
subject.set('key3', '3')
|
78
78
|
subject.set('key4', '4')
|
79
|
-
subject.dbsize.
|
79
|
+
expect(subject.dbsize).to eq(2)
|
80
80
|
|
81
81
|
subject.select(1)
|
82
82
|
subject.set('key3', '3')
|
83
83
|
subject.set('key4', '4')
|
84
|
-
subject.dbsize.
|
84
|
+
expect(subject.dbsize).to eq(2)
|
85
85
|
|
86
|
-
subject.flushall.
|
86
|
+
expect(subject.flushall).to eq('OK')
|
87
87
|
|
88
|
-
subject.dbsize.
|
88
|
+
expect(subject.dbsize).to eq(0)
|
89
89
|
subject.select(0)
|
90
|
-
subject.dbsize.
|
90
|
+
expect(subject.dbsize).to eq(0)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
data/spec/support/sets.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
shared_examples 'sets' do
|
2
2
|
it 'should add a member to a set' do
|
3
|
-
subject.sadd('key', 'value').
|
4
|
-
subject.sadd('key', 'value').
|
3
|
+
expect(subject.sadd('key', 'value')).to be_truthy
|
4
|
+
expect(subject.sadd('key', 'value')).to be_falsey
|
5
5
|
|
6
|
-
subject.smembers('key').
|
6
|
+
expect(subject.smembers('key')).to match_array(['value'])
|
7
7
|
end
|
8
8
|
|
9
9
|
it 'should raise error if command arguments count is not enough' do
|
@@ -15,20 +15,20 @@ shared_examples 'sets' do
|
|
15
15
|
subject.sinter(*[])
|
16
16
|
}.to raise_error(Redis::CommandError)
|
17
17
|
|
18
|
-
subject.smembers('key').
|
18
|
+
expect(subject.smembers('key')).to be_empty
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should add multiple members to a set' do
|
22
|
-
subject.sadd('key', %w(value other something more)).
|
23
|
-
subject.sadd('key', %w(and additional values)).
|
24
|
-
subject.smembers('key').
|
22
|
+
expect(subject.sadd('key', %w(value other something more))).to eq(4)
|
23
|
+
expect(subject.sadd('key', %w(and additional values))).to eq(3)
|
24
|
+
expect(subject.smembers('key')).to match_array(['value', 'other', 'something', 'more', 'and', 'additional', 'values'])
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'should get the number of members in a set' do
|
28
28
|
subject.sadd('key', 'val1')
|
29
29
|
subject.sadd('key', 'val2')
|
30
30
|
|
31
|
-
subject.scard('key').
|
31
|
+
expect(subject.scard('key')).to eq(2)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'should subtract multiple sets' do
|
@@ -41,13 +41,13 @@ shared_examples 'sets' do
|
|
41
41
|
subject.sadd('key3', 'c')
|
42
42
|
subject.sadd('key3', 'e')
|
43
43
|
|
44
|
-
subject.sdiff('key1', 'key2', 'key3').
|
44
|
+
expect(subject.sdiff('key1', 'key2', 'key3')).to match_array(['b', 'd'])
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'should subtract from a nonexistent set' do
|
48
48
|
subject.sadd('key2', 'a')
|
49
49
|
subject.sadd('key2', 'b')
|
50
|
-
subject.sdiff('key1', 'key2').
|
50
|
+
expect(subject.sdiff('key1', 'key2')).to be_empty
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should subtract multiple sets and store the resulting set in a key' do
|
@@ -61,7 +61,7 @@ shared_examples 'sets' do
|
|
61
61
|
subject.sadd('key3', 'e')
|
62
62
|
subject.sdiffstore('key', 'key1', 'key2', 'key3')
|
63
63
|
|
64
|
-
subject.smembers('key').
|
64
|
+
expect(subject.smembers('key')).to match_array(['b', 'd'])
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'should intersect multiple sets' do
|
@@ -74,7 +74,7 @@ shared_examples 'sets' do
|
|
74
74
|
subject.sadd('key3', 'c')
|
75
75
|
subject.sadd('key3', 'e')
|
76
76
|
|
77
|
-
subject.sinter('key1', 'key2', 'key3').
|
77
|
+
expect(subject.sinter('key1', 'key2', 'key3')).to match_array(['c'])
|
78
78
|
end
|
79
79
|
|
80
80
|
it 'should intersect multiple sets and store the resulting set in a key' do
|
@@ -87,15 +87,15 @@ shared_examples 'sets' do
|
|
87
87
|
subject.sadd('key3', 'c')
|
88
88
|
subject.sadd('key3', 'e')
|
89
89
|
subject.sinterstore('key', 'key1', 'key2', 'key3')
|
90
|
-
subject.smembers('key').
|
90
|
+
expect(subject.smembers('key')).to match_array(['c'])
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'should determine if a given value is a member of a set' do
|
94
94
|
subject.sadd('key1', 'a')
|
95
95
|
|
96
|
-
subject.sismember('key1', 'a').
|
97
|
-
subject.sismember('key1', 'b').
|
98
|
-
subject.sismember('key2', 'a').
|
96
|
+
expect(subject.sismember('key1', 'a')).to be_truthy
|
97
|
+
expect(subject.sismember('key1', 'b')).to be_falsey
|
98
|
+
expect(subject.sismember('key2', 'a')).to be_falsey
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'should get all the members in a set' do
|
@@ -104,43 +104,43 @@ shared_examples 'sets' do
|
|
104
104
|
subject.sadd('key', 'c')
|
105
105
|
subject.sadd('key', 'd')
|
106
106
|
|
107
|
-
subject.smembers('key').
|
107
|
+
expect(subject.smembers('key')).to match_array(['a', 'b', 'c', 'd'])
|
108
108
|
end
|
109
109
|
|
110
110
|
it 'should move a member from one set to another' do
|
111
111
|
subject.sadd('key1', 'a')
|
112
112
|
subject.sadd('key1', 'b')
|
113
113
|
subject.sadd('key2', 'c')
|
114
|
-
subject.smove('key1', 'key2', 'a').
|
115
|
-
subject.smove('key1', 'key2', 'a').
|
114
|
+
expect(subject.smove('key1', 'key2', 'a')).to be_truthy
|
115
|
+
expect(subject.smove('key1', 'key2', 'a')).to be_falsey
|
116
116
|
|
117
|
-
subject.smembers('key1').
|
118
|
-
subject.smembers('key2').
|
117
|
+
expect(subject.smembers('key1')).to match_array(['b'])
|
118
|
+
expect(subject.smembers('key2')).to match_array(['c', 'a'])
|
119
119
|
end
|
120
120
|
|
121
121
|
it 'should remove and return a random member from a set' do
|
122
122
|
subject.sadd('key1', 'a')
|
123
123
|
subject.sadd('key1', 'b')
|
124
124
|
|
125
|
-
['a', 'b'].include?(subject.spop('key1')).
|
126
|
-
['a', 'b'].include?(subject.spop('key1')).
|
127
|
-
subject.spop('key1').
|
125
|
+
expect(['a', 'b'].include?(subject.spop('key1'))).to be_truthy
|
126
|
+
expect(['a', 'b'].include?(subject.spop('key1'))).to be_truthy
|
127
|
+
expect(subject.spop('key1')).to be_nil
|
128
128
|
end
|
129
129
|
|
130
130
|
it 'should get a random member from a set' do
|
131
131
|
subject.sadd('key1', 'a')
|
132
132
|
subject.sadd('key1', 'b')
|
133
133
|
|
134
|
-
['a', 'b'].include?(subject.spop('key1')).
|
134
|
+
expect(['a', 'b'].include?(subject.spop('key1'))).to be_truthy
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'should remove a member from a set' do
|
138
138
|
subject.sadd('key1', 'a')
|
139
139
|
subject.sadd('key1', 'b')
|
140
|
-
subject.srem('key1', 'a').
|
141
|
-
subject.srem('key1', 'a').
|
140
|
+
expect(subject.srem('key1', 'a')).to be_truthy
|
141
|
+
expect(subject.srem('key1', 'a')).to be_falsey
|
142
142
|
|
143
|
-
subject.smembers('key1').
|
143
|
+
expect(subject.smembers('key1')).to match_array(['b'])
|
144
144
|
end
|
145
145
|
|
146
146
|
it "should remove the set's key once it's empty" do
|
@@ -149,7 +149,7 @@ shared_examples 'sets' do
|
|
149
149
|
subject.srem('key1', 'b')
|
150
150
|
subject.srem('key1', 'a')
|
151
151
|
|
152
|
-
subject.exists('key1').
|
152
|
+
expect(subject.exists('key1')).to be_falsey
|
153
153
|
end
|
154
154
|
|
155
155
|
it 'should add multiple sets' do
|
@@ -162,7 +162,7 @@ shared_examples 'sets' do
|
|
162
162
|
subject.sadd('key3', 'c')
|
163
163
|
subject.sadd('key3', 'e')
|
164
164
|
|
165
|
-
subject.sunion('key1', 'key2', 'key3').
|
165
|
+
expect(subject.sunion('key1', 'key2', 'key3')).to match_array(['a', 'b', 'c', 'd', 'e'])
|
166
166
|
end
|
167
167
|
|
168
168
|
it 'should add multiple sets and store the resulting set in a key' do
|
@@ -176,7 +176,7 @@ shared_examples 'sets' do
|
|
176
176
|
subject.sadd('key3', 'e')
|
177
177
|
subject.sunionstore('key', 'key1', 'key2', 'key3')
|
178
178
|
|
179
|
-
subject.smembers('key').
|
179
|
+
expect(subject.smembers('key')).to match_array(['a', 'b', 'c', 'd', 'e'])
|
180
180
|
end
|
181
181
|
|
182
182
|
describe 'srandmember' do
|
@@ -195,7 +195,7 @@ shared_examples 'sets' do
|
|
195
195
|
it 'is a random element from the set' do
|
196
196
|
random_element = subject.srandmember('key1')
|
197
197
|
|
198
|
-
['a', 'b', 'c'].
|
198
|
+
expect(['a', 'b', 'c']).to include(random_element)
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
@@ -203,7 +203,7 @@ shared_examples 'sets' do
|
|
203
203
|
it 'is an array of one random element from the set' do
|
204
204
|
subject.srandmember('key1', 1)
|
205
205
|
|
206
|
-
[['a'], ['b'], ['c']].
|
206
|
+
expect([['a'], ['b'], ['c']]).to include(subject.srandmember('key1', 1))
|
207
207
|
end
|
208
208
|
end
|
209
209
|
|
@@ -211,10 +211,10 @@ shared_examples 'sets' do
|
|
211
211
|
it 'is an array of two unique, random elements from the set' do
|
212
212
|
random_elements = subject.srandmember('key1', 2)
|
213
213
|
|
214
|
-
random_elements.
|
215
|
-
random_elements.uniq.
|
214
|
+
expect(random_elements.size).to eq(2)
|
215
|
+
expect(random_elements.uniq.size).to eq(2)
|
216
216
|
random_elements.all? do |element|
|
217
|
-
['a', 'b', 'c'].
|
217
|
+
expect(['a', 'b', 'c']).to include(element)
|
218
218
|
end
|
219
219
|
end
|
220
220
|
end
|
@@ -223,10 +223,10 @@ shared_examples 'sets' do
|
|
223
223
|
it 'is an array of 100 random elements from the set, some of which are repeated' do
|
224
224
|
random_elements = subject.srandmember('key1', -100)
|
225
225
|
|
226
|
-
random_elements.
|
227
|
-
random_elements.uniq.
|
226
|
+
expect(random_elements.size).to eq(100)
|
227
|
+
expect(random_elements.uniq.size).to be <= 3
|
228
228
|
random_elements.all? do |element|
|
229
|
-
['a', 'b', 'c'].
|
229
|
+
expect(['a', 'b', 'c']).to include(element)
|
230
230
|
end
|
231
231
|
end
|
232
232
|
end
|
@@ -235,9 +235,9 @@ shared_examples 'sets' do
|
|
235
235
|
it 'is an array of all of the elements from the set, none of which are repeated' do
|
236
236
|
random_elements = subject.srandmember('key1', 100)
|
237
237
|
|
238
|
-
random_elements.
|
239
|
-
random_elements.uniq.
|
240
|
-
random_elements.
|
238
|
+
expect(random_elements.size).to eq(3)
|
239
|
+
expect(random_elements.uniq.size).to eq(3)
|
240
|
+
expect(random_elements).to match_array(['a', 'b', 'c'])
|
241
241
|
end
|
242
242
|
end
|
243
243
|
end
|
@@ -246,11 +246,11 @@ shared_examples 'sets' do
|
|
246
246
|
before { subject.del('key1') }
|
247
247
|
|
248
248
|
it 'is nil without the extra parameter' do
|
249
|
-
subject.srandmember('key1').
|
249
|
+
expect(subject.srandmember('key1')).to be_nil
|
250
250
|
end
|
251
251
|
|
252
252
|
it 'is an empty array with an extra parameter' do
|
253
|
-
subject.srandmember('key1', 1).
|
253
|
+
expect(subject.srandmember('key1', 1)).to eq([])
|
254
254
|
end
|
255
255
|
end
|
256
256
|
end
|