redis 3.3.5 → 4.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +84 -2
  3. data/README.md +131 -76
  4. data/lib/redis.rb +912 -200
  5. data/lib/redis/client.rb +71 -29
  6. data/lib/redis/cluster.rb +291 -0
  7. data/lib/redis/cluster/command.rb +81 -0
  8. data/lib/redis/cluster/command_loader.rb +34 -0
  9. data/lib/redis/cluster/key_slot_converter.rb +72 -0
  10. data/lib/redis/cluster/node.rb +104 -0
  11. data/lib/redis/cluster/node_key.rb +31 -0
  12. data/lib/redis/cluster/node_loader.rb +37 -0
  13. data/lib/redis/cluster/option.rb +87 -0
  14. data/lib/redis/cluster/slot.rb +72 -0
  15. data/lib/redis/cluster/slot_loader.rb +50 -0
  16. data/lib/redis/connection.rb +3 -2
  17. data/lib/redis/connection/command_helper.rb +3 -8
  18. data/lib/redis/connection/hiredis.rb +3 -2
  19. data/lib/redis/connection/registry.rb +1 -0
  20. data/lib/redis/connection/ruby.rb +48 -32
  21. data/lib/redis/connection/synchrony.rb +13 -4
  22. data/lib/redis/distributed.rb +39 -15
  23. data/lib/redis/errors.rb +47 -0
  24. data/lib/redis/hash_ring.rb +21 -64
  25. data/lib/redis/pipeline.rb +54 -12
  26. data/lib/redis/subscribe.rb +1 -0
  27. data/lib/redis/version.rb +2 -1
  28. metadata +40 -198
  29. data/.gitignore +0 -16
  30. data/.travis.yml +0 -89
  31. data/.travis/Gemfile +0 -11
  32. data/.yardopts +0 -3
  33. data/Gemfile +0 -4
  34. data/Rakefile +0 -87
  35. data/benchmarking/logging.rb +0 -71
  36. data/benchmarking/pipeline.rb +0 -51
  37. data/benchmarking/speed.rb +0 -21
  38. data/benchmarking/suite.rb +0 -24
  39. data/benchmarking/worker.rb +0 -71
  40. data/examples/basic.rb +0 -15
  41. data/examples/consistency.rb +0 -114
  42. data/examples/dist_redis.rb +0 -43
  43. data/examples/incr-decr.rb +0 -17
  44. data/examples/list.rb +0 -26
  45. data/examples/pubsub.rb +0 -37
  46. data/examples/sentinel.rb +0 -41
  47. data/examples/sentinel/sentinel.conf +0 -9
  48. data/examples/sentinel/start +0 -49
  49. data/examples/sets.rb +0 -36
  50. data/examples/unicorn/config.ru +0 -3
  51. data/examples/unicorn/unicorn.rb +0 -20
  52. data/redis.gemspec +0 -44
  53. data/test/bitpos_test.rb +0 -69
  54. data/test/blocking_commands_test.rb +0 -42
  55. data/test/client_test.rb +0 -59
  56. data/test/command_map_test.rb +0 -30
  57. data/test/commands_on_hashes_test.rb +0 -21
  58. data/test/commands_on_hyper_log_log_test.rb +0 -21
  59. data/test/commands_on_lists_test.rb +0 -20
  60. data/test/commands_on_sets_test.rb +0 -77
  61. data/test/commands_on_sorted_sets_test.rb +0 -137
  62. data/test/commands_on_strings_test.rb +0 -101
  63. data/test/commands_on_value_types_test.rb +0 -133
  64. data/test/connection_handling_test.rb +0 -277
  65. data/test/connection_test.rb +0 -57
  66. data/test/db/.gitkeep +0 -0
  67. data/test/distributed_blocking_commands_test.rb +0 -46
  68. data/test/distributed_commands_on_hashes_test.rb +0 -10
  69. data/test/distributed_commands_on_hyper_log_log_test.rb +0 -33
  70. data/test/distributed_commands_on_lists_test.rb +0 -22
  71. data/test/distributed_commands_on_sets_test.rb +0 -83
  72. data/test/distributed_commands_on_sorted_sets_test.rb +0 -18
  73. data/test/distributed_commands_on_strings_test.rb +0 -59
  74. data/test/distributed_commands_on_value_types_test.rb +0 -95
  75. data/test/distributed_commands_requiring_clustering_test.rb +0 -164
  76. data/test/distributed_connection_handling_test.rb +0 -23
  77. data/test/distributed_internals_test.rb +0 -79
  78. data/test/distributed_key_tags_test.rb +0 -52
  79. data/test/distributed_persistence_control_commands_test.rb +0 -26
  80. data/test/distributed_publish_subscribe_test.rb +0 -92
  81. data/test/distributed_remote_server_control_commands_test.rb +0 -66
  82. data/test/distributed_scripting_test.rb +0 -102
  83. data/test/distributed_sorting_test.rb +0 -20
  84. data/test/distributed_test.rb +0 -58
  85. data/test/distributed_transactions_test.rb +0 -32
  86. data/test/encoding_test.rb +0 -18
  87. data/test/error_replies_test.rb +0 -59
  88. data/test/fork_safety_test.rb +0 -65
  89. data/test/helper.rb +0 -232
  90. data/test/helper_test.rb +0 -24
  91. data/test/internals_test.rb +0 -417
  92. data/test/lint/blocking_commands.rb +0 -150
  93. data/test/lint/hashes.rb +0 -162
  94. data/test/lint/hyper_log_log.rb +0 -60
  95. data/test/lint/lists.rb +0 -143
  96. data/test/lint/sets.rb +0 -140
  97. data/test/lint/sorted_sets.rb +0 -316
  98. data/test/lint/strings.rb +0 -260
  99. data/test/lint/value_types.rb +0 -122
  100. data/test/persistence_control_commands_test.rb +0 -26
  101. data/test/pipelining_commands_test.rb +0 -242
  102. data/test/publish_subscribe_test.rb +0 -282
  103. data/test/remote_server_control_commands_test.rb +0 -118
  104. data/test/scanning_test.rb +0 -413
  105. data/test/scripting_test.rb +0 -78
  106. data/test/sentinel_command_test.rb +0 -80
  107. data/test/sentinel_test.rb +0 -255
  108. data/test/sorting_test.rb +0 -59
  109. data/test/ssl_test.rb +0 -73
  110. data/test/support/connection/hiredis.rb +0 -1
  111. data/test/support/connection/ruby.rb +0 -1
  112. data/test/support/connection/synchrony.rb +0 -17
  113. data/test/support/redis_mock.rb +0 -130
  114. data/test/support/ssl/gen_certs.sh +0 -31
  115. data/test/support/ssl/trusted-ca.crt +0 -25
  116. data/test/support/ssl/trusted-ca.key +0 -27
  117. data/test/support/ssl/trusted-cert.crt +0 -81
  118. data/test/support/ssl/trusted-cert.key +0 -28
  119. data/test/support/ssl/untrusted-ca.crt +0 -26
  120. data/test/support/ssl/untrusted-ca.key +0 -27
  121. data/test/support/ssl/untrusted-cert.crt +0 -82
  122. data/test/support/ssl/untrusted-cert.key +0 -28
  123. data/test/support/wire/synchrony.rb +0 -24
  124. data/test/support/wire/thread.rb +0 -5
  125. data/test/synchrony_driver.rb +0 -88
  126. data/test/test.conf.erb +0 -9
  127. data/test/thread_safety_test.rb +0 -62
  128. data/test/transactions_test.rb +0 -264
  129. data/test/unknown_commands_test.rb +0 -14
  130. data/test/url_param_test.rb +0 -138
