rediska 0.5.0 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92a517169e6ce339fc0dd41bb2a3bc14ae34968e
4
- data.tar.gz: 1cf4658e43eea53a54c3105a4b3cc829a2d22fdb
3
+ metadata.gz: 42912927e01fc9f997529b763f267bfd3b38b54f
4
+ data.tar.gz: a1a484bc665c5b6464bfbde5731f2c3d120d8528
5
5
  SHA512:
6
- metadata.gz: e98bc067fa8f7e0b3a46a03833efeaec2a9c2f01705d30cec74dcf1c8ad738f179b3c9fc28efbdafabadea5b4f2f76b8089e0dd91abc7549664fd3f2d8a7f2ba
7
- data.tar.gz: f2c501f284dabc099cbeb65f2805e1e2487fe163a25f2d67417e806e2809079ed028bb16660a457e5155aff5e2265c110d3b0a98eaebab4e2e19736f5cae4a8e
6
+ metadata.gz: f97da1ce65e96864840900755ffd52b3f3f129c1e99bb162bc6d769272168249f211ac4ae32a4e9656e554ec15e30c0a58a8a8c321792f70793d407acc8cab8a
7
+ data.tar.gz: a29ad9857dd640e4e17b32cc375f397a1abeafb83f460cadc2d94c3a1aeb10128ff9e65993f22155a43bc0e9340e763f755647cb3b45515ffeffc2e8c7d0b2fd
data/README.md CHANGED
@@ -160,6 +160,7 @@ end
160
160
  * SPOP
161
161
  * SRANDMEMBER
162
162
  * SREM
163
+ * SSCAN
163
164
  * STRLEN
164
165
  * SUNION
165
166
  * SUNIONSTORE
@@ -1,13 +1,16 @@
1
1
  module Rediska
2
2
  module CommandExecutor
3
3
  def write(command)
4
- meffod = command.shift.to_s.downcase.to_sym
4
+ meffod = command[0].to_s.downcase.to_sym
5
+ args = command[1..-1]
5
6
 
6
7
  if in_multi && !(TRANSACTION_COMMANDS.include? meffod) # queue commands
7
- queued_commands << [meffod, *command]
8
+ queued_commands << [meffod, *args]
8
9
  reply = 'QUEUED'
10
+ elsif respond_to?(meffod) && method(meffod).arity.zero?
11
+ reply = send(meffod)
9
12
  elsif respond_to?(meffod)
10
- reply = send(meffod, *command)
13
+ reply = send(meffod, *args)
11
14
  else
12
15
  raise Redis::CommandError, "ERR unknown command '#{meffod}'"
13
16
  end
@@ -16,6 +19,8 @@ module Rediska
16
19
  reply = 1
17
20
  elsif reply == false
18
21
  reply = 0
22
+ elsif reply.is_a?(Array)
23
+ reply = reply.map { |r| r == true ? 1 : r == false ? 0 : r }
19
24
  end
20
25
 
21
26
  replies << reply
@@ -17,6 +17,16 @@ module Rediska
17
17
  def disconnect
18
18
  end
19
19
 
20
+ def client(command, _options = {})
21
+ case command
22
+ when :setname then true
23
+ when :getname then nil
24
+ when :client then true
25
+ else
26
+ raise Redis::CommandError, "ERR unknown command '#{command}'"
27
+ end
28
+ end
29
+
20
30
  def timeout=(usecs)
21
31
  end
22
32
 
@@ -535,6 +545,44 @@ module Rediska
535
545
  number.nil? ? srandmember_single(key) : srandmember_multiple(key, number)
536
546
  end
537
547
 
548
+ def sscan(key, start_cursor, *args)
549
+ data_type_check(key, ::Set)
550
+ return ['0', []] unless data[key]
551
+
552
+ match = '*'
553
+ count = 10
554
+
555
+ if args.size.odd?
556
+ raise_argument_error('sscan')
557
+ end
558
+
559
+ if idx = args.index('MATCH')
560
+ match = args[idx + 1]
561
+ end
562
+
563
+ if idx = args.index('COUNT')
564
+ count = args[idx + 1]
565
+ end
566
+
567
+ start_cursor = start_cursor.to_i
568
+
569
+ cursor = start_cursor
570
+ next_keys = []
571
+
572
+ if start_cursor + count >= data[key].length
573
+ next_keys = (data[key].to_a)[start_cursor..-1]
574
+ cursor = 0
575
+ else
576
+ cursor = start_cursor + count
577
+ next_keys = (data[key].to_a)[start_cursor..cursor-1]
578
+ end
579
+
580
+ filtered_next_keys = next_keys.select{ |k,v| File.fnmatch(match, k)}
581
+ result = filtered_next_keys.flatten.map(&:to_s)
582
+
583
+ return ["#{cursor}", result]
584
+ end
585
+
538
586
  def del(*keys)
539
587
  keys = keys.flatten(1)
540
588
  raise_argument_error('del') if keys.empty?
@@ -849,7 +897,7 @@ module Rediska
849
897
  end
850
898
 
851
899
  start_cursor = start_cursor.to_i
852
- data_type_check(start_cursor, Fixnum)
900
+ data_type_check(start_cursor, Integer)
853
901
 
854
902
  cursor = start_cursor
855
903
  next_keys = []
@@ -1058,7 +1106,7 @@ module Rediska
1058
1106
  end
1059
1107
 
1060
1108
  start_cursor = start_cursor.to_i
1061
- data_type_check(start_cursor, Fixnum)
1109
+ data_type_check(start_cursor, Integer)
1062
1110
 
1063
1111
  cursor = start_cursor
1064
1112
  next_keys = []
@@ -1,5 +1,5 @@
1
1
  module Rediska
2
- TRANSACTION_COMMANDS = [:discard, :exec, :multi, :watch, :unwatch]
2
+ TRANSACTION_COMMANDS = [:discard, :exec, :multi, :watch, :unwatch, :client]
3
3
 
4
4
  module TransactionCommands
5
5
  def self.included(klass)
@@ -46,7 +46,7 @@ module Rediska
46
46
  raise Redis::CommandError, 'ERR EXEC without MULTI'
47
47
  end
48
48
 
49
- responses = queued_commands.map do |cmd|
49
+ responses = queued_commands.map do |cmd|
50
50
  begin
51
51
  send(*cmd)
52
52
  rescue => e
@@ -54,8 +54,8 @@ module Rediska
54
54
  end
55
55
  end
56
56
 
57
- self.queued_commands = [] # reset queued_commands
58
- self.in_multi = false # reset in_multi state
57
+ self.queued_commands = []
58
+ self.in_multi = false
59
59
 
60
60
  responses
61
61
  end
@@ -1,3 +1,3 @@
1
1
  module Rediska
2
- VERSION = '0.5.0'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
@@ -51,7 +51,7 @@ shared_examples 'connection' do
51
51
 
52
52
  it 'should not error with a disconnected client' do
53
53
  subject1 = Redis.new
54
- subject1.client.disconnect
54
+ subject1.disconnect
55
55
  expect(subject1.get('key1')).to be_nil
56
56
  end
57
57
 
@@ -258,4 +258,42 @@ shared_examples 'sets' do
258
258
  end
259
259
  end
260
260
  end
261
+
262
+ describe 'sscan' do
263
+ it 'with no arguments and few items, returns all items' do
264
+ subject.sadd('set', ['name', 'Jack', 'age', '33'])
265
+ result = subject.sscan('set', 0)
266
+
267
+ expect(result[0]).to eq('0')
268
+ expect(result[1]).to eq(['name', 'Jack', 'age', '33'])
269
+ end
270
+
271
+ it 'with a count should return that number of members or more' do
272
+ subject.sadd('set', ['a', '1', 'b', '2', 'c', '3', 'd', '4', 'e', '5', 'f', '6', 'g', '7'])
273
+ result = subject.sscan('set', 0, count: 3)
274
+ expect(result[0]).to eq('3')
275
+ expect(result[1]).to eq([ 'a', '1', 'b'])
276
+ end
277
+
278
+ it 'returns items starting at the provided cursor' do
279
+ subject.sadd('set', ['a', '1', 'b', '2', 'c', '3', 'd', '4', 'e', '5', 'f', '6', 'g', '7'])
280
+ result = subject.sscan('set', 2, count: 3)
281
+ expect(result[0]).to eq('5')
282
+ expect(result[1]).to eq(['b', '2', 'c'])
283
+ end
284
+
285
+ it 'with match, returns items matching the given pattern' do
286
+ subject.sadd('set', ['aa', '1', 'b', '2', 'cc', '3', 'd', '4', 'ee', '5', 'f', '6', 'gg', '7'])
287
+ result = subject.sscan('set', 2, count: 7, match: '??')
288
+ expect(result[0]).to eq('9')
289
+ expect(result[1]).to eq(['cc','ee'])
290
+ end
291
+
292
+ it 'returns an empty result if the key is not found' do
293
+ result = subject.sscan('set', 0)
294
+
295
+ expect(result[0]).to eq('0')
296
+ expect(result[1]).to eq([])
297
+ end
298
+ end
261
299
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rediska
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonid Beder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-07 00:00:00.000000000 Z
11
+ date: 2018-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  version: '0'
151
151
  requirements: []
152
152
  rubyforge_project:
153
- rubygems_version: 2.4.8
153
+ rubygems_version: 2.6.14
154
154
  signing_key:
155
155
  specification_version: 4
156
156
  summary: A light-weighted redis driver for testing, development, and minimal environments
@@ -172,4 +172,3 @@ test_files:
172
172
  - spec/support/strings.rb
173
173
  - spec/support/transactions.rb
174
174
  - spec/support/upcase_method_names.rb
175
- has_rdoc: