elasticsearch-transport 7.5.0 → 7.13.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -11
  3. data/README.md +158 -58
  4. data/Rakefile +16 -3
  5. data/elasticsearch-transport.gemspec +57 -63
  6. data/lib/elasticsearch/transport/client.rb +150 -56
  7. data/lib/elasticsearch/transport/meta_header.rb +135 -0
  8. data/lib/elasticsearch/transport/redacted.rb +16 -3
  9. data/lib/elasticsearch/transport/transport/base.rb +32 -12
  10. data/lib/elasticsearch/transport/transport/connections/collection.rb +18 -8
  11. data/lib/elasticsearch/transport/transport/connections/connection.rb +23 -8
  12. data/lib/elasticsearch/transport/transport/connections/selector.rb +16 -3
  13. data/lib/elasticsearch/transport/transport/errors.rb +16 -3
  14. data/lib/elasticsearch/transport/transport/http/curb.rb +16 -3
  15. data/lib/elasticsearch/transport/transport/http/faraday.rb +27 -6
  16. data/lib/elasticsearch/transport/transport/http/manticore.rb +16 -3
  17. data/lib/elasticsearch/transport/transport/loggable.rb +16 -3
  18. data/lib/elasticsearch/transport/transport/response.rb +16 -4
  19. data/lib/elasticsearch/transport/transport/serializer/multi_json.rb +16 -3
  20. data/lib/elasticsearch/transport/transport/sniffer.rb +35 -15
  21. data/lib/elasticsearch/transport/version.rb +17 -4
  22. data/lib/elasticsearch/transport.rb +16 -3
  23. data/lib/elasticsearch-transport.rb +16 -3
  24. data/spec/elasticsearch/connections/collection_spec.rb +28 -3
  25. data/spec/elasticsearch/connections/selector_spec.rb +16 -3
  26. data/spec/elasticsearch/transport/base_spec.rb +60 -38
  27. data/spec/elasticsearch/transport/client_spec.rb +628 -132
  28. data/spec/elasticsearch/transport/meta_header_spec.rb +265 -0
  29. data/spec/elasticsearch/transport/sniffer_spec.rb +16 -16
  30. data/spec/spec_helper.rb +19 -1
  31. data/test/integration/transport_test.rb +30 -4
  32. data/test/profile/client_benchmark_test.rb +16 -3
  33. data/test/test_helper.rb +16 -3
  34. data/test/unit/connection_test.rb +23 -5
  35. data/test/unit/response_test.rb +17 -4
  36. data/test/unit/serializer_test.rb +16 -3
  37. data/test/unit/transport_base_test.rb +17 -4
  38. data/test/unit/transport_curb_test.rb +16 -3
  39. data/test/unit/transport_faraday_test.rb +18 -5
  40. data/test/unit/transport_manticore_test.rb +29 -16
  41. metadata +70 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 271a43455912981268da637666dddf8d9201752ba7b88787284dfc79039ac0e7
4
- data.tar.gz: 92f3307366179b9eb868b2224e94b87570ffee878a9013d9419f10271731aa6e
3
+ metadata.gz: a045f07e51e54095cdd4d050a786070b35eadc7356b5167c99da881738cf5607
4
+ data.tar.gz: 854f2d899cdbbb184ce945a6b6dfa0a1f7f463bcf3d818c4e7f66a28ca81a504
5
5
  SHA512:
6
- metadata.gz: 1ead63661251f6b672a28f3bd759b86049f159225bebf2c053fbaaf5a03d3d974082131595980a2e44ef928fdcc640ce85e271398d5e3ac13cd0daaf5daf84a9
7
- data.tar.gz: 9e99b4a07e919000b06864741380293eb073b0a3ad71e227edf3a9a443b12a4ca26cbe573d33429748561059bec51b4a315345e52d15538e6dab0d84230b8aa2
6
+ metadata.gz: 89c3b0674a119afb4aa397bacf6282bd301862ca4a5aa107b0789c93493644f678414587dd695e3210fdbe8afaed6bf9db8a10ee1a3597767211afb2fb4d4da4
7
+ data.tar.gz: 6706d0c3441f9eed32b7e930e2cd808774bb8de1083109a6681a1433929dc407f324e97bdbaf1bf3dce9c452fc527abc3cbd7ccd071cfbff46977a93af31ba5d
data/Gemfile CHANGED
@@ -1,25 +1,42 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  source 'https://rubygems.org'
6
19
 
7
20
  # Specify your gem's dependencies in elasticsearch-transport.gemspec
8
21
  gemspec
9
22
 
10
- if File.exist? File.expand_path("../../elasticsearch-api/elasticsearch-api.gemspec", __FILE__)
11
- 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
12
25
  end
13
26
 
14
- if File.exist? File.expand_path("../../elasticsearch-extensions/elasticsearch-extensions.gemspec", __FILE__)
15
- 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
16
29
  end
17
30
 
18
- if File.exist? File.expand_path("../../elasticsearch/elasticsearch.gemspec", __FILE__)
19
- 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
20
33
  end
21
34
 
22
- group :development do
35
+ group :development, :test do
23
36
  gem 'rspec'
24
- gem 'pry-nav'
37
+ if defined?(JRUBY_VERSION)
38
+ gem 'pry-nav'
39
+ else
40
+ gem 'pry-byebug'
41
+ end
25
42
  end
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
 
@@ -115,7 +136,7 @@ Please see below for an exception to this when connecting using an Elastic Cloud
115
136
 
116
137
  If you are using [Elastic Cloud](https://www.elastic.co/cloud), you can provide your cloud id to the client.
117
138
  You must supply your username and password separately, and optionally a port. If no port is supplied,
118
- port 9243 will be used.
139
+ port 443 will be used.
119
140
 
120
141
  Note: Do not enable sniffing when using Elastic Cloud. The nodes are behind a load balancer so
121
142
  Elastic Cloud will take care of everything for you.
@@ -144,35 +165,114 @@ use the `transport_options` option:
144
165
  Elasticsearch::Client.new url: 'https://username:password@example.com:9200',
145
166
  transport_options: { ssl: { ca_file: '/path/to/cacert.pem' } }
146
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
+
147
188
  ### Logging
148
189
 
149
- To log requests and responses to standard output with the default logger (an instance of Ruby's {::Logger} class),
150
- 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
+ ```
151
202
 
152
- Elasticsearch::Client.new log: true
153
203
 
154
204
  To trace requests and responses in the _Curl_ format, set the `trace` argument:
155
205
 
156
- Elasticsearch::Client.new trace: true
206
+ ```ruby
207
+ Elasticsearch::Client.new(trace: true)
208
+ ```
157
209
 
158
210
  You can customize the default logger or tracer:
159
211
 
212
+ ```ruby
160
213
  client.transport.logger.formatter = proc { |s, d, p, m| "#{s}: #{m}\n" }
161
214
  client.transport.logger.level = Logger::INFO
215
+ ```
162
216
 
163
217
  Or, you can use a custom `::Logger` instance:
164
218
 
165
- Elasticsearch::Client.new logger: Logger.new(STDERR)
219
+ ```ruby
220
+ Elasticsearch::Client.new(logger: Logger.new(STDERR))
221
+ ```
166
222
 
167
223
  You can pass the client any conforming logger implementation:
168
224
 
169
- 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:
249
+
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
170
255
 
171
- log = Logging.logger['elasticsearch']
172
- log.add_appenders Logging.appenders.stdout
173
- log.level = :info
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:
174
257
 
175
- client = Elasticsearch::Client.new logger: log
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
+ ```
266
+
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
+ ```
176
276
 
177
277
  ### Setting Timeouts
178
278
 
@@ -199,11 +299,16 @@ on a different host:
199
299
 
200
300
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: true
201
301
 
202
- You can specify how many times should the client retry the request before it raises an exception
203
- (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`:
204
303
 
205
304
  Elasticsearch::Client.new hosts: ['localhost:9200', 'localhost:9201'], retry_on_failure: 5
206
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
+
207
312
  ### Reloading Hosts
208
313
 
209
314
  Elasticsearch by default dynamically discovers new nodes in the cluster. You can leverage this
@@ -268,25 +373,29 @@ preferring HTTP clients with support for persistent connections.
268
373
 
269
374
  To use the [_Patron_](https://github.com/toland/patron) HTTP, for example, just require it:
270
375
 
271
- require 'patron'
376
+ ```ruby
377
+ require 'patron'
378
+ ```
272
379
 
273
380
  Then, create a new client, and the _Patron_ gem will be used as the "driver":
274
381
 
275
- client = Elasticsearch::Client.new
382
+ ```ruby
383
+ client = Elasticsearch::Client.new
276
384
 
277
- client.transport.connections.first.connection.builder.handlers
278
- # => [Faraday::Adapter::Patron]
385
+ client.transport.connections.first.connection.builder.adapter
386
+ # => Faraday::Adapter::Patron
279
387
 
280
- 10.times do
281
- client.nodes.stats(metric: 'http')['nodes'].values.each do |n|
282
- puts "#{n['name']} : #{n['http']['total_opened']}"
283
- end
284
- 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
285
393
 
286
- # => Stiletoo : 24
287
- # => Stiletoo : 24
288
- # => Stiletoo : 24
289
- # => ...
394
+ # => Stiletoo : 24
395
+ # => Stiletoo : 24
396
+ # => Stiletoo : 24
397
+ # => ...
398
+ ```
290
399
 
291
400
  To use a specific adapter for _Faraday_, pass it as the `adapter` argument:
292
401
 
@@ -308,44 +417,35 @@ constructor, use the `transport_options` key:
308
417
 
309
418
  To configure the _Faraday_ instance directly, use a block:
310
419
 
311
- require 'typhoeus'
312
- require 'typhoeus/adapters/faraday'
420
+ require 'patron'
313
421
 
314
422
  client = Elasticsearch::Client.new(host: 'localhost', port: '9200') do |f|
315
423
  f.response :logger
316
- f.adapter :typhoeus
424
+ f.adapter :patron
317
425
  end
318
426
 
319
- You can use any standard Faraday middleware and plugins in the configuration block,
320
- for example sign the requests for the [AWS Elasticsearch service](https://aws.amazon.com/elasticsearch-service/):
321
-
322
- require 'faraday_middleware/aws_signers_v4'
323
-
324
- client = Elasticsearch::Client.new url: 'https://search-my-cluster-abc123....es.amazonaws.com' do |f|
325
- f.request :aws_signers_v4,
326
- credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY'], ENV['AWS_SECRET_ACCESS_KEY']),
327
- service_name: 'es',
328
- region: 'us-east-1'
329
- 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.
330
428
 
331
429
  You can also initialize the transport class yourself, and pass it to the client constructor
332
430
  as the `transport` argument:
333
431
 
334
- require 'typhoeus'
335
- require 'typhoeus/adapters/faraday'
432
+ ```ruby
433
+ require 'patron'
336
434
 
337
- transport_configuration = lambda do |f|
338
- f.response :logger
339
- f.adapter :typhoeus
340
- end
435
+ transport_configuration = lambda do |f|
436
+ f.response :logger
437
+ f.adapter :patron
438
+ end
341
439
 
342
- transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
343
- hosts: [ { host: 'localhost', port: '9200' } ],
344
- &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
+ ```
345
448
 
346
- # Pass the transport to the client
347
- #
348
- client = Elasticsearch::Client.new transport: transport
349
449
 
350
450
  Instead of passing the transport to the constructor, you can inject it at run time:
351
451
 
data/Rakefile CHANGED
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  require "bundler/gem_tasks"
6
19
 
@@ -1,6 +1,19 @@
1
- # Licensed to Elasticsearch B.V under one or more agreements.
2
- # Elasticsearch B.V licenses this file to you under the Apache 2.0 License.
3
- # See the LICENSE file in the project root for more information
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
4
17
 
5
18
  # coding: utf-8
6
19
  lib = File.expand_path('../lib', __FILE__)
@@ -8,74 +21,55 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
8
21
  require 'elasticsearch/transport/version'
9
22
 
10
23
  Gem::Specification.new do |s|
11
- s.name = "elasticsearch-transport"
24
+ s.name = 'elasticsearch-transport'
12
25
  s.version = Elasticsearch::Transport::VERSION
13
- s.authors = ["Karel Minarik"]
14
- s.email = ["karel.minarik@elasticsearch.org"]
15
- s.summary = "Ruby client for Elasticsearch."
16
- s.homepage = "https://github.com/elasticsearch/elasticsearch-ruby/tree/master/elasticsearch-transport"
17
- s.license = "Apache-2.0"
18
-
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
+ }
19
37
  s.files = `git ls-files`.split($/)
20
38
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
39
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
22
- s.require_paths = ["lib"]
23
-
24
- s.extra_rdoc_files = [ "README.md", "LICENSE" ]
25
- s.rdoc_options = [ "--charset=UTF-8" ]
26
-
27
- s.required_ruby_version = '>= 1.9'
28
-
29
- s.add_dependency "multi_json"
30
- s.add_dependency "faraday", '>= 0.14', "< 1"
31
-
32
- if defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
33
- s.add_dependency "system_timer"
34
- end
35
-
36
- s.add_development_dependency "bundler"
37
-
38
- if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
39
- s.add_development_dependency "rake", "~> 11.1"
40
- else
41
- s.add_development_dependency "rake", "< 11.0"
42
- end
43
-
44
- s.add_development_dependency "ansi"
45
- s.add_development_dependency "shoulda-context"
46
- s.add_development_dependency "mocha"
47
- s.add_development_dependency "yard"
48
- s.add_development_dependency "pry"
40
+ s.require_paths = ['lib']
49
41
 
50
- # Gems for testing integrations
51
- s.add_development_dependency "curb" unless defined? JRUBY_VERSION
52
- s.add_development_dependency "patron" unless defined? JRUBY_VERSION
53
- s.add_development_dependency "typhoeus", '~> 0.6'
54
- s.add_development_dependency "net-http-persistent"
55
- s.add_development_dependency "httpclient"
56
- s.add_development_dependency "manticore", '~> 0.6' if defined? JRUBY_VERSION
57
- s.add_development_dependency "hashie"
42
+ s.extra_rdoc_files = [ 'README.md', 'LICENSE' ]
43
+ s.rdoc_options = [ '--charset=UTF-8' ]
58
44
 
59
- # Prevent unit test failures on Ruby 1.8
60
- if defined?(RUBY_VERSION) && RUBY_VERSION < '1.9'
61
- s.add_development_dependency "test-unit", '~> 2'
62
- s.add_development_dependency "json", '~> 1.8'
63
- end
45
+ s.required_ruby_version = '>= 2.4'
64
46
 
65
- if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
66
- s.add_development_dependency "minitest"
67
- s.add_development_dependency "minitest-reporters"
68
- s.add_development_dependency "elasticsearch-extensions"
69
- s.add_development_dependency "ruby-prof" unless defined?(JRUBY_VERSION) || defined?(Rubinius)
70
- s.add_development_dependency "require-prof" unless defined?(JRUBY_VERSION) || defined?(Rubinius)
71
- s.add_development_dependency "simplecov", '~> 0.17', '< 0.18'
72
- s.add_development_dependency "simplecov-rcov"
73
- s.add_development_dependency "cane"
74
- end
47
+ s.add_dependency 'multi_json'
48
+ s.add_dependency 'faraday', '~> 1'
75
49
 
76
- if defined?(RUBY_VERSION) && RUBY_VERSION > '2.2'
77
- s.add_development_dependency "test-unit", '~> 2'
78
- 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'
79
73
 
80
74
  s.description = <<-DESC.gsub(/^ /, '')
81
75
  Ruby client for Elasticsearch. See the `elasticsearch` gem for full integration.