data/lib/redis/errors.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Redis
2
3
  # Base error for all redis-rb errors.
3
4
  class BaseError < RuntimeError
@@ -37,4 +38,50 @@ class Redis
37
38
  # Raised when the connection was inherited by a child process.
38
39
  class InheritedError < BaseConnectionError
39
40
  end
41
+
42
+ # Raised when client options are invalid.
43
+ class InvalidClientOptionError < BaseError
44
+ end
45
+
46
+ class Cluster
47
+ # Raised when client connected to redis as cluster mode
48
+ # and some cluster subcommands were called.
49
+ class OrchestrationCommandNotSupported < BaseError
50
+ def initialize(command, subcommand = '')
51
+ str = [command, subcommand].map(&:to_s).reject(&:empty?).join(' ').upcase
52
+ msg = "#{str} command should be used with care "\
53
+ 'only by applications orchestrating Redis Cluster, like redis-trib, '\
54
+ 'and the command if used out of the right context can leave the cluster '\
55
+ 'in a wrong state or cause data loss.'
56
+ super(msg)
57
+ end
58
+ end
59
+
60
+ # Raised when error occurs on any node of cluster.
61
+ class CommandErrorCollection < BaseError
62
+ attr_reader :errors
63
+
64
+ # @param errors [Hash{String => Redis::CommandError}]
65
+ # @param error_message [String]
66
+ def initialize(errors, error_message = 'Command errors were replied on any node')
67
+ @errors = errors
68
+ super(error_message)
69
+ end
70
+ end
71
+
72
+ # Raised when cluster client can't select node.
73
+ class AmbiguousNodeError < BaseError
74
+ def initialize(command)
75
+ super("Cluster client doesn't know which node the #{command} command should be sent to.")
76
+ end
77
+ end
78
+
79
+ # Raised when commands in pipelining include cross slot keys.
80
+ class CrossSlotPipeliningError < BaseError
81
+ def initialize(keys)
82
+ super("Cluster client couldn't send pipelining to single node. "\
83
+ "The commands include cross slot keys. #{keys}")
84
+ end
85
+ end
86
+ end
40
87
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'zlib'
2
3
 
3
4
  class Redis
@@ -25,7 +26,6 @@ class Redis
25
26
  @nodes << node
26
27
  @replicas.times do |i|
27
28
  key = Zlib.crc32("#{node.id}:#{i}")
28
- raise "Node ID collision" if @ring.has_key?(key)
29
29
  @ring[key] = node
30
30
  @sorted_keys << key
31
31
  end
@@ -61,72 +61,29 @@ class Redis
61
61
  end
62
62
  end
63
63
 
64
- class << self
65
-
66
- # gem install RubyInline to use this code
67
- # Native extension to perform the binary search within the hashring.
68
- # There's a pure ruby version below so this is purely optional
69
- # for performance. In testing 20k gets and sets, the native
70
- # binary search shaved about 12% off the runtime (9sec -> 8sec).
71
- begin
72
- require 'inline'
73
- inline do |builder|
74
- builder.c <<-EOM
75
- int binary_search(VALUE ary, unsigned int r) {
76
- int upper = RARRAY_LEN(ary) - 1;
77
- int lower = 0;
78
- int idx = 0;
79
-
80
- while (lower <= upper) {
81
- idx = (lower + upper) / 2;
82
-
83
- VALUE continuumValue = RARRAY_PTR(ary)[idx];
84
- unsigned int l = NUM2UINT(continuumValue);
85
- if (l == r) {
86
- return idx;
87
- }
88
- else if (l > r) {
89
- upper = idx - 1;
90
- }
91
- else {
92
- lower = idx + 1;
93
- }
94
- }
95
- if (upper < 0) {
96
- upper = RARRAY_LEN(ary) - 1;
97
- }
98
- return upper;
99
- }
100
- EOM
101
- end
102
- rescue Exception
103
- # Find the closest index in HashRing with value <= the given value
104
- def binary_search(ary, value, &block)
105
- upper = ary.size - 1
106
- lower = 0
107
- idx = 0
108
-
109
- while(lower <= upper) do
110
- idx = (lower + upper) / 2
111
- comp = ary[idx] <=> value
112
-
113
- if comp == 0
114
- return idx
115
- elsif comp > 0
116
- upper = idx - 1
117
- else
118
- lower = idx + 1
119
- end
120
- end
121
-
122
- if upper < 0
123
- upper = ary.size - 1
124
- end
125
- return upper
64
+ # Find the closest index in HashRing with value <= the given value
65
+ def self.binary_search(ary, value, &block)
66
+ upper = ary.size - 1
67
+ lower = 0
68
+ idx = 0
69
+
70
+ while(lower <= upper) do
71
+ idx = (lower + upper) / 2
72
+ comp = ary[idx] <=> value
73
+
74
+ if comp == 0
75
+ return idx
76
+ elsif comp > 0
77
+ upper = idx - 1
78
+ else
79
+ lower = idx + 1
126
80
  end
81
+ end
127
82
 
83
+ if upper < 0
84
+ upper = ary.size - 1
128
85
  end
86
+ return upper
129
87
  end
130
-
131
88
  end
132
89
  end
@@ -1,21 +1,22 @@
1
+ # frozen_string_literal: true
1
2
  class Redis
2
- unless defined?(::BasicObject)
3
- class BasicObject
4
- instance_methods.each { |meth| undef_method(meth) unless meth =~ /\A(__|instance_eval)/ }
5
- end
6
- end
7
-
8
3
  class Pipeline
9
4
  attr_accessor :db
5
+ attr_reader :client
10
6
 
11
7
  attr :futures
12
8
 
13
- def initialize
9
+ def initialize(client)
10
+ @client = client.is_a?(Pipeline) ? client.client : client
14
11
  @with_reconnect = true
15
12
  @shutdown = false
16
13
  @futures = []
17
14
  end
18
15
 
16
+ def timeout
17
+ client.timeout
18
+ end
19
+
19
20
  def with_reconnect?
20
21
  @with_reconnect
21
22
  end
@@ -28,15 +29,23 @@ class Redis
28
29
  @shutdown
29
30
  end
30
31
 
31
- def call(command, &block)
32
+ def empty?
33
+ @futures.empty?
34
+ end
35
+
36
+ def call(command, timeout: nil, &block)
32
37
  # A pipeline that contains a shutdown should not raise ECONNRESET when
33
38
  # the connection is gone.
34
39
  @shutdown = true if command.first == :shutdown
35
- future = Future.new(command, block)
40
+ future = Future.new(command, block, timeout)
36
41
  @futures << future
37
42
  future
38
43
  end
39
44
 
45
+ def call_with_timeout(command, timeout, &block)
46
+ call(command, timeout: timeout, &block)
47
+ end
48
+
40
49
  def call_pipeline(pipeline)
41
50
  @shutdown = true if pipeline.shutdown?
42
51
  @futures.concat(pipeline.futures)
@@ -45,7 +54,11 @@ class Redis
45
54
  end
46
55
 
47
56
  def commands
48
- @futures.map { |f| f._command }
57
+ @futures.map(&:_command)
58
+ end
59
+
60
+ def timeouts
61
+ @futures.map(&:timeout)
49
62
  end
50
63
 
51
64
  def with_reconnect(val=true)
@@ -91,8 +104,20 @@ class Redis
91
104
  end
92
105
  end
93
106
 
107
+ def timeouts
108
+ if empty?
109
+ []
110
+ else
111
+ [nil, *super, nil]
112
+ end
113
+ end
114
+
94
115
  def commands
95
- [[:multi]] + super + [[:exec]]
116
+ if empty?
117
+ []
118
+ else
119
+ [[:multi]] + super + [[:exec]]
120
+ end
96
121
  end
97
122
  end
98
123
  end
@@ -106,12 +131,29 @@ class Redis
106
131
  class Future < BasicObject
107
132
  FutureNotReady = ::Redis::FutureNotReady.new
108
133
 
109
- def initialize(command, transformation)
134
+ attr_reader :timeout
135
+
136
+ def initialize(command, transformation, timeout)
110
137
  @command = command
111
138
  @transformation = transformation
139
+ @timeout = timeout
112
140
  @object = FutureNotReady
113
141
  end
114
142
 
143
+ def ==(_other)
144
+ message = +"The methods == and != are deprecated for Redis::Future and will be removed in 4.2.0"
145
+ message << " - You probably meant to call .value == or .value !="
146
+ message << " (#{::Kernel.caller(1, 1).first})\n"
147
+
148
+ if defined?(::Warning)
149
+ ::Warning.warn(message)
150
+ else
151
+ $stderr.puts(message)
152
+ end
153
+
154
+ super
155
+ end
156
+
115
157
  def inspect
116
158
  "<Redis::Future #{@command.inspect}>"
117
159
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Redis
2
3
  class SubscribedClient
3
4
  def initialize(client)
data/lib/redis/version.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Redis
2
- VERSION = "3.3.5"
3
+ VERSION = '4.1.4'
3
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.5
4
+ version: 4.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -16,74 +16,74 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2017-09-28 00:00:00.000000000 Z
19
+ date: 2020-05-01 00:00:00.000000000 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rake
22
+ name: mocha
23
23
  requirement: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "<"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 11.0.0
27
+ version: '0'
28
28
  type: :development
29
29
  prerelease: false
30
30
  version_requirements: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "<"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 11.0.0
34
+ version: '0'
35
35
  - !ruby/object:Gem::Dependency
36
- name: test-unit
36
+ name: hiredis
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 3.1.5
41
+ version: '0'
42
42
  type: :development
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: 3.1.5
48
+ version: '0'
49
+ - !ruby/object:Gem::Dependency
50
+ name: em-synchrony
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
49
63
  description: |2
50
64
  A Ruby client that tries to match Redis' API one-to-one, while still
51
- providing an idiomatic interface. It features thread-safety,
52
- client-side sharding, pipelining, and an obsession for performance.
65
+ providing an idiomatic interface.
53
66
  email:
54
67
  - redis-db@googlegroups.com
55
68
  executables: []
56
69
  extensions: []
57
70
  extra_rdoc_files: []
58
71
  files:
59
- - ".gitignore"
60
- - ".travis.yml"
61
- - ".travis/Gemfile"
62
- - ".yardopts"
63
72
  - CHANGELOG.md
64
- - Gemfile
65
73
  - LICENSE
66
74
  - README.md
67
- - Rakefile
68
- - benchmarking/logging.rb
69
- - benchmarking/pipeline.rb
70
- - benchmarking/speed.rb
71
- - benchmarking/suite.rb
72
- - benchmarking/worker.rb
73
- - examples/basic.rb
74
- - examples/consistency.rb
75
- - examples/dist_redis.rb
76
- - examples/incr-decr.rb
77
- - examples/list.rb
78
- - examples/pubsub.rb
79
- - examples/sentinel.rb
80
- - examples/sentinel/sentinel.conf
81
- - examples/sentinel/start
82
- - examples/sets.rb
83
- - examples/unicorn/config.ru
84
- - examples/unicorn/unicorn.rb
85
75
  - lib/redis.rb
86
76
  - lib/redis/client.rb
77
+ - lib/redis/cluster.rb
78
+ - lib/redis/cluster/command.rb
79
+ - lib/redis/cluster/command_loader.rb
80
+ - lib/redis/cluster/key_slot_converter.rb
81
+ - lib/redis/cluster/node.rb
82
+ - lib/redis/cluster/node_key.rb
83
+ - lib/redis/cluster/node_loader.rb
84
+ - lib/redis/cluster/option.rb
85
+ - lib/redis/cluster/slot.rb
86
+ - lib/redis/cluster/slot_loader.rb
87
87
  - lib/redis/connection.rb
88
88
  - lib/redis/connection/command_helper.rb
89
89
  - lib/redis/connection/hiredis.rb
@@ -96,85 +96,6 @@ files:
96
96
  - lib/redis/pipeline.rb
97
97
  - lib/redis/subscribe.rb
98
98
  - lib/redis/version.rb
99
- - redis.gemspec
100
- - test/bitpos_test.rb
101
- - test/blocking_commands_test.rb
102
- - test/client_test.rb
103
- - test/command_map_test.rb
104
- - test/commands_on_hashes_test.rb
105
- - test/commands_on_hyper_log_log_test.rb
106
- - test/commands_on_lists_test.rb
107
- - test/commands_on_sets_test.rb
108
- - test/commands_on_sorted_sets_test.rb
109
- - test/commands_on_strings_test.rb
110
- - test/commands_on_value_types_test.rb
111
- - test/connection_handling_test.rb
112
- - test/connection_test.rb
113
- - test/db/.gitkeep
114
- - test/distributed_blocking_commands_test.rb
115
- - test/distributed_commands_on_hashes_test.rb
116
- - test/distributed_commands_on_hyper_log_log_test.rb
117
- - test/distributed_commands_on_lists_test.rb
118
- - test/distributed_commands_on_sets_test.rb
119
- - test/distributed_commands_on_sorted_sets_test.rb
120
- - test/distributed_commands_on_strings_test.rb
121
- - test/distributed_commands_on_value_types_test.rb
122
- - test/distributed_commands_requiring_clustering_test.rb
123
- - test/distributed_connection_handling_test.rb
124
- - test/distributed_internals_test.rb
125
- - test/distributed_key_tags_test.rb
126
- - test/distributed_persistence_control_commands_test.rb
127
- - test/distributed_publish_subscribe_test.rb
128
- - test/distributed_remote_server_control_commands_test.rb
129
- - test/distributed_scripting_test.rb
130
- - test/distributed_sorting_test.rb
131
- - test/distributed_test.rb
132
- - test/distributed_transactions_test.rb
133
- - test/encoding_test.rb
134
- - test/error_replies_test.rb
135
- - test/fork_safety_test.rb
136
- - test/helper.rb
137
- - test/helper_test.rb
138
- - test/internals_test.rb
139
- - test/lint/blocking_commands.rb
140
- - test/lint/hashes.rb
141
- - test/lint/hyper_log_log.rb
142
- - test/lint/lists.rb
143
- - test/lint/sets.rb
144
- - test/lint/sorted_sets.rb
145
- - test/lint/strings.rb
146
- - test/lint/value_types.rb
147
- - test/persistence_control_commands_test.rb
148
- - test/pipelining_commands_test.rb
149
- - test/publish_subscribe_test.rb
150
- - test/remote_server_control_commands_test.rb
151
- - test/scanning_test.rb
152
- - test/scripting_test.rb
153
- - test/sentinel_command_test.rb
154
- - test/sentinel_test.rb
155
- - test/sorting_test.rb
156
- - test/ssl_test.rb
157
- - test/support/connection/hiredis.rb
158
- - test/support/connection/ruby.rb
159
- - test/support/connection/synchrony.rb
160
- - test/support/redis_mock.rb
161
- - test/support/ssl/gen_certs.sh
162
- - test/support/ssl/trusted-ca.crt
163
- - test/support/ssl/trusted-ca.key
164
- - test/support/ssl/trusted-cert.crt
165
- - test/support/ssl/trusted-cert.key
166
- - test/support/ssl/untrusted-ca.crt
167
- - test/support/ssl/untrusted-ca.key
168
- - test/support/ssl/untrusted-cert.crt
169
- - test/support/ssl/untrusted-cert.key
170
- - test/support/wire/synchrony.rb
171
- - test/support/wire/thread.rb
172
- - test/synchrony_driver.rb
173
- - test/test.conf.erb
174
- - test/thread_safety_test.rb
175
- - test/transactions_test.rb
176
- - test/unknown_commands_test.rb
177
- - test/url_param_test.rb
178
99
  homepage: https://github.com/redis/redis-rb
179
100
  licenses:
180
101
  - MIT
@@ -187,94 +108,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
108
  requirements:
188
109
  - - ">="
189
110
  - !ruby/object:Gem::Version
190
- version: '0'
111
+ version: 2.3.0
191
112
  required_rubygems_version: !ruby/object:Gem::Requirement
192
113
  requirements:
193
114
  - - ">="
194
115
  - !ruby/object:Gem::Version
