elasticsearch-transport 7.5.0 → 7.6.0.pre
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 +4 -4
- data/Gemfile +11 -7
- data/README.md +85 -32
- data/elasticsearch-transport.gemspec +39 -63
- data/lib/elasticsearch/transport/client.rb +45 -10
- data/lib/elasticsearch/transport/transport/http/faraday.rb +1 -1
- data/lib/elasticsearch/transport/version.rb +1 -1
- data/spec/elasticsearch/transport/client_spec.rb +100 -24
- data/spec/spec_helper.rb +2 -1
- metadata +62 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b01c3835be0c7e8baced5fd1490e36b9a80f42cfb53a85beb255944d2aa4614
|
4
|
+
data.tar.gz: '08931111bab05fdd725afe95de0b40f643c96f30d82848d0899fe017ee999cf6'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d92acc2c7d1a085001db7c976c8cbdb6787df88ea6162be50b5205b7846f3bf0e182b53f6766dfd43a0b61a0911291717b0579f98b351f02b8e5eb5d8bd04b3
|
7
|
+
data.tar.gz: 9bba1344253d072808f1468e5dc6fe0a9fe6815cf6a1f2831491c716ad9dd657b714a52c14432a85543a1e3e96a123d173061b74a622e051a35c26826204e464
|
data/Gemfile
CHANGED
@@ -7,19 +7,23 @@ source 'https://rubygems.org'
|
|
7
7
|
# Specify your gem's dependencies in elasticsearch-transport.gemspec
|
8
8
|
gemspec
|
9
9
|
|
10
|
-
if File.exist? File.expand_path(
|
11
|
-
gem 'elasticsearch-api', :
|
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
|
12
12
|
end
|
13
13
|
|
14
|
-
if File.exist? File.expand_path(
|
15
|
-
gem 'elasticsearch-extensions', :
|
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
|
16
16
|
end
|
17
17
|
|
18
|
-
if File.exist? File.expand_path(
|
19
|
-
gem 'elasticsearch', :
|
18
|
+
if File.exist? File.expand_path('../../elasticsearch/elasticsearch.gemspec', __FILE__)
|
19
|
+
gem 'elasticsearch', path: File.expand_path('../../elasticsearch', __FILE__), require: false
|
20
20
|
end
|
21
21
|
|
22
22
|
group :development do
|
23
23
|
gem 'rspec'
|
24
|
-
|
24
|
+
if defined?(JRUBY_VERSION)
|
25
|
+
gem 'pry-nav'
|
26
|
+
else
|
27
|
+
gem 'pry-byebug'
|
28
|
+
end
|
25
29
|
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 [
|
32
|
-
Just require the library (`require '
|
33
|
-
and it will be automatically used
|
34
|
-
|
35
|
-
|
36
|
-
[
|
31
|
+
such as [patron](https://github.com/toland/patron).
|
32
|
+
Just require the library (`require 'patron'`) in your code,
|
33
|
+
and it will be automatically used.
|
34
|
+
|
35
|
+
Currently these libraries will be automatically detected and used:
|
36
|
+
- [Patron](https://github.com/toland/patron)
|
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)**: Typhoeus is compatible and will be automatically detected too. However, the latest release (v1.3.1 at the moment of writing this) is not compatible with Faraday 1.0. [It still uses the deprecated `Faraday::Error` namespace](https://github.com/typhoeus/typhoeus/blob/v1.3.1/lib/typhoeus/adapters/faraday.rb#L100). If you want to use it with this gem, we suggest getting `master` from GitHub, since this has been fixed for v1.4.0. We'll update this if/when v1.4.0 is released.a
|
37
41
|
|
38
42
|
For detailed information, see example configurations [below](#transport-implementations).
|
39
43
|
|
@@ -69,6 +73,22 @@ 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
|
+
* [Identifying running tasks with X-Opaque-Id](#identifying-running-tasks-with-x-opaque-id)
|
82
|
+
* [Setting Timeouts](#setting-timeouts)
|
83
|
+
* [Randomizing Hosts](#randomizing-hosts)
|
84
|
+
* [Retrying on Failures](#retrying-on-failures)
|
85
|
+
* [Reloading Hosts](#reloading-hosts)
|
86
|
+
* [Connection Selector](#connection-selector)
|
87
|
+
* [Transport Implementations](#transport-implementations)
|
88
|
+
* [Serializer implementations](#serializer-implementations)
|
89
|
+
* [Exception Handling](#exception-handling)
|
90
|
+
* [Development and Community](#development-and-community)
|
91
|
+
|
72
92
|
The client supports many configurations options for setting up and managing connections,
|
73
93
|
configuring logging, customizing the transport library, etc.
|
74
94
|
|
@@ -144,6 +164,26 @@ use the `transport_options` option:
|
|
144
164
|
Elasticsearch::Client.new url: 'https://username:password@example.com:9200',
|
145
165
|
transport_options: { ssl: { ca_file: '/path/to/cacert.pem' } }
|
146
166
|
|
167
|
+
You can also use [**API Key authentication**](https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html):
|
168
|
+
|
169
|
+
``` ruby
|
170
|
+
Elasticsearch::Client.new(
|
171
|
+
host: host,
|
172
|
+
transport_options: transport_options,
|
173
|
+
api_key: credentials
|
174
|
+
)
|
175
|
+
```
|
176
|
+
|
177
|
+
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`:
|
178
|
+
|
179
|
+
``` ruby
|
180
|
+
Elasticsearch::Client.new(
|
181
|
+
host: host,
|
182
|
+
transport_options: transport_options,
|
183
|
+
api_key: {id: 'my_id', api_key: 'my_api_key'}
|
184
|
+
)
|
185
|
+
```
|
186
|
+
|
147
187
|
### Logging
|
148
188
|
|
149
189
|
To log requests and responses to standard output with the default logger (an instance of Ruby's {::Logger} class),
|
@@ -173,6 +213,28 @@ You can pass the client any conforming logger implementation:
|
|
173
213
|
log.level = :info
|
174
214
|
|
175
215
|
client = Elasticsearch::Client.new logger: log
|
216
|
+
### Identifying running tasks with X-Opaque-Id
|
217
|
+
|
218
|
+
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:
|
219
|
+
|
220
|
+
```ruby
|
221
|
+
client = Elasticsearch::Client.new
|
222
|
+
client.search(index: 'myindex', q: 'title:test', opaque_id: '123456')
|
223
|
+
```
|
224
|
+
The search request will include the following HTTP Header:
|
225
|
+
```
|
226
|
+
X-Opaque-Id: 123456
|
227
|
+
```
|
228
|
+
|
229
|
+
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:
|
230
|
+
```ruby
|
231
|
+
client = Elasticsearch::Client.new(opaque_id_prefix: 'eu-west1')
|
232
|
+
client.search(index: 'myindex', q: 'title:test', opaque_id: '123456')
|
233
|
+
```
|
234
|
+
The request will include the following HTTP Header:
|
235
|
+
```
|
236
|
+
X-Opaque-Id: eu-west1_123456
|
237
|
+
```
|
176
238
|
|
177
239
|
### Setting Timeouts
|
178
240
|
|
@@ -308,44 +370,35 @@ constructor, use the `transport_options` key:
|
|
308
370
|
|
309
371
|
To configure the _Faraday_ instance directly, use a block:
|
310
372
|
|
311
|
-
require '
|
312
|
-
require 'typhoeus/adapters/faraday'
|
373
|
+
require 'patron'
|
313
374
|
|
314
375
|
client = Elasticsearch::Client.new(host: 'localhost', port: '9200') do |f|
|
315
376
|
f.response :logger
|
316
|
-
f.adapter :
|
377
|
+
f.adapter :patron
|
317
378
|
end
|
318
379
|
|
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
|
380
|
+
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
381
|
|
331
382
|
You can also initialize the transport class yourself, and pass it to the client constructor
|
332
383
|
as the `transport` argument:
|
333
384
|
|
334
|
-
|
335
|
-
|
385
|
+
```ruby
|
386
|
+
require 'patron'
|
336
387
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
388
|
+
transport_configuration = lambda do |f|
|
389
|
+
f.response :logger
|
390
|
+
f.adapter :patron
|
391
|
+
end
|
341
392
|
|
342
|
-
|
343
|
-
|
344
|
-
|
393
|
+
transport = Elasticsearch::Transport::Transport::HTTP::Faraday.new \
|
394
|
+
hosts: [ { host: 'localhost', port: '9200' } ],
|
395
|
+
&transport_configuration
|
396
|
+
|
397
|
+
# Pass the transport to the client
|
398
|
+
#
|
399
|
+
client = Elasticsearch::Client.new transport: transport
|
400
|
+
```
|
345
401
|
|
346
|
-
# Pass the transport to the client
|
347
|
-
#
|
348
|
-
client = Elasticsearch::Client.new transport: transport
|
349
402
|
|
350
403
|
Instead of passing the transport to the constructor, you can inject it at run time:
|
351
404
|
|
@@ -8,74 +8,50 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
8
8
|
require 'elasticsearch/transport/version'
|
9
9
|
|
10
10
|
Gem::Specification.new do |s|
|
11
|
-
s.name =
|
11
|
+
s.name = 'elasticsearch-transport'
|
12
12
|
s.version = Elasticsearch::Transport::VERSION
|
13
|
-
s.authors = [
|
14
|
-
s.email = [
|
15
|
-
s.summary =
|
16
|
-
s.homepage =
|
17
|
-
s.license =
|
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
18
|
|
19
19
|
s.files = `git ls-files`.split($/)
|
20
20
|
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
21
|
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
22
|
-
s.require_paths = [
|
23
|
-
|
24
|
-
s.extra_rdoc_files = [
|
25
|
-
s.rdoc_options = [
|
26
|
-
|
27
|
-
s.required_ruby_version = '>=
|
28
|
-
|
29
|
-
s.add_dependency
|
30
|
-
s.add_dependency
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
s.add_development_dependency
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
s.add_development_dependency
|
45
|
-
s.add_development_dependency
|
46
|
-
s.add_development_dependency
|
47
|
-
s.add_development_dependency
|
48
|
-
s.add_development_dependency
|
49
|
-
|
50
|
-
|
51
|
-
s.add_development_dependency
|
52
|
-
s.add_development_dependency
|
53
|
-
s.add_development_dependency
|
54
|
-
s.add_development_dependency
|
55
|
-
s.add_development_dependency "httpclient"
|
56
|
-
s.add_development_dependency "manticore", '~> 0.6' if defined? JRUBY_VERSION
|
57
|
-
s.add_development_dependency "hashie"
|
58
|
-
|
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
|
64
|
-
|
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
|
75
|
-
|
76
|
-
if defined?(RUBY_VERSION) && RUBY_VERSION > '2.2'
|
77
|
-
s.add_development_dependency "test-unit", '~> 2'
|
78
|
-
end
|
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 = '>= 2.4'
|
28
|
+
|
29
|
+
s.add_dependency 'multi_json'
|
30
|
+
s.add_dependency 'faraday', '~> 1'
|
31
|
+
|
32
|
+
s.add_development_dependency 'cane'
|
33
|
+
s.add_development_dependency 'curb' unless defined? JRUBY_VERSION
|
34
|
+
s.add_development_dependency 'elasticsearch-extensions'
|
35
|
+
s.add_development_dependency 'minitest'
|
36
|
+
s.add_development_dependency 'minitest-reporters'
|
37
|
+
s.add_development_dependency 'rake', '~> 11.1'
|
38
|
+
s.add_development_dependency 'require-prof' unless defined?(JRUBY_VERSION) || defined?(Rubinius)
|
39
|
+
s.add_development_dependency 'ruby-prof' unless defined?(JRUBY_VERSION) || defined?(Rubinius)
|
40
|
+
s.add_development_dependency 'simplecov', '~> 0.17', '< 0.18'
|
41
|
+
s.add_development_dependency 'simplecov-rcov'
|
42
|
+
s.add_development_dependency 'ansi'
|
43
|
+
s.add_development_dependency 'hashie'
|
44
|
+
s.add_development_dependency 'httpclient'
|
45
|
+
s.add_development_dependency 'manticore', '~> 0.6' if defined? JRUBY_VERSION
|
46
|
+
s.add_development_dependency 'mocha'
|
47
|
+
s.add_development_dependency 'net-http-persistent'
|
48
|
+
s.add_development_dependency 'patron' unless defined? JRUBY_VERSION
|
49
|
+
s.add_development_dependency 'pry'
|
50
|
+
s.add_development_dependency 'shoulda-context'
|
51
|
+
s.add_development_dependency 'test-unit', '~> 2'
|
52
|
+
s.add_development_dependency 'typhoeus', '~> 0.6'
|
53
|
+
s.add_development_dependency 'yard'
|
54
|
+
s.add_development_dependency 'bundler'
|
79
55
|
|
80
56
|
s.description = <<-DESC.gsub(/^ /, '')
|
81
57
|
Ruby client for Elasticsearch. See the `elasticsearch` gem for full integration.
|
@@ -99,6 +99,11 @@ module Elasticsearch
|
|
99
99
|
# The default is false. Responses will automatically be inflated if they are compressed.
|
100
100
|
# If a custom transport object is used, it must handle the request compression and response inflation.
|
101
101
|
#
|
102
|
+
# @option api_key [String, Hash] :api_key Use API Key Authentication, either the base64 encoding of `id` and `api_key`
|
103
|
+
# joined by a colon as a String, or a hash with the `id` and `api_key` values.
|
104
|
+
# @option opaque_id_prefix [String] :opaque_id_prefix set a prefix for X-Opaque-Id when initializing the client. This
|
105
|
+
# will be prepended to the id you set before each request if you're using X-Opaque-Id
|
106
|
+
#
|
102
107
|
# @yield [faraday] Access and configure the `Faraday::Connection` instance directly with a block
|
103
108
|
#
|
104
109
|
def initialize(arguments={}, &block)
|
@@ -114,6 +119,8 @@ module Elasticsearch
|
|
114
119
|
@arguments[:http] ||= {}
|
115
120
|
@options[:http] ||= {}
|
116
121
|
|
122
|
+
set_api_key if (@api_key = @arguments[:api_key])
|
123
|
+
|
117
124
|
@seeds = extract_cloud_creds(@arguments)
|
118
125
|
@seeds ||= __extract_hosts(@arguments[:hosts] ||
|
119
126
|
@arguments[:host] ||
|
@@ -123,9 +130,10 @@ module Elasticsearch
|
|
123
130
|
DEFAULT_HOST)
|
124
131
|
|
125
132
|
@send_get_body_as = @arguments[:send_get_body_as] || 'GET'
|
133
|
+
@opaque_id_prefix = @arguments[:opaque_id_prefix] || nil
|
126
134
|
|
127
135
|
if @arguments[:request_timeout]
|
128
|
-
@arguments[:transport_options][:request] = { :
|
136
|
+
@arguments[:transport_options][:request] = { timeout: @arguments[:request_timeout] }
|
129
137
|
end
|
130
138
|
|
131
139
|
if @arguments[:transport]
|
@@ -133,27 +141,41 @@ module Elasticsearch
|
|
133
141
|
else
|
134
142
|
transport_class = @arguments[:transport_class] || DEFAULT_TRANSPORT_CLASS
|
135
143
|
if transport_class == Transport::HTTP::Faraday
|
136
|
-
@transport = transport_class.new(:
|
137
|
-
|
138
|
-
|
139
|
-
faraday.adapter(@arguments[:adapter] || __auto_detect_adapter)
|
140
|
-
end
|
144
|
+
@transport = transport_class.new(hosts: @seeds, options: @arguments) do |faraday|
|
145
|
+
faraday.adapter(@arguments[:adapter] || __auto_detect_adapter)
|
146
|
+
block&.call faraday
|
141
147
|
end
|
142
148
|
else
|
143
|
-
@transport = transport_class.new(:
|
149
|
+
@transport = transport_class.new(hosts: @seeds, options: @arguments)
|
144
150
|
end
|
145
151
|
end
|
146
152
|
end
|
147
153
|
|
148
154
|
# Performs a request through delegation to {#transport}.
|
149
155
|
#
|
150
|
-
def perform_request(method, path, params={}, body=nil, headers=nil)
|
156
|
+
def perform_request(method, path, params = {}, body = nil, headers = nil)
|
151
157
|
method = @send_get_body_as if 'GET' == method && body
|
158
|
+
if (opaque_id = params.delete(:opaque_id))
|
159
|
+
headers = {} if headers.nil?
|
160
|
+
opaque_id = @opaque_id_prefix ? "#{@opaque_id_prefix}#{opaque_id}" : opaque_id
|
161
|
+
headers.merge!('X-Opaque-Id' => opaque_id)
|
162
|
+
end
|
152
163
|
transport.perform_request(method, path, params, body, headers)
|
153
164
|
end
|
154
165
|
|
155
166
|
private
|
156
167
|
|
168
|
+
def set_api_key
|
169
|
+
@api_key = __encode(@api_key) if @api_key.is_a? Hash
|
170
|
+
headers = @arguments[:transport_options]&.[](:headers) || {}
|
171
|
+
headers.merge!('Authorization' => "ApiKey #{@api_key}")
|
172
|
+
@arguments[:transport_options].merge!(
|
173
|
+
headers: headers
|
174
|
+
)
|
175
|
+
@arguments.delete(:user)
|
176
|
+
@arguments.delete(:password)
|
177
|
+
end
|
178
|
+
|
157
179
|
def extract_cloud_creds(arguments)
|
158
180
|
return unless arguments[:cloud_id]
|
159
181
|
name = arguments[:cloud_id].split(':')[0]
|
@@ -225,8 +247,14 @@ module Elasticsearch
|
|
225
247
|
raise ArgumentError, "Please pass host as a String, URI or Hash -- #{host.class} given."
|
226
248
|
end
|
227
249
|
|
228
|
-
@
|
229
|
-
|
250
|
+
if @api_key
|
251
|
+
# Remove Basic Auth if using API KEY
|
252
|
+
host_parts.delete(:user)
|
253
|
+
host_parts.delete(:password)
|
254
|
+
else
|
255
|
+
@options[:http][:user] ||= host_parts[:user]
|
256
|
+
@options[:http][:password] ||= host_parts[:password]
|
257
|
+
end
|
230
258
|
|
231
259
|
host_parts[:port] = host_parts[:port].to_i if host_parts[:port]
|
232
260
|
host_parts[:path].chomp!('/') if host_parts[:path]
|
@@ -255,6 +283,13 @@ module Elasticsearch
|
|
255
283
|
::Faraday.default_adapter
|
256
284
|
end
|
257
285
|
end
|
286
|
+
|
287
|
+
# Encode credentials for the Authorization Header
|
288
|
+
# Credentials is the base64 encoding of id and api_key joined by a colon
|
289
|
+
# @see https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html
|
290
|
+
def __encode(api_key)
|
291
|
+
Base64.strict_encode64([api_key[:id], api_key[:api_key]].join(':'))
|
292
|
+
end
|
258
293
|
end
|
259
294
|
end
|
260
295
|
end
|
@@ -49,7 +49,6 @@ describe Elasticsearch::Transport::Client do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'when a User-Agent header is specified as client option' do
|
52
|
-
|
53
52
|
let(:client) do
|
54
53
|
described_class.new(transport_options: { headers: { 'User-Agent' => 'testing' } })
|
55
54
|
end
|
@@ -59,6 +58,49 @@ describe Elasticsearch::Transport::Client do
|
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
61
|
+
context 'when an encoded api_key is provided' do
|
62
|
+
let(:client) do
|
63
|
+
described_class.new(api_key: 'an_api_key')
|
64
|
+
end
|
65
|
+
let(:authorization_header) do
|
66
|
+
client.transport.connections.first.connection.headers['Authorization']
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'Adds the ApiKey header to the connection' do
|
70
|
+
expect(authorization_header).to eq('ApiKey an_api_key')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when an un-encoded api_key is provided' do
|
75
|
+
let(:client) do
|
76
|
+
described_class.new(api_key: { id: 'my_id', api_key: 'my_api_key' })
|
77
|
+
end
|
78
|
+
let(:authorization_header) do
|
79
|
+
client.transport.connections.first.connection.headers['Authorization']
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'Adds the ApiKey header to the connection' do
|
83
|
+
expect(authorization_header).to eq("ApiKey #{Base64.strict_encode64('my_id:my_api_key')}")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when basic auth and api_key are provided' do
|
88
|
+
let(:client) do
|
89
|
+
described_class.new(
|
90
|
+
api_key: { id: 'my_id', api_key: 'my_api_key' },
|
91
|
+
host: 'http://elastic:password@localhost:9200'
|
92
|
+
)
|
93
|
+
end
|
94
|
+
let(:authorization_header) do
|
95
|
+
client.transport.connections.first.connection.headers['Authorization']
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'removes basic auth credentials' do
|
99
|
+
expect(authorization_header).not_to match(/^Basic/)
|
100
|
+
expect(authorization_header).to match(/^ApiKey/)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
62
104
|
context 'when a user-agent header is specified as client option in lower-case' do
|
63
105
|
|
64
106
|
let(:client) do
|
@@ -176,45 +218,43 @@ describe Elasticsearch::Transport::Client do
|
|
176
218
|
end
|
177
219
|
|
178
220
|
describe 'adapter' do
|
179
|
-
|
180
221
|
context 'when no adapter is specified' do
|
181
|
-
|
182
222
|
let(:adapter) do
|
183
|
-
client.transport.connections.all.first.connection.builder.
|
223
|
+
client.transport.connections.all.first.connection.builder.adapter
|
184
224
|
end
|
185
225
|
|
186
226
|
it 'uses Faraday NetHttp' do
|
187
|
-
expect(adapter).to
|
227
|
+
expect(adapter).to eq Faraday::Adapter::NetHttp
|
188
228
|
end
|
189
229
|
end
|
190
230
|
|
191
231
|
context 'when the adapter is specified' do
|
192
232
|
|
193
233
|
let(:adapter) do
|
194
|
-
client.transport.connections.all.first.connection.builder.
|
234
|
+
client.transport.connections.all.first.connection.builder.adapter
|
195
235
|
end
|
196
236
|
|
197
237
|
let(:client) do
|
198
|
-
described_class.new(adapter: :
|
238
|
+
described_class.new(adapter: :patron)
|
199
239
|
end
|
200
240
|
|
201
241
|
it 'uses Faraday with the adapter' do
|
202
|
-
expect(adapter).to
|
242
|
+
expect(adapter).to eq Faraday::Adapter::Patron
|
203
243
|
end
|
204
244
|
end
|
205
245
|
|
206
246
|
context 'when the adapter is specified as a string key' do
|
207
247
|
|
208
248
|
let(:adapter) do
|
209
|
-
client.transport.connections.all.first.connection.builder.
|
249
|
+
client.transport.connections.all.first.connection.builder.adapter
|
210
250
|
end
|
211
251
|
|
212
252
|
let(:client) do
|
213
|
-
described_class.new('adapter' => :
|
253
|
+
described_class.new('adapter' => :patron)
|
214
254
|
end
|
215
255
|
|
216
256
|
it 'uses Faraday with the adapter' do
|
217
|
-
expect(adapter).to
|
257
|
+
expect(adapter).to eq Faraday::Adapter::Patron
|
218
258
|
end
|
219
259
|
end
|
220
260
|
|
@@ -226,11 +266,11 @@ describe Elasticsearch::Transport::Client do
|
|
226
266
|
end
|
227
267
|
|
228
268
|
let(:adapter) do
|
229
|
-
client.transport.connections.all.first.connection.builder.
|
269
|
+
client.transport.connections.all.first.connection.builder.adapter
|
230
270
|
end
|
231
271
|
|
232
272
|
it 'uses the detected adapter' do
|
233
|
-
expect(adapter).to
|
273
|
+
expect(adapter).to eq Faraday::Adapter::Patron
|
234
274
|
end
|
235
275
|
end
|
236
276
|
|
@@ -238,17 +278,21 @@ describe Elasticsearch::Transport::Client do
|
|
238
278
|
|
239
279
|
let(:client) do
|
240
280
|
described_class.new do |faraday|
|
241
|
-
faraday.adapter :
|
281
|
+
faraday.adapter :patron
|
242
282
|
faraday.response :logger
|
243
283
|
end
|
244
284
|
end
|
245
285
|
|
286
|
+
let(:adapter) do
|
287
|
+
client.transport.connections.all.first.connection.builder.adapter
|
288
|
+
end
|
289
|
+
|
246
290
|
let(:handlers) do
|
247
291
|
client.transport.connections.all.first.connection.builder.handlers
|
248
292
|
end
|
249
293
|
|
250
294
|
it 'sets the adapter' do
|
251
|
-
expect(
|
295
|
+
expect(adapter).to eq Faraday::Adapter::Patron
|
252
296
|
end
|
253
297
|
|
254
298
|
it 'sets the logger' do
|
@@ -1055,10 +1099,43 @@ describe Elasticsearch::Transport::Client do
|
|
1055
1099
|
expect(request).to be(true)
|
1056
1100
|
end
|
1057
1101
|
end
|
1102
|
+
|
1103
|
+
context 'when x-opaque-id is set' do
|
1104
|
+
let(:client) { described_class.new(host: hosts) }
|
1105
|
+
|
1106
|
+
it 'uses x-opaque-id on a request' do
|
1107
|
+
expect(client.perform_request('GET', '/', { opaque_id: '12345' }).headers['x-opaque-id']).to eq('12345')
|
1108
|
+
end
|
1109
|
+
end
|
1110
|
+
|
1111
|
+
context 'when an x-opaque-id prefix is set on initialization' do
|
1112
|
+
let(:prefix) { 'elastic_cloud' }
|
1113
|
+
let(:client) do
|
1114
|
+
described_class.new(host: hosts, opaque_id_prefix: prefix)
|
1115
|
+
end
|
1116
|
+
|
1117
|
+
it 'uses x-opaque-id on a request' do
|
1118
|
+
expect(client.perform_request('GET', '/', { opaque_id: '12345' }).headers['x-opaque-id']).to eq("#{prefix}12345")
|
1119
|
+
end
|
1120
|
+
|
1121
|
+
context 'when using an API call' do
|
1122
|
+
let(:client) { described_class.new(host: hosts) }
|
1123
|
+
|
1124
|
+
it 'doesnae raise an ArgumentError' do
|
1125
|
+
expect { client.search(opaque_id: 'no_error') }.not_to raise_error
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
it 'uses X-Opaque-Id in the header' do
|
1129
|
+
allow(client).to receive(:perform_request) { OpenStruct.new(body: '') }
|
1130
|
+
expect { client.search(opaque_id: 'opaque_id') }.not_to raise_error
|
1131
|
+
expect(client).to have_received(:perform_request)
|
1132
|
+
.with('GET', '_search', { opaque_id: 'opaque_id' }, nil)
|
1133
|
+
end
|
1134
|
+
end
|
1135
|
+
end
|
1058
1136
|
end
|
1059
1137
|
|
1060
1138
|
context 'when the client connects to Elasticsearch' do
|
1061
|
-
|
1062
1139
|
let(:logger) do
|
1063
1140
|
Logger.new(STDERR).tap do |logger|
|
1064
1141
|
logger.formatter = proc do |severity, datetime, progname, msg|
|
@@ -1136,15 +1213,14 @@ describe Elasticsearch::Transport::Client do
|
|
1136
1213
|
end
|
1137
1214
|
|
1138
1215
|
context 'when the Faraday adapter is set in the block' do
|
1139
|
-
|
1140
1216
|
let(:client) do
|
1141
1217
|
Elasticsearch::Client.new(host: ELASTICSEARCH_HOSTS.first, logger: logger) do |client|
|
1142
1218
|
client.adapter(:net_http_persistent)
|
1143
1219
|
end
|
1144
1220
|
end
|
1145
1221
|
|
1146
|
-
let(:
|
1147
|
-
client.transport.connections.first.connection.builder.
|
1222
|
+
let(:handler_name) do
|
1223
|
+
client.transport.connections.first.connection.builder.adapter.name
|
1148
1224
|
end
|
1149
1225
|
|
1150
1226
|
let(:response) do
|
@@ -1152,7 +1228,7 @@ describe Elasticsearch::Transport::Client do
|
|
1152
1228
|
end
|
1153
1229
|
|
1154
1230
|
it 'sets the adapter' do
|
1155
|
-
expect(
|
1231
|
+
expect(handler_name).to eq('Faraday::Adapter::NetHttpPersistent')
|
1156
1232
|
end
|
1157
1233
|
|
1158
1234
|
it 'uses the adapter to connect' do
|
@@ -1202,7 +1278,7 @@ describe Elasticsearch::Transport::Client do
|
|
1202
1278
|
expect(client.perform_request('GET', '_nodes/_local'))
|
1203
1279
|
expect {
|
1204
1280
|
client.perform_request('GET', '_nodes/_local')
|
1205
|
-
}.to raise_exception(Faraday::
|
1281
|
+
}.to raise_exception(Faraday::ConnectionFailed)
|
1206
1282
|
end
|
1207
1283
|
end
|
1208
1284
|
|
@@ -1486,12 +1562,12 @@ describe Elasticsearch::Transport::Client do
|
|
1486
1562
|
{ adapter: :patron }
|
1487
1563
|
end
|
1488
1564
|
|
1489
|
-
let(:
|
1490
|
-
client.transport.connections.first.connection.builder.
|
1565
|
+
let(:adapter) do
|
1566
|
+
client.transport.connections.first.connection.builder.adapter
|
1491
1567
|
end
|
1492
1568
|
|
1493
1569
|
it 'uses the patron connection handler' do
|
1494
|
-
expect(
|
1570
|
+
expect(adapter).to eq('Faraday::Adapter::Patron')
|
1495
1571
|
end
|
1496
1572
|
|
1497
1573
|
it 'keeps connections open' do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,10 +3,11 @@ require 'elasticsearch-transport'
|
|
3
3
|
require 'logger'
|
4
4
|
require 'ansi/code'
|
5
5
|
require 'hashie/mash'
|
6
|
-
require 'pry-nav'
|
7
6
|
if defined?(JRUBY_VERSION)
|
8
7
|
require 'elasticsearch/transport/transport/http/manticore'
|
8
|
+
require 'pry-nav'
|
9
9
|
else
|
10
|
+
require 'pry-byebug'
|
10
11
|
require 'elasticsearch/transport/transport/http/curb'
|
11
12
|
require 'curb'
|
12
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elasticsearch-transport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.6.0.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karel Minarik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -28,24 +28,18 @@ dependencies:
|
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.14'
|
34
|
-
- - "<"
|
31
|
+
- - "~>"
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '1'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
|
-
- - "
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0.14'
|
44
|
-
- - "<"
|
38
|
+
- - "~>"
|
45
39
|
- !ruby/object:Gem::Version
|
46
40
|
version: '1'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
42
|
+
name: cane
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - ">="
|
@@ -59,21 +53,21 @@ dependencies:
|
|
59
53
|
- !ruby/object:Gem::Version
|
60
54
|
version: '0'
|
61
55
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
56
|
+
name: curb
|
63
57
|
requirement: !ruby/object:Gem::Requirement
|
64
58
|
requirements:
|
65
|
-
- - "
|
59
|
+
- - ">="
|
66
60
|
- !ruby/object:Gem::Version
|
67
|
-
version: '
|
61
|
+
version: '0'
|
68
62
|
type: :development
|
69
63
|
prerelease: false
|
70
64
|
version_requirements: !ruby/object:Gem::Requirement
|
71
65
|
requirements:
|
72
|
-
- - "
|
66
|
+
- - ">="
|
73
67
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
68
|
+
version: '0'
|
75
69
|
- !ruby/object:Gem::Dependency
|
76
|
-
name:
|
70
|
+
name: elasticsearch-extensions
|
77
71
|
requirement: !ruby/object:Gem::Requirement
|
78
72
|
requirements:
|
79
73
|
- - ">="
|
@@ -87,7 +81,7 @@ dependencies:
|
|
87
81
|
- !ruby/object:Gem::Version
|
88
82
|
version: '0'
|
89
83
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
84
|
+
name: minitest
|
91
85
|
requirement: !ruby/object:Gem::Requirement
|
92
86
|
requirements:
|
93
87
|
- - ">="
|
@@ -101,7 +95,7 @@ dependencies:
|
|
101
95
|
- !ruby/object:Gem::Version
|
102
96
|
version: '0'
|
103
97
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
98
|
+
name: minitest-reporters
|
105
99
|
requirement: !ruby/object:Gem::Requirement
|
106
100
|
requirements:
|
107
101
|
- - ">="
|
@@ -115,21 +109,21 @@ dependencies:
|
|
115
109
|
- !ruby/object:Gem::Version
|
116
110
|
version: '0'
|
117
111
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
112
|
+
name: rake
|
119
113
|
requirement: !ruby/object:Gem::Requirement
|
120
114
|
requirements:
|
121
|
-
- - "
|
115
|
+
- - "~>"
|
122
116
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
117
|
+
version: '11.1'
|
124
118
|
type: :development
|
125
119
|
prerelease: false
|
126
120
|
version_requirements: !ruby/object:Gem::Requirement
|
127
121
|
requirements:
|
128
|
-
- - "
|
122
|
+
- - "~>"
|
129
123
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
124
|
+
version: '11.1'
|
131
125
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
126
|
+
name: require-prof
|
133
127
|
requirement: !ruby/object:Gem::Requirement
|
134
128
|
requirements:
|
135
129
|
- - ">="
|
@@ -143,7 +137,7 @@ dependencies:
|
|
143
137
|
- !ruby/object:Gem::Version
|
144
138
|
version: '0'
|
145
139
|
- !ruby/object:Gem::Dependency
|
146
|
-
name:
|
140
|
+
name: ruby-prof
|
147
141
|
requirement: !ruby/object:Gem::Requirement
|
148
142
|
requirements:
|
149
143
|
- - ">="
|
@@ -157,35 +151,41 @@ dependencies:
|
|
157
151
|
- !ruby/object:Gem::Version
|
158
152
|
version: '0'
|
159
153
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
154
|
+
name: simplecov
|
161
155
|
requirement: !ruby/object:Gem::Requirement
|
162
156
|
requirements:
|
163
|
-
- - "
|
157
|
+
- - "~>"
|
164
158
|
- !ruby/object:Gem::Version
|
165
|
-
version: '0'
|
159
|
+
version: '0.17'
|
160
|
+
- - "<"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0.18'
|
166
163
|
type: :development
|
167
164
|
prerelease: false
|
168
165
|
version_requirements: !ruby/object:Gem::Requirement
|
169
166
|
requirements:
|
170
|
-
- - "
|
167
|
+
- - "~>"
|
171
168
|
- !ruby/object:Gem::Version
|
172
|
-
version: '0'
|
169
|
+
version: '0.17'
|
170
|
+
- - "<"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0.18'
|
173
173
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
174
|
+
name: simplecov-rcov
|
175
175
|
requirement: !ruby/object:Gem::Requirement
|
176
176
|
requirements:
|
177
|
-
- - "
|
177
|
+
- - ">="
|
178
178
|
- !ruby/object:Gem::Version
|
179
|
-
version: '0
|
179
|
+
version: '0'
|
180
180
|
type: :development
|
181
181
|
prerelease: false
|
182
182
|
version_requirements: !ruby/object:Gem::Requirement
|
183
183
|
requirements:
|
184
|
-
- - "
|
184
|
+
- - ">="
|
185
185
|
- !ruby/object:Gem::Version
|
186
|
-
version: '0
|
186
|
+
version: '0'
|
187
187
|
- !ruby/object:Gem::Dependency
|
188
|
-
name:
|
188
|
+
name: ansi
|
189
189
|
requirement: !ruby/object:Gem::Requirement
|
190
190
|
requirements:
|
191
191
|
- - ">="
|
@@ -199,7 +199,7 @@ dependencies:
|
|
199
199
|
- !ruby/object:Gem::Version
|
200
200
|
version: '0'
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
|
-
name:
|
202
|
+
name: hashie
|
203
203
|
requirement: !ruby/object:Gem::Requirement
|
204
204
|
requirements:
|
205
205
|
- - ">="
|
@@ -213,7 +213,7 @@ dependencies:
|
|
213
213
|
- !ruby/object:Gem::Version
|
214
214
|
version: '0'
|
215
215
|
- !ruby/object:Gem::Dependency
|
216
|
-
name:
|
216
|
+
name: httpclient
|
217
217
|
requirement: !ruby/object:Gem::Requirement
|
218
218
|
requirements:
|
219
219
|
- - ">="
|
@@ -227,7 +227,7 @@ dependencies:
|
|
227
227
|
- !ruby/object:Gem::Version
|
228
228
|
version: '0'
|
229
229
|
- !ruby/object:Gem::Dependency
|
230
|
-
name:
|
230
|
+
name: mocha
|
231
231
|
requirement: !ruby/object:Gem::Requirement
|
232
232
|
requirements:
|
233
233
|
- - ">="
|
@@ -241,7 +241,7 @@ dependencies:
|
|
241
241
|
- !ruby/object:Gem::Version
|
242
242
|
version: '0'
|
243
243
|
- !ruby/object:Gem::Dependency
|
244
|
-
name:
|
244
|
+
name: net-http-persistent
|
245
245
|
requirement: !ruby/object:Gem::Requirement
|
246
246
|
requirements:
|
247
247
|
- - ">="
|
@@ -255,7 +255,7 @@ dependencies:
|
|
255
255
|
- !ruby/object:Gem::Version
|
256
256
|
version: '0'
|
257
257
|
- !ruby/object:Gem::Dependency
|
258
|
-
name:
|
258
|
+
name: patron
|
259
259
|
requirement: !ruby/object:Gem::Requirement
|
260
260
|
requirements:
|
261
261
|
- - ">="
|
@@ -269,7 +269,7 @@ dependencies:
|
|
269
269
|
- !ruby/object:Gem::Version
|
270
270
|
version: '0'
|
271
271
|
- !ruby/object:Gem::Dependency
|
272
|
-
name:
|
272
|
+
name: pry
|
273
273
|
requirement: !ruby/object:Gem::Requirement
|
274
274
|
requirements:
|
275
275
|
- - ">="
|
@@ -283,7 +283,7 @@ dependencies:
|
|
283
283
|
- !ruby/object:Gem::Version
|
284
284
|
version: '0'
|
285
285
|
- !ruby/object:Gem::Dependency
|
286
|
-
name:
|
286
|
+
name: shoulda-context
|
287
287
|
requirement: !ruby/object:Gem::Requirement
|
288
288
|
requirements:
|
289
289
|
- - ">="
|
@@ -297,41 +297,35 @@ dependencies:
|
|
297
297
|
- !ruby/object:Gem::Version
|
298
298
|
version: '0'
|
299
299
|
- !ruby/object:Gem::Dependency
|
300
|
-
name:
|
300
|
+
name: test-unit
|
301
301
|
requirement: !ruby/object:Gem::Requirement
|
302
302
|
requirements:
|
303
303
|
- - "~>"
|
304
304
|
- !ruby/object:Gem::Version
|
305
|
-
version: '
|
306
|
-
- - "<"
|
307
|
-
- !ruby/object:Gem::Version
|
308
|
-
version: '0.18'
|
305
|
+
version: '2'
|
309
306
|
type: :development
|
310
307
|
prerelease: false
|
311
308
|
version_requirements: !ruby/object:Gem::Requirement
|
312
309
|
requirements:
|
313
310
|
- - "~>"
|
314
311
|
- !ruby/object:Gem::Version
|
315
|
-
version: '
|
316
|
-
- - "<"
|
317
|
-
- !ruby/object:Gem::Version
|
318
|
-
version: '0.18'
|
312
|
+
version: '2'
|
319
313
|
- !ruby/object:Gem::Dependency
|
320
|
-
name:
|
314
|
+
name: typhoeus
|
321
315
|
requirement: !ruby/object:Gem::Requirement
|
322
316
|
requirements:
|
323
|
-
- - "
|
317
|
+
- - "~>"
|
324
318
|
- !ruby/object:Gem::Version
|
325
|
-
version: '0'
|
319
|
+
version: '0.6'
|
326
320
|
type: :development
|
327
321
|
prerelease: false
|
328
322
|
version_requirements: !ruby/object:Gem::Requirement
|
329
323
|
requirements:
|
330
|
-
- - "
|
324
|
+
- - "~>"
|
331
325
|
- !ruby/object:Gem::Version
|
332
|
-
version: '0'
|
326
|
+
version: '0.6'
|
333
327
|
- !ruby/object:Gem::Dependency
|
334
|
-
name:
|
328
|
+
name: yard
|
335
329
|
requirement: !ruby/object:Gem::Requirement
|
336
330
|
requirements:
|
337
331
|
- - ">="
|
@@ -345,19 +339,19 @@ dependencies:
|
|
345
339
|
- !ruby/object:Gem::Version
|
346
340
|
version: '0'
|
347
341
|
- !ruby/object:Gem::Dependency
|
348
|
-
name:
|
342
|
+
name: bundler
|
349
343
|
requirement: !ruby/object:Gem::Requirement
|
350
344
|
requirements:
|
351
|
-
- - "
|
345
|
+
- - ">="
|
352
346
|
- !ruby/object:Gem::Version
|
353
|
-
version: '
|
347
|
+
version: '0'
|
354
348
|
type: :development
|
355
349
|
prerelease: false
|
356
350
|
version_requirements: !ruby/object:Gem::Requirement
|
357
351
|
requirements:
|
358
|
-
- - "
|
352
|
+
- - ">="
|
359
353
|
- !ruby/object:Gem::Version
|
360
|
-
version: '
|
354
|
+
version: '0'
|
361
355
|
description: 'Ruby client for Elasticsearch. See the `elasticsearch` gem for full
|
362
356
|
integration.
|
363
357
|
|
@@ -422,14 +416,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
422
416
|
requirements:
|
423
417
|
- - ">="
|
424
418
|
- !ruby/object:Gem::Version
|
425
|
-
version: '
|
419
|
+
version: '2.4'
|
426
420
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
427
421
|
requirements:
|
428
|
-
- - "
|
422
|
+
- - ">"
|
429
423
|
- !ruby/object:Gem::Version
|
430
|
-
version:
|
424
|
+
version: 1.3.1
|
431
425
|
requirements: []
|
432
|
-
rubygems_version: 3.
|
426
|
+
rubygems_version: 3.1.2
|
433
427
|
signing_key:
|
434
428
|
specification_version: 4
|
435
429
|
summary: Ruby client for Elasticsearch.
|