rediska 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,240 @@
1
+ shared_examples 'strings' do
2
+ it 'should append a value to key' do
3
+ subject.set('key1', 'Hello')
4
+ subject.append('key1', ' World')
5
+
6
+ subject.get('key1').should eq('Hello World')
7
+ end
8
+
9
+ it 'should decrement the integer value of a key by one' do
10
+ subject.set('counter', '1')
11
+ subject.decr('counter')
12
+
13
+ subject.get('counter').should eq('0')
14
+ end
15
+
16
+ it 'should decrement the integer value of a key by the given number' do
17
+ subject.set('counter', '10')
18
+ subject.decrby('counter', '5')
19
+
20
+ subject.get('counter').should eq('5')
21
+ end
22
+
23
+ it 'should get the value of a key' do
24
+ subject.get('key2').should be_nil
25
+ end
26
+
27
+ it 'should returns the bit value at offset in the string value stored at key' do
28
+ subject.set('key1', 'a')
29
+
30
+ subject.getbit('key1', 1).should eq(1)
31
+ subject.getbit('key1', 2).should eq(1)
32
+ subject.getbit('key1', 3).should eq(0)
33
+ subject.getbit('key1', 4).should eq(0)
34
+ subject.getbit('key1', 5).should eq(0)
35
+ subject.getbit('key1', 6).should eq(0)
36
+ subject.getbit('key1', 7).should eq(1)
37
+ end
38
+
39
+ it 'should allow direct bit manipulation even if the string is not set' do
40
+ subject.setbit('key1', 10, 1)
41
+ subject.getbit('key1', 10).should eq(1)
42
+ end
43
+
44
+ it 'should get a substring of the string stored at a key' do
45
+ subject.set('key1', 'This a message')
46
+
47
+ subject.getrange('key1', 0, 3).should eq('This')
48
+ subject.substr('key1', 0, 3).should eq('This')
49
+ end
50
+
51
+ it 'should set the string value of a key and return its old value' do
52
+ subject.set('key1','value1')
53
+
54
+ subject.getset('key1', 'value2').should eq('value1')
55
+ subject.get('key1').should eq('value2')
56
+ end
57
+
58
+ it 'should return nil for #getset if the key does not exist when setting' do
59
+ subject.getset('key1', 'value1').should be_nil
60
+ subject.get('key1').should eq('value1')
61
+ end
62
+
63
+ it 'should increment the integer value of a key by one' do
64
+ subject.set('counter', '1')
65
+ subject.incr('counter').should eq(2)
66
+
67
+ subject.get('counter').should eq('2')
68
+ end
69
+
70
+ it 'should not change the expire value of the key during incr' do
71
+ subject.set('counter', '1')
72
+ subject.expire('counter', 600).should be_true
73
+
74
+ subject.ttl('counter').should eq(600)
75
+ subject.incr('counter').should eq(2)
76
+ subject.ttl('counter').should be_within(10).of(600)
77
+ end
78
+
79
+ it 'should decrement the integer value of a key by one' do
80
+ subject.set('counter', '1')
81
+ subject.decr('counter').should eq(0)
82
+
83
+ subject.get('counter').should eq('0')
84
+ end
85
+
86
+ it 'should not change the expire value of the key during decr' do
87
+ subject.set('counter', '2')
88
+ subject.expire('counter', 600).should be_true
89
+
90
+ subject.ttl('counter').should eq(600)
91
+ subject.decr('counter').should eq(1)
92
+ subject.ttl('counter').should be_within(10).of(600)
93
+ end
94
+
95
+ it 'should increment the integer value of a key by the given number' do
96
+ subject.set('counter', '10')
97
+ subject.incrby('counter', '5').should eq(15)
98
+ subject.incrby('counter', 2).should eq(17)
99
+ subject.get('counter').should eq('17')
100
+ end
101
+
102
+ it 'should not change the expire value of the key during incrby' do
103
+ subject.set('counter', '1')
104
+ subject.expire('counter', 600).should be_true
105
+
106
+ subject.ttl('counter').should eq(600)
107
+ subject.incrby('counter', '5').should eq(6)
108
+ subject.ttl('counter').should be_within(10).of(600)
109
+ end
110
+
111
+ it 'should decrement the integer value of a key by the given number' do
112
+ subject.set('counter', '10')
113
+ subject.decrby('counter', '5').should eq(5)
114
+ subject.decrby('counter', 2).should eq(3)
115
+ subject.get('counter').should eq('3')
116
+ end
117
+
118
+ it 'should not change the expire value of the key during decrby' do
119
+ subject.set('counter', '8')
120
+ subject.expire('counter', 600).should be_true
121
+
122
+ subject.ttl('counter').should eq(600)
123
+ subject.decrby('counter', '3').should eq(5)
124
+ subject.ttl('counter').should be_within(10).of(600)
125
+ end
126
+
127
+ it 'should get the values of all the given keys' do
128
+ subject.set('key1', 'value1')
129
+ subject.set('key2', 'value2')
130
+ subject.set('key3', 'value3')
131
+
132
+ subject.mget('key1', 'key2', 'key3').should eq(['value1', 'value2', 'value3'])
133
+ subject.mget(['key1', 'key2', 'key3']).should eq(['value1', 'value2', 'value3'])
134
+ end
135
+
136
+ it 'returns nil for non existent keys' do
137
+ subject.set('key1', 'value1')
138
+ subject.set('key3', 'value3')
139
+
140
+ subject.mget('key1', 'key2', 'key3', 'key4').should eq(['value1', nil, 'value3', nil])
141
+ subject.mget(['key1', 'key2', 'key3', 'key4']).should eq(['value1', nil, 'value3', nil])
142
+ end
143
+
144
+ it 'raises an argument error when not passed any fields' do
145
+ subject.set('key3', 'value3')
146
+
147
+ expect {
148
+ subject.mget
149
+ }.to raise_error(Redis::CommandError)
150
+ end
151
+
152
+ it 'should set multiple keys to multiple values' do
153
+ subject.mset(:key1, 'value1', :key2, 'value2')
154
+
155
+ subject.get('key1').should eq('value1')
156
+ subject.get('key2').should eq('value2')
157
+ end
158
+
159
+ it 'should raise error if command arguments count is wrong' do
160
+ expect {
161
+ subject.mset
162
+ }.to raise_error(Redis::CommandError)
163
+
164
+ expect {
165
+ subject.mset(:key1)
166
+ }.to raise_error(Redis::CommandError)
167
+
168
+ expect {
169
+ subject.mset(:key1, 'value', :key2)
170
+ }.to raise_error(Redis::CommandError)
171
+
172
+ subject.get('key1').should be_nil
173
+ subject.get('key2').should be_nil
174
+ end
175
+
176
+ it 'should set multiple keys to multiple values, only if none of the keys exist' do
177
+ subject.msetnx(:key1, 'value1', :key2, 'value2').should be_true
178
+ subject.msetnx(:key1, 'value3', :key2, 'value4').should be_false
179
+
180
+ subject.get('key1').should eq('value1')
181
+ subject.get('key2').should eq('value2')
182
+ end
183
+
184
+ it 'should set multiple keys to multiple values with a hash' do
185
+ subject.mapped_mset(key1: 'value1', key2: 'value2')
186
+
187
+ subject.get('key1').should eq('value1')
188
+ subject.get('key2').should eq('value2')
189
+ end
190
+
191
+ it 'should set multiple keys to multiple values with a hash, only if none of the keys exist' do
192
+ subject.mapped_msetnx(key1: 'value1', key2: 'value2').should be_true
193
+ subject.mapped_msetnx(key1: 'value3', key2: 'value4').should be_false
194
+
195
+ subject.get('key1').should eq('value1')
196
+ subject.get('key2').should eq('value2')
197
+ end
198
+
199
+ it 'should set the string value of a key' do
200
+ subject.set('key1', '1')
201
+
202
+ subject.get('key1').should eq('1')
203
+ end
204
+
205
+ it 'should sets or clears the bit at offset in the string value stored at key' do
206
+ subject.set('key1', 'abc')
207
+ subject.setbit('key1', 11, 1)
208
+
209
+ subject.get('key1').should eq('arc')
210
+ end
211
+
212
+ it 'should set the value and expiration of a key' do
213
+ subject.setex('key1', 30, 'value1')
214
+
215
+ subject.get('key1').should eq('value1')
216
+ subject.ttl('key1').should eq(30)
217
+ end
218
+
219
+ it 'should set the value of a key, only if the key does not exist' do
220
+ subject.set('key1', 'test value')
221
+ subject.setnx('key1', 'new value')
222
+ subject.setnx('key2', 'another value')
223
+
224
+ subject.get('key1').should eq('test value')
225
+ subject.get('key2').should eq('another value')
226
+ end
227
+
228
+ it 'should overwrite part of a string at key starting at the specified offset' do
229
+ subject.set('key1', 'Hello World')
230
+ subject.setrange('key1', 6, 'Redis')
231
+
232
+ subject.get('key1').should eq('Hello Redis')
233
+ end
234
+
235
+ it 'should get the length of the value stored in a key' do
236
+ subject.set('key1', 'abc')
237
+
238
+ subject.strlen('key1').should eq(3)
239
+ end
240
+ end
@@ -0,0 +1,11 @@
1
+ shared_examples 'transactions' do
2
+ it 'should mark the start of a transaction block' do
3
+ transaction = subject.multi do
4
+ subject.set('key1', '1')
5
+ subject.set('key2', '2')
6
+ subject.mget('key1', 'key2')
7
+ end
8
+
9
+ transaction.should eq(['OK', 'OK', ['1', '2']])
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ shared_examples 'upcase method names' do
2
+ it '#ZCOUNT' do
3
+ subject.ZCOUNT('key', 2, 3).should eq(subject.zcount('key', 2, 3))
4
+ end
5
+
6
+ it '#ZSCORE' do
7
+ subject.ZSCORE('key', 2).should eq(subject.zscore('key', 2))
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rediska
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Leonid Beder
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-10-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redis
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.14'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.14'
46
+ - !ruby/object:Gem::Dependency
47
+ name: coveralls
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry-debugger
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: ! "A light-weighted redis driver for testing, development, and minimal
95
+ environments,\n which supports various data storage strategies"
96
+ email:
97
+ - leonid.beder@gmail.com
98
+ executables: []
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - .gitignore
103
+ - .rspec
104
+ - .travis.yml
105
+ - Gemfile
106
+ - Gemfile.lock
107
+ - LICENSE
108
+ - README.md
109
+ - Rakefile
110
+ - lib/rediska.rb
111
+ - lib/rediska/configuration.rb
112
+ - lib/rediska/connection.rb
113
+ - lib/rediska/databases/expiring.rb
114
+ - lib/rediska/databases/memory.rb
115
+ - lib/rediska/databases/pstore.rb
116
+ - lib/rediska/driver.rb
117
+ - lib/rediska/sorted_set_argument_handler.rb
118
+ - lib/rediska/sorted_set_store.rb
119
+ - lib/rediska/version.rb
120
+ - lib/rediska/zset.rb
121
+ - rediska.gemspec
122
+ - spec/redis_spec.rb
123
+ - spec/spec_helper.rb
124
+ - spec/support/compatibility.rb
125
+ - spec/support/connection.rb
126
+ - spec/support/hashes.rb
127
+ - spec/support/keys.rb
128
+ - spec/support/lists.rb
129
+ - spec/support/server.rb
130
+ - spec/support/sets.rb
131
+ - spec/support/sorted_sets.rb
132
+ - spec/support/strings.rb
133
+ - spec/support/transactions.rb
134
+ - spec/support/upcase_method_names.rb
135
+ homepage: https://github.com/lbeder/rediska
136
+ licenses:
137
+ - MIT
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 1.8.25
157
+ signing_key:
158
+ specification_version: 3
159
+ summary: A light-weighted redis driver for testing, development, and minimal environments
160
+ test_files:
161
+ - spec/redis_spec.rb
162
+ - spec/spec_helper.rb
163
+ - spec/support/compatibility.rb
164
+ - spec/support/connection.rb
165
+ - spec/support/hashes.rb
166
+ - spec/support/keys.rb
167
+ - spec/support/lists.rb
168
+ - spec/support/server.rb
169
+ - spec/support/sets.rb
170
+ - spec/support/sorted_sets.rb
171
+ - spec/support/strings.rb
172
+ - spec/support/transactions.rb
173
+ - spec/support/upcase_method_names.rb
174
+ has_rdoc: