elasticsearch-transport 7.1.0 → 7.13.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +13 -9
  3. data/{LICENSE.txt → LICENSE} +0 -0
  4. data/README.md +175 -76
  5. data/Rakefile +1 -1
  6. data/elasticsearch-transport.gemspec +42 -60
  7. data/lib/elasticsearch/transport/client.rb +154 -57
  8. data/lib/elasticsearch/transport/meta_header.rb +135 -0
  9. data/lib/elasticsearch/transport/redacted.rb +1 -1
  10. data/lib/elasticsearch/transport/transport/base.rb +93 -18
  11. data/lib/elasticsearch/transport/transport/connections/collection.rb +3 -6
  12. data/lib/elasticsearch/transport/transport/connections/connection.rb +8 -6
  13. data/lib/elasticsearch/transport/transport/connections/selector.rb +18 -6
  14. data/lib/elasticsearch/transport/transport/errors.rb +1 -1
  15. data/lib/elasticsearch/transport/transport/http/curb.rb +26 -9
  16. data/lib/elasticsearch/transport/transport/http/faraday.rb +27 -5
  17. data/lib/elasticsearch/transport/transport/http/manticore.rb +25 -10
  18. data/lib/elasticsearch/transport/transport/loggable.rb +1 -1
  19. data/lib/elasticsearch/transport/transport/response.rb +1 -2
  20. data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +1 -1
  21. data/lib/elasticsearch/transport/transport/sniffer.rb +20 -12
  22. data/lib/elasticsearch/transport/version.rb +2 -2
  23. data/lib/elasticsearch/transport.rb +1 -1
  24. data/lib/elasticsearch-transport.rb +1 -1
  25. data/spec/elasticsearch/connections/collection_spec.rb +266 -0
  26. data/spec/elasticsearch/connections/selector_spec.rb +174 -0
  27. data/spec/elasticsearch/transport/base_spec.rb +197 -13
  28. data/spec/elasticsearch/transport/client_spec.rb +945 -118
  29. data/spec/elasticsearch/transport/meta_header_spec.rb +265 -0
  30. data/spec/elasticsearch/transport/sniffer_spec.rb +1 -14
  31. data/spec/spec_helper.rb +25 -1
  32. data/test/integration/transport_test.rb +15 -2
  33. data/test/profile/client_benchmark_test.rb +1 -1
  34. data/test/test_helper.rb +1 -1
  35. data/test/unit/connection_test.rb +8 -3
  36. data/test/unit/response_test.rb +2 -2
  37. data/test/unit/serializer_test.rb +1 -1
  38. data/test/unit/transport_base_test.rb +2 -2
  39. data/test/unit/transport_curb_test.rb +2 -2
  40. data/test/unit/transport_faraday_test.rb +3 -3
  41. data/test/unit/transport_manticore_test.rb +30 -14
  42. metadata +87 -60
  43. data/test/unit/connection_collection_test.rb +0 -147
  44. data/test/unit/connection_selector_test.rb +0 -81
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14188a454b64314c13f7c9279741fc8df5f9f03ff9813f45aeca96abc8da7e39
4
- data.tar.gz: dfcd7ac5fb8e0b2a0450b2939272f88a329581648c47b130d62e1fcead705b44
3
+ metadata.gz: a045f07e51e54095cdd4d050a786070b35eadc7356b5167c99da881738cf5607
4
+ data.tar.gz: 854f2d899cdbbb184ce945a6b6dfa0a1f7f463bcf3d818c4e7f66a28ca81a504
5
5
  SHA512:
6
- metadata.gz: 36e9583f541ec75994cb27479c16f4624d7ea6a9e6f33360d7cac69541fe10a5c2ee2d7f20b2c1231b5fd07ab85cd32baefb236d6ab77ff11635bb23b1d9d801
7
- data.tar.gz: 95faf1016519c04dcafcd6580356dcfb00c8eeb9ef3301bf2ff3c66a90cfcc8ebf676b638ec18f92f708acb5ef01ee2f7ee137f23ed6532774b371e47b02e11f
6
+ metadata.gz: 89c3b0674a119afb4aa397bacf6282bd301862ca4a5aa107b0789c93493644f678414587dd695e3210fdbe8afaed6bf9db8a10ee1a3597767211afb2fb4d4da4
7
+ data.tar.gz: 6706d0c3441f9eed32b7e930e2cd808774bb8de1083109a6681a1433929dc407f324e97bdbaf1bf3dce9c452fc527abc3cbd7ccd071cfbff46977a93af31ba5d
data/Gemfile CHANGED
@@ -6,7 +6,7 @@
6
6
  # not use this file except in compliance with the License.
7
7
  # You may obtain a copy of the License at
8
8
  #
9
- # http://www.apache.org/licenses/LICENSE-2.0
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
10
  #
11
11
  # Unless required by applicable law or agreed to in writing,
12
12
  # software distributed under the License is distributed on an
@@ -20,19 +20,23 @@ source 'https://rubygems.org'
20
20
  # Specify your gem's dependencies in elasticsearch-transport.gemspec
21
21
  gemspec
22
22
 
23
- if File.exist? File.expand_path("../../elasticsearch-api/elasticsearch-api.gemspec", __FILE__)
24
- gem 'elasticsearch-api', :path => File.expand_path("../../elasticsearch-api", __FILE__), :require => false
23
+ if File.exist? File.expand_path('../../elasticsearch-api/elasticsearch-api.gemspec', __FILE__)
24
+ gem 'elasticsearch-api', path: File.expand_path('../../elasticsearch-api', __FILE__), require: false
25
25
  end
26
26
 
27
- if File.exist? File.expand_path("../../elasticsearch-extensions/elasticsearch-extensions.gemspec", __FILE__)
28
- gem 'elasticsearch-extensions', :path => File.expand_path("../../elasticsearch-extensions", __FILE__), :require => false
27
+ if File.exist? File.expand_path('../../elasticsearch-extensions/elasticsearch-extensions.gemspec', __FILE__)
28
+ gem 'elasticsearch-extensions', path: File.expand_path('../../elasticsearch-extensions', __FILE__), require: false
29
29
  end
30
30
 
31
- if File.exist? File.expand_path("../../elasticsearch/elasticsearch.gemspec", __FILE__)
32
- gem 'elasticsearch', :path => File.expand_path("../../elasticsearch", __FILE__), :require => false
31
+ if File.exist? File.expand_path('../../elasticsearch/elasticsearch.gemspec', __FILE__)
32
+ gem 'elasticsearch', path: File.expand_path('../../elasticsearch', __FILE__), require: false
33
33
  end
34
34
 
35
- group :development do
35
+ group :development, :test do
36
36
  gem 'rspec'
37
- gem 'pry-nav'
37
+ if defined?(JRUBY_VERSION)
38
+ gem 'pry-nav'
39
+ else
40
+ gem 'pry-byebug'
41
+ end
38
42
  end
File without changes
data/README.md CHANGED
@@ -28,12 +28,16 @@ Features overview:
28
28
  * Node reloading (based on cluster state) on errors or on demand
29
29
 
30
30
  For optimal performance, use a HTTP library which supports persistent ("keep-alive") connections,
31
- such as [Typhoeus](https://github.com/typhoeus/typhoeus).
32
- Just require the library (`require 'typhoeus'; require 'typhoeus/adapters/faraday'`) in your code,
33
- and it will be automatically used; currently these libraries will be automatically detected and used:
34
- [Patron](https://github.com/toland/patron),
35
- [HTTPClient](https://rubygems.org/gems/httpclient) and
36
- [Net::HTTP::Persistent](https://rubygems.org/gems/net-http-persistent).
31
+ such as [patron](https://github.com/toland/patron) or [Typhoeus](https://github.com/typhoeus/typhoeus).
32
+ Just require the library (`require 'patron'`) in your code, and it will be automatically used.
33
+
34
+ Currently these libraries will be automatically detected and used:
35
+ - [Patron](https://github.com/toland/patron)
36
+ - [Typhoeus](https://github.com/typhoeus/typhoeus)
37
+ - [HTTPClient](https://rubygems.org/gems/httpclient)
38
+ - [Net::HTTP::Persistent](https://rubygems.org/gems/net-http-persistent)
39
+
40
+ **Note on [Typhoeus](https://github.com/typhoeus/typhoeus)**: You need to use v1.4.0 or up since older versions are not compatible with Faraday 1.0.
37
41
 
38
42
  For detailed information, see example configurations [below](#transport-implementations).
39
43
 
@@ -69,6 +73,23 @@ Full documentation is available at <http://rubydoc.info/gems/elasticsearch-trans
69
73
 
70
74
  ## Configuration
71
75
 
76
+ * [Setting Hosts](#setting-hosts)
77
+ * [Default port](#default-port)
78
+ * [Connect using an Elastic Cloud ID](#connect-using-an-elastic-cloud-id)
79
+ * [Authentication](#authentication)
80
+ * [Logging](#logging)
81
+ * [Custom HTTP Headers](#custom-http-headers)
82
+ * [Identifying running tasks with X-Opaque-Id](#identifying-running-tasks-with-x-opaque-id)
83
+ * [Setting Timeouts](#setting-timeouts)
84
+ * [Randomizing Hosts](#randomizing-hosts)
85
+ * [Retrying on Failures](#retrying-on-failures)
86
+ * [Reloading Hosts](#reloading-hosts)
87
+ * [Connection Selector](#connection-selector)
88
+ * [Transport Implementations](#transport-implementations)
89
+ * [Serializer implementations](#serializer-implementations)
90
+ * [Exception Handling](#exception-handling)
91
+ * [Development and Community](#development-and-community)
92
+
72
93
  The client supports many configurations options for setting up and managing connections,
73
94
  configuring logging, customizing the transport library, etc.
74
95
 
@@ -106,6 +127,22 @@ Another way to configure the URL(s) is to export the `ELASTICSEARCH_URL` variabl
106
127
  The client will automatically round-robin across the hosts
107
128
  (unless you select or implement a different [connection selector](#connection-selector)).
108
129
 
130
+ ### Default port
131
+
132
+ The default port is `9200`. Please specify a port for your host(s) if they differ from this default.
133
+ Please see below for an exception to this when connecting using an Elastic Cloud ID.
134
+
135
+ ### Connect using an Elastic Cloud ID
136
+
137
+ If you are using [Elastic Cloud](https://www.elastic.co/cloud), you can provide your cloud id to the client.
138
+ You must supply your username and password separately, and optionally a port. If no port is supplied,
139
+ port 443 will be used.
140
+
141
+ Note: Do not enable sniffing when using Elastic Cloud. The nodes are behind a load balancer so
142
+ Elastic Cloud will take care of everything for you.
143
+
144
+ Elasticsearch::Client.new(cloud_id: 'name:bG9jYWxob3N0JGFiY2QkZWZnaA==', user: 'elastic', password: 'changeme')
145
+
109
146
  ### Authentication
110
147
 
111
148
  You can pass the authentication credentials, scheme and port in the host configuration hash:
@@ -128,35 +165,114 @@ use the `transport_options` option:
128
165
  Elasticsearch::Client.new url: 'https://username:password@example.com:9200',
129
166
  transport_options: { ssl: { ca_file: '/path/to/cacert.pem' } }
130
167
 
168
+ You can also use [**API Key authentication**](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html):
169
+
170
+ ``` ruby
171
+ Elasticsearch::Client.new(
172
+ host: host,
173
+ transport_options: transport_options,
174
+ api_key: credentials
175
+ )
176
+ ```
177
+
178
+ Where credentials is either the base64 encoding of `id` and `api_key` joined by a colon or a hash with the `id` and `api_key`:
179
+
180
+ ``` ruby
181
+ Elasticsearch::Client.new(
182
+ host: host,
183
+ transport_options: transport_options,
184
+ api_key: {id: 'my_id', api_key: 'my_api_key'}
185
+ )
186
+ ```
187
+
131
188
  ### Logging
132
189
 
133
- To log requests and responses to standard output with the default logger (an instance of Ruby's {::Logger} class),
134
- set the `log` argument:
190
+ To log requests and responses to standard output with the default logger (an instance of Ruby's {::Logger} class), set the `log` argument to true:
191
+
192
+ ```ruby
193
+ Elasticsearch::Client.new(log: true)
194
+ ```
195
+
196
+ You can also use [ecs-logging](https://github.com/elastic/ecs-logging-ruby). `ecs-logging` is a set of libraries that allows you to transform your application logs to structured logs that comply with the [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/ecs-reference.html):
197
+
198
+ ```ruby
199
+ logger = EcsLogging::Logger.new($stdout)
200
+ Elasticsearch::Client.new(logger: logger)
201
+ ```
135
202
 
136
- Elasticsearch::Client.new log: true
137
203
 
138
204
  To trace requests and responses in the _Curl_ format, set the `trace` argument:
139
205
 
140
- Elasticsearch::Client.new trace: true
206
+ ```ruby
207
+ Elasticsearch::Client.new(trace: true)
208
+ ```
141
209
 
142
210
  You can customize the default logger or tracer:
143
211
 
212
+ ```ruby
144
213
  client.transport.logger.formatter = proc { |s, d, p, m| "#{s}: #{m}\n" }
145
214
  client.transport.logger.level = Logger::INFO
215
+ ```
146
216
 
147
- Or, you can use a custom {::Logger} instance:
217
+ Or, you can use a custom `::Logger` instance:
148
218
 
149
- Elasticsearch::Client.new logger: Logger.new(STDERR)
219
+ ```ruby
220
+ Elasticsearch::Client.new(logger: Logger.new(STDERR))
221
+ ```
150
222
 
151
223
  You can pass the client any conforming logger implementation:
152
224
 
153
- require 'logging' # https://github.com/TwP/logging/
225
+ ```ruby
226
+ require 'logging' # https://github.com/TwP/logging/
227
+
228
+ log = Logging.logger['elasticsearch']
229
+ log.add_appenders Logging.appenders.stdout
230
+ log.level = :info
231
+
232
+ client = Elasticsearch::Client.new(logger: log)
233
+ ```
234
+
235
+ ### Custom HTTP Headers
236
+
237
+ You can set a custom HTTP header on the client's initializer:
238
+
239
+ ```ruby
240
+ client = Elasticsearch::Client.new(
241
+ transport_options: {
242
+ headers:
243
+ {user_agent: "My App"}
244
+ }
245
+ )
246
+ ```
247
+
248
+ You can also pass in `headers` as a parameter to any of the API Endpoints to set custom headers for the request:
154
249
 
155
- log = Logging.logger['elasticsearch']
156
- log.add_appenders Logging.appenders.stdout
157
- log.level = :info
250
+ ```ruby
251
+ client.search(index: 'myindex', q: 'title:test', headers: {user_agent: "My App"})
252
+ ```
253
+
254
+ ### Identifying running tasks with X-Opaque-Id
255
+
256
+ The X-Opaque-Id header allows to track certain calls, or associate certain tasks with the client that started them ([more on the Elasticsearch docs](https://www.elastic.co/guide/en/elasticsearch/reference/master/tasks.html#_identifying_running_tasks)). To use this feature, you need to set an id for `opaque_id` on the client on each request. Example:
257
+
258
+ ```ruby
259
+ client = Elasticsearch::Client.new
260
+ client.search(index: 'myindex', q: 'title:test', opaque_id: '123456')
261
+ ```
262
+ The search request will include the following HTTP Header:
263
+ ```
264
+ X-Opaque-Id: 123456
265
+ ```
158
266
 
159
- client = Elasticsearch::Client.new logger: log
267
+ You can also set a prefix for X-Opaque-Id when initializing the client. This will be prepended to the id you set before each request if you're using X-Opaque-Id. Example:
268
+ ```ruby
269
+ client = Elasticsearch::Client.new(opaque_id_prefix: 'eu-west1')
270
+ client.search(index: 'myindex', q: 'title:test', opaque_id: '123456')
271
+ ```
272
+ The request will include the following HTTP Header:
273
+ ```
274
+ X-Opaque-Id: eu-west1_123456
275
+ ```
160
276
 
161
277
  ### Setting Timeouts
162
278
 
@@ -183,11 +299,16 @@ on a different host:
183
299
 
184
300
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: true
185
301
 
186
- You can specify how many times should the client retry the request before it raises an exception
187
- (the default is 3 times):
302
+ By default, the client will retry the request 3 times. You can specify how many times to retry before it raises an exception by passing a number to `retry_on_failure`:
188
303
 
189
304
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: 5
190
305
 
306
+ These two parameters can also be used together:
307
+
308
+ ```ruby
309
+ Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_status: [502, 503], retry_on_failure: 10
310
+ ```
311
+
191
312
  ### Reloading Hosts
192
313
 
193
314
  Elasticsearch by default dynamically discovers new nodes in the cluster. You can leverage this
@@ -252,25 +373,29 @@ preferring HTTP clients with support for persistent connections.
252
373
 
253
374
  To use the [_Patron_](https://github.com/toland/patron) HTTP, for example, just require it:
254
375
 
255
- require 'patron'
376
+ ```ruby
377
+ require 'patron'
378
+ ```
256
379
 
257
380
  Then, create a new client, and the _Patron_ gem will be used as the "driver":
258
381
 
259
- client = Elasticsearch::Client.new
382
+ ```ruby
383
+ client = Elasticsearch::Client.new
260
384
 
261
- client.transport.connections.first.connection.builder.handlers
262
- # => [Faraday::Adapter::Patron]
385
+ client.transport.connections.first.connection.builder.adapter
386
+ # => Faraday::Adapter::Patron
263
387
 
264
- 10.times do
265
- client.nodes.stats(metric: 'http')['nodes'].values.each do |n|
266
- puts "#{n['name']} : #{n['http']['total_opened']}"
267
- end
268
- end
388
+ 10.times do
389
+ client.nodes.stats(metric: 'http')['nodes'].values.each do |n|
390
+ puts "#{n['name']} : #{n['http']['total_opened']}"
391
+ end
392
+ end
269
393
 
270
- # => Stiletoo : 24
271
- # => Stiletoo : 24
272
- # => Stiletoo : 24
273
- # => ...
394
+ # => Stiletoo : 24
395
+ # => Stiletoo : 24
396
+ # => Stiletoo : 24
397
+ # => ...
398
+ ```
274
399
 
275
400
  To use a specific adapter for _Faraday_, pass it as the `adapter` argument:
276
401
 
@@ -292,44 +417,35 @@ constructor, use the `transport_options` key:
292
417
 
293
418
  To configure the _Faraday_ instance directly, use a block:
294
419
 
295
- require 'typhoeus'
296
- require 'typhoeus/adapters/faraday'
420
+ require 'patron'
297
421
 
298
422
  client = Elasticsearch::Client.new(host: 'localhost', port: '9200') do |f|
299
423
  f.response :logger
300
- f.adapter :typhoeus
424
+ f.adapter :patron
301
425
  end
302
426
 
303
- You can use any standard Faraday middleware and plugins in the configuration block,
304
- for example sign the requests for the [AWS Elasticsearch service](https://aws.amazon.com/elasticsearch-service/):
305
-
306
- require 'faraday_middleware/aws_signers_v4'
307
-
308
- client = Elasticsearch::Client.new url: 'https://search-my-cluster-abc123....es.amazonaws.com' do |f|
309
- f.request :aws_signers_v4,
310
- credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY']),
311
- service_name: 'es',
312
- region: 'us-east-1'
313
- end
427
+ You can use any standard Faraday middleware and plugins in the configuration block, for example sign the requests for the [AWS Elasticsearch service](https://aws.amazon.com/elasticsearch-service/). See [the AWS documentation](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-request-signing.html#es-request-signing-ruby) for an example.
314
428
 
315
429
  You can also initialize the transport class yourself, and pass it to the client constructor
316
430
  as the `transport` argument:
317
431
 
318
- require 'typhoeus'
319
- require 'typhoeus/adapters/faraday'
432
+ ```ruby
433
+ require 'patron'
320
434
 
321
- transport_configuration = lambda do |f|
322
- f.response :logger
323
- f.adapter :typhoeus
324
- end
435
+ transport_configuration = lambda do |f|
436
+ f.response :logger
437
+ f.adapter :patron
438
+ end
325
439
 
326
- transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
327
- hosts: [ { host: 'localhost', port: '9200' } ],
328
- &transport_configuration
440
+ transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
441
+ hosts: [ { host: 'localhost', port: '9200' } ],
442
+ &transport_configuration
443
+
444
+ # Pass the transport to the client
445
+ #
446
+ client = Elasticsearch::Client.new transport: transport
447
+ ```
329
448
 
330
- # Pass the transport to the client
331
- #
332
- client = Elasticsearch::Client.new transport: transport
333
449
 
334
450
  Instead of passing the transport to the constructor, you can inject it at run time:
335
451
 
@@ -458,21 +574,4 @@ can use Ruby 2.x syntax and features.
458
574
 
459
575
  ## License
460
576
 
461
- This software is licensed under the Apache 2 license, quoted below.
462
-
463
- Licensed to Elasticsearch B.V. under one or more contributor
464
- license agreements. See the NOTICE file distributed with
465
- this work for additional information regarding copyright
466
- ownership. Elasticsearch B.V. licenses this file to you under
467
- the Apache License, Version 2.0 (the "License"); you may
468
- not use this file except in compliance with the License.
469
- You may obtain a copy of the License at
470
-
471
- http://www.apache.org/licenses/LICENSE-2.0
472
-
473
- Unless required by applicable law or agreed to in writing,
474
- software distributed under the License is distributed on an
475
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
476
- KIND, either express or implied. See the License for the
477
- specific language governing permissions and limitations
478
- under the License.
577
+ This software is licensed under the [Apache 2 license](./LICENSE).
data/Rakefile CHANGED
@@ -6,7 +6,7 @@
6
6
  # not use this file except in compliance with the License.
7
7
  # You may obtain a copy of the License at
8
8
  #
9
- # http://www.apache.org/licenses/LICENSE-2.0
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
10
  #
11
11
  # Unless required by applicable law or agreed to in writing,
12
12
  # software distributed under the License is distributed on an
@@ -6,7 +6,7 @@
6
6
  # not use this file except in compliance with the License.
7
7
  # You may obtain a copy of the License at
8
8
  #
9
- # http://www.apache.org/licenses/LICENSE-2.0
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
10
  #
11
11
  # Unless required by applicable law or agreed to in writing,
12
12
  # software distributed under the License is distributed on an
@@ -21,73 +21,55 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
21
21
  require 'elasticsearch/transport/version'
22
22
 
23
23
  Gem::Specification.new do |s|
24
- s.name = "elasticsearch-transport"
24
+ s.name = 'elasticsearch-transport'
25
25
  s.version = Elasticsearch::Transport::VERSION
26
- s.authors = ["Karel Minarik"]
27
- s.email = ["karel.minarik@elasticsearch.org"]
28
- s.summary = "Ruby client for Elasticsearch."
29
- s.homepage = "https://github.com/elasticsearch/elasticsearch-ruby/tree/master/elasticsearch-transport"
30
- s.license = "Apache-2.0"
31
-
26
+ s.authors = ['Karel Minarik']
27
+ s.email = ['karel.minarik@elasticsearch.org']
28
+ s.summary = 'Ruby client for Elasticsearch.'
29
+ s.homepage = 'https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/7.x/index.html'
30
+ s.license = 'Apache-2.0'
31
+ s.metadata = {
32
+ 'homepage_uri' => 'https://www.elastic.co/guide/en/elasticsearch/client/ruby-api/7.x/index.html',
33
+ 'changelog_uri' => 'https://github.com/elastic/elasticsearch-ruby/blob/7.x/CHANGELOG.md',
34
+ 'source_code_uri' => 'https://github.com/elastic/elasticsearch-ruby/tree/7.x/elasticsearch-transport',
35
+ 'bug_tracker_uri' => 'https://github.com/elastic/elasticsearch-ruby/issues'
36
+ }
32
37
  s.files = `git ls-files`.split($/)
33
38
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
34
39
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
35
- s.require_paths = ["lib"]
36
-
37
- s.extra_rdoc_files = [ "README.md", "LICENSE.txt" ]
38
- s.rdoc_options = [ "--charset=UTF-8" ]
39
-
40
- s.required_ruby_version = '>= 1.9'
41
-
42
- s.add_dependency "multi_json"
43
- s.add_dependency "faraday"
44
-
45
- if defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
46
- s.add_dependency "system_timer"
47
- end
48
-
49
- s.add_development_dependency "bundler"
50
-
51
- if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
52
- s.add_development_dependency "rake", "~> 11.1"
53
- else
54
- s.add_development_dependency "rake", "< 11.0"
55
- end
56
-
57
- s.add_development_dependency "ansi"
58
- s.add_development_dependency "shoulda-context"
59
- s.add_development_dependency "mocha"
60
- s.add_development_dependency "yard"
61
- s.add_development_dependency "pry"
40
+ s.require_paths = ['lib']
62
41
 
63
- # Gems for testing integrations
64
- s.add_development_dependency "curb" unless defined? JRUBY_VERSION
65
- s.add_development_dependency "patron" unless defined? JRUBY_VERSION
66
- s.add_development_dependency "typhoeus", '~> 0.6'
67
- s.add_development_dependency "net-http-persistent"
68
- s.add_development_dependency "manticore", '~> 0.6' if defined? JRUBY_VERSION
69
- s.add_development_dependency "hashie"
42
+ s.extra_rdoc_files = [ 'README.md', 'LICENSE' ]
43
+ s.rdoc_options = [ '--charset=UTF-8' ]
70
44
 
71
- # Prevent unit test failures on Ruby 1.8
72
- if defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
73
- s.add_development_dependency "test-unit", '~> 2'
74
- s.add_development_dependency "json", '~> 1.8'
75
- end
45
+ s.required_ruby_version = '>= 2.4'
76
46
 
77
- if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
78
- s.add_development_dependency "minitest"
79
- s.add_development_dependency "minitest-reporters"
80
- s.add_development_dependency "elasticsearch-extensions"
81
- s.add_development_dependency "ruby-prof" unless defined?(JRUBY_VERSION) || defined?(Rubinius)
82
- s.add_development_dependency "require-prof" unless defined?(JRUBY_VERSION) || defined?(Rubinius)
83
- s.add_development_dependency "simplecov"
84
- s.add_development_dependency "simplecov-rcov"
85
- s.add_development_dependency "cane"
86
- end
47
+ s.add_dependency 'multi_json'
48
+ s.add_dependency 'faraday', '~> 1'
87
49
 
88
- if defined?(RUBY_VERSION) && RUBY_VERSION > '2.2'
89
- s.add_development_dependency "test-unit", '~> 2'
90
- end
50
+ s.add_development_dependency 'cane'
51
+ s.add_development_dependency 'curb' unless defined? JRUBY_VERSION
52
+ s.add_development_dependency 'elasticsearch-extensions'
53
+ s.add_development_dependency 'minitest'
54
+ s.add_development_dependency 'minitest-reporters'
55
+ s.add_development_dependency 'rake', '~> 13'
56
+ s.add_development_dependency 'require-prof' unless defined?(JRUBY_VERSION) || defined?(Rubinius)
57
+ s.add_development_dependency 'ruby-prof' unless defined?(JRUBY_VERSION) || defined?(Rubinius)
58
+ s.add_development_dependency 'simplecov', '~> 0.17', '< 0.18'
59
+ s.add_development_dependency 'simplecov-rcov'
60
+ s.add_development_dependency 'ansi'
61
+ s.add_development_dependency 'hashie'
62
+ s.add_development_dependency 'httpclient'
63
+ s.add_development_dependency 'manticore', '~> 0.6' if defined? JRUBY_VERSION
64
+ s.add_development_dependency 'mocha'
65
+ s.add_development_dependency 'net-http-persistent'
66
+ s.add_development_dependency 'patron' unless defined? JRUBY_VERSION
67
+ s.add_development_dependency 'pry'
68
+ s.add_development_dependency 'shoulda-context'
69
+ s.add_development_dependency 'test-unit', '~> 2'
70
+ s.add_development_dependency 'typhoeus', '~> 1.4'
71
+ s.add_development_dependency 'yard'
72
+ s.add_development_dependency 'bundler'
91
73
 
92
74
  s.description = <<-DESC.gsub(/^ /, '')
93
75
  Ruby client for Elasticsearch. See the `elasticsearch` gem for full integration.