195
116
  version: '0'
196
117
  requirements: []
197
- rubyforge_project:
198
- rubygems_version: 2.5.1
118
+ rubygems_version: 3.0.4
199
119
  signing_key:
200
120
  specification_version: 4
201
121
  summary: A Ruby client library for Redis
202
- test_files:
203
- - test/bitpos_test.rb
204
- - test/blocking_commands_test.rb
205
- - test/client_test.rb
206
- - test/command_map_test.rb
207
- - test/commands_on_hashes_test.rb
208
- - test/commands_on_hyper_log_log_test.rb
209
- - test/commands_on_lists_test.rb
210
- - test/commands_on_sets_test.rb
211
- - test/commands_on_sorted_sets_test.rb
212
- - test/commands_on_strings_test.rb
213
- - test/commands_on_value_types_test.rb
214
- - test/connection_handling_test.rb
215
- - test/connection_test.rb
216
- - test/db/.gitkeep
217
- - test/distributed_blocking_commands_test.rb
218
- - test/distributed_commands_on_hashes_test.rb
219
- - test/distributed_commands_on_hyper_log_log_test.rb
220
- - test/distributed_commands_on_lists_test.rb
221
- - test/distributed_commands_on_sets_test.rb
222
- - test/distributed_commands_on_sorted_sets_test.rb
223
- - test/distributed_commands_on_strings_test.rb
224
- - test/distributed_commands_on_value_types_test.rb
225
- - test/distributed_commands_requiring_clustering_test.rb
226
- - test/distributed_connection_handling_test.rb
227
- - test/distributed_internals_test.rb
228
- - test/distributed_key_tags_test.rb
229
- - test/distributed_persistence_control_commands_test.rb
230
- - test/distributed_publish_subscribe_test.rb
231
- - test/distributed_remote_server_control_commands_test.rb
232
- - test/distributed_scripting_test.rb
233
- - test/distributed_sorting_test.rb
234
- - test/distributed_test.rb
235
- - test/distributed_transactions_test.rb
236
- - test/encoding_test.rb
237
- - test/error_replies_test.rb
238
- - test/fork_safety_test.rb
239
- - test/helper.rb
240
- - test/helper_test.rb
241
- - test/internals_test.rb
242
- - test/lint/blocking_commands.rb
243
- - test/lint/hashes.rb
244
- - test/lint/hyper_log_log.rb
245
- - test/lint/lists.rb
246
- - test/lint/sets.rb
247
- - test/lint/sorted_sets.rb
248
- - test/lint/strings.rb
249
- - test/lint/value_types.rb
250
- - test/persistence_control_commands_test.rb
251
- - test/pipelining_commands_test.rb
252
- - test/publish_subscribe_test.rb
253
- - test/remote_server_control_commands_test.rb
254
- - test/scanning_test.rb
255
- - test/scripting_test.rb
256
- - test/sentinel_command_test.rb
257
- - test/sentinel_test.rb
258
- - test/sorting_test.rb
259
- - test/ssl_test.rb
260
- - test/support/connection/hiredis.rb
261
- - test/support/connection/ruby.rb
262
- - test/support/connection/synchrony.rb
263
- - test/support/redis_mock.rb
264
- - test/support/ssl/gen_certs.sh
265
- - test/support/ssl/trusted-ca.crt
266
- - test/support/ssl/trusted-ca.key
267
- - test/support/ssl/trusted-cert.crt
268
- - test/support/ssl/trusted-cert.key
269
- - test/support/ssl/untrusted-ca.crt
270
- - test/support/ssl/untrusted-ca.key
271
- - test/support/ssl/untrusted-cert.crt
272
- - test/support/ssl/untrusted-cert.key
273
- - test/support/wire/synchrony.rb
274
- - test/support/wire/thread.rb
275
- - test/synchrony_driver.rb
276
- - test/test.conf.erb
277
- - test/thread_safety_test.rb
278
- - test/transactions_test.rb
279
- - test/unknown_commands_test.rb
280
- - test/url_param_test.rb
122
+ test_files: []