elasticsearch-transport 6.0.1 → 6.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fad569e0b7e77d2dd34f6d94abb4e8fe385fda36
4
- data.tar.gz: 31b8c5ba87aa078d0f2d452df7a8f905cd289ae3
3
+ metadata.gz: '0958ecd0da7c46d4bf09410e6d420e7d9379e89c'
4
+ data.tar.gz: f9e1a3bc7db0bb0b084475141b1efa002edc3261
5
5
  SHA512:
6
- metadata.gz: 8cfa72d0e6b74444a1c623a760194217b029e7ca8f1fcb1e618bdc41e896e6d32d128c4fae4ea7287e04e4ddf306ca87d40878c29cf4d864b1dee254dafb29e2
7
- data.tar.gz: d97bd081b718f29175aa108a5079a53a90ee16dad51161353d951053ae1b7f126f19f1e8e846288a074354c88c7d3a45b42928d7e6f31d32a9806ae892d68408
6
+ metadata.gz: c2d69cb26a0ba4f1e93bfb82b325f6eedc840458b4df1371d6036341c582231c637779713f1150b7002545c075def4796b5229344d64ae34f1bd88ec8baafff6
7
+ data.tar.gz: c3101a660dd94e88d8f5289b15ab4aab27497c83219e30860d75545ba780d8c2fbc6d2b0da844d4e41b095d81b36e754cd14e4a8b2734d48af4cde371eb55423
@@ -125,10 +125,10 @@ module Elasticsearch
125
125
 
126
126
  # Performs a request through delegation to {#transport}.
127
127
  #
128
- def perform_request(method, path, params={}, body=nil)
128
+ def perform_request(method, path, params={}, body=nil, headers=nil)
129
129
  method = @send_get_body_as if 'GET' == method && body
130
130
 
131
- transport.perform_request method, path, params, body
131
+ transport.perform_request method, path, params, body, headers
132
132
  end
133
133
 
134
134
  # Normalizes and returns hosts configuration.
@@ -184,11 +184,14 @@ module Elasticsearch
184
184
  #
185
185
  # @api private
186
186
  #
187
- def __trace(method, path, params, body, url, response, json, took, duration)
187
+ def __trace(method, path, params, headers, body, url, response, json, took, duration)
188
188
  trace_url = "http://localhost:9200/#{path}?pretty" +
189
189
  ( params.empty? ? '' : "&#{::Faraday::Utils::ParamsHash[params].to_query}" )
190
190
  trace_body = body ? " -d '#{__convert_to_json(body, :pretty => true)}'" : ''
191
- tracer.info "curl -X #{method.to_s.upcase} '#{trace_url}'#{trace_body}\n"
191
+ trace_command = "curl -X #{method.to_s.upcase}"
192
+ trace_command += " -H '#{headers.inject('') { |memo,item| memo << item[0] + ': ' + item[1] }}'" if headers && !headers.empty?
193
+ trace_command += " '#{trace_url}'#{trace_body}\n"
194
+ tracer.info trace_command
192
195
  tracer.debug "# #{Time.now.iso8601} [#{response.status}] (#{format('%.3f', duration)}s)\n#"
193
196
  tracer.debug json ? serializer.dump(json, :pretty => true).gsub(/^/, '# ').sub(/\}$/, "\n# }")+"\n" : "# #{response.body}\n"
194
197
  end
@@ -233,6 +236,7 @@ module Elasticsearch
233
236
  # @param path [String] The API endpoint
234
237
  # @param params [Hash] Request parameters (will be serialized by {Connections::Connection#full_url})
235
238
  # @param body [Hash] Request body (will be serialized by the {#serializer})
239
+ # @param headers [Hash] Request headers (will be serialized by the {#serializer})
236
240
  # @param block [Proc] Code block to evaluate, passed from the implementation
237
241
  #
238
242
  # @return [Response]
@@ -240,7 +244,7 @@ module Elasticsearch
240
244
  # @raise [ServerError] If request failed on server
241
245
  # @raise [Error] If no connection is available
242
246
  #
243
- def perform_request(method, path, params={}, body=nil, &block)
247
+ def perform_request(method, path, params={}, body=nil, headers=nil, &block)
244
248
  raise NoMethodError, "Implement this method in your transport class" unless block_given?
245
249
  start = Time.now if logger || tracer
246
250
  tries = 0
@@ -311,7 +315,7 @@ module Elasticsearch
311
315
 
312
316
  if response.status.to_i >= 300
313
317
  __log method, path, params, body, url, response, nil, 'N/A', duration if logger
314
- __trace method, path, params, body, url, response, nil, 'N/A', duration if tracer
318
+ __trace method, path, params, headers, body, url, response, nil, 'N/A', duration if tracer
315
319
 
316
320
  # Log the failure only when `ignore` doesn't match the response status
317
321
  __log_failed response if logger && !ignore.include?(response.status.to_i)
@@ -323,7 +327,7 @@ module Elasticsearch
323
327
  took = (json['took'] ? sprintf('%.3fs', json['took']/1000.0) : 'n/a') rescue 'n/a' if logger || tracer
324
328
 
325
329
  __log method, path, params, body, url, response, json, took, duration if logger && !ignore.include?(response.status.to_i)
326
- __trace method, path, params, body, url, response, json, took, duration if tracer
330
+ __trace method, path, params, headers, body, url, response, json, took, duration if tracer
327
331
 
328
332
  Response.new response.status, json || response.body, response.headers
329
333
  ensure
@@ -15,7 +15,7 @@ module Elasticsearch
15
15
  # @return [Response]
16
16
  # @see Transport::Base#perform_request
17
17
  #
18
- def perform_request(method, path, params={}, body=nil)
18
+ def perform_request(method, path, params={}, body=nil, headers=nil)
19
19
  super do |connection,url|
20
20
  connection.connection.url = url
21
21
 
@@ -26,6 +26,7 @@ module Elasticsearch
26
26
  connection.connection.set :nobody, false
27
27
 
28
28
  connection.connection.put_data = __convert_to_json(body) if body
29
+ connection.connection.headers = headers if headers
29
30
  else raise ArgumentError, "Unsupported HTTP method: #{method}"
30
31
  end
31
32
 
@@ -16,9 +16,9 @@ module Elasticsearch
16
16
  # @return [Response]
17
17
  # @see Transport::Base#perform_request
18
18
  #
19
- def perform_request(method, path, params={}, body=nil)
19
+ def perform_request(method, path, params={}, body=nil, headers=nil)
20
20
  super do |connection, url|
21
- headers = connection.connection.headers
21
+ headers = headers || connection.connection.headers
22
22
 
23
23
  response = connection.connection.run_request \
24
24
  method.downcase.to_sym,
@@ -63,9 +63,10 @@ module Elasticsearch
63
63
  # @return [Response]
64
64
  # @see Transport::Base#perform_request
65
65
  #
66
- def perform_request(method, path, params={}, body=nil)
66
+ def perform_request(method, path, params={}, body=nil, headers=nil)
67
67
  super do |connection, url|
68
68
  params[:body] = __convert_to_json(body) if body
69
+ params[:headers] = headers if headers
69
70
  params = params.merge @request_options
70
71
  case method
71
72
  when "GET"
@@ -1,5 +1,5 @@
1
1
  module Elasticsearch
2
2
  module Transport
3
- VERSION = "6.0.1"
3
+ VERSION = "6.0.2"
4
4
  end
5
5
  end
@@ -73,6 +73,11 @@ class Elasticsearch::Transport::ClientIntegrationTest < Elasticsearch::Test::Int
73
73
  assert_equal 'application/yaml', response.headers['content-type']
74
74
  end
75
75
 
76
+ should "pass request headers to the transport" do
77
+ response = @client.perform_request 'GET', '/', {}, nil, {'Content-Type' => 'application/yaml'}
78
+ assert_match(/---/, response.body)
79
+ end
80
+
76
81
  should "pass options to the Faraday::Connection with a block" do
77
82
  @client = Elasticsearch::Client.new(
78
83
  host: "127.0.0.1:#{@port}",
@@ -41,10 +41,17 @@ class Elasticsearch::Transport::ClientTest < Test::Unit::TestCase
41
41
  should "send GET request as POST with the send_get_body_as option" do
42
42
  transport = DummyTransport.new
43
43
  client = Elasticsearch::Transport::Client.new :transport => transport, :send_get_body_as => 'POST'
44
- transport.expects(:perform_request).with 'POST', '/', {}, '{"foo":"bar"}'
44
+ transport.expects(:perform_request).with 'POST', '/', {}, '{"foo":"bar"}', nil
45
45
  client.perform_request 'GET', '/', {}, '{"foo":"bar"}'
46
46
  end
47
47
 
48
+ should "call perform_request with custom headers" do
49
+ transport = DummyTransport.new
50
+ client = Elasticsearch::Transport::Client.new :transport => transport, :send_get_body_as => 'POST'
51
+ transport.expects(:perform_request).with 'POST', '/', {}, '{"foo":"bar"}', '{"Content-Type":"application/x-ndjson"}'
52
+ client.perform_request 'POST', '/', {}, '{"foo":"bar"}', '{"Content-Type":"application/x-ndjson"}'
53
+ end
54
+
48
55
  should "have default logger for transport" do
49
56
  client = Elasticsearch::Transport::Client.new :log => true
50
57
  assert_respond_to client.transport.logger, :info
@@ -353,7 +353,7 @@ class Elasticsearch::Transport::Transport::BaseTest < Test::Unit::TestCase
353
353
  never
354
354
 
355
355
  assert_raise Elasticsearch::Transport::Transport::Errors::BadRequest do
356
- @transport.perform_request('GET', '/', &@block)
356
+ @transport.perform_request('GET', '/', {}, nil, &@block)
357
357
  end
358
358
  end
359
359
 
@@ -37,6 +37,14 @@ else
37
37
  @transport.perform_request 'GET', '/', {}, '{"foo":"bar"}'
38
38
  end
39
39
 
40
+ should "perform request with headers" do
41
+ @transport.connections.first.connection.expects(:put_data=).with('{"foo":"bar"}')
42
+ @transport.connections.first.connection.expects(:http).with(:POST).returns(stub_everything)
43
+ @transport.connections.first.connection.expects(:headers=).with({"Content-Type" => "application/x-ndjson"})
44
+
45
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}, {"Content-Type" => "application/x-ndjson"}
46
+ end
47
+
40
48
  should "set body for PUT request" do
41
49
  @transport.connections.first.connection.expects(:put_data=)
42
50
  @transport.connections.first.connection.expects(:http).with(:PUT).returns(stub_everything)
@@ -42,6 +42,18 @@ class Elasticsearch::Transport::Transport::HTTP::FaradayTest < Test::Unit::TestC
42
42
  @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}
43
43
  end
44
44
 
45
+ should "properly prepare the request with custom headers" do
46
+ @transport.connections.first.connection.expects(:run_request).with do |method, url, body, headers|
47
+ assert_equal :post, method
48
+ assert_equal '{"foo":"bar"}', body
49
+ assert_nil headers['Accept']
50
+ assert_equal "application/x-ndjson", headers['Content-Type']
51
+ true
52
+ end.returns(stub_everything)
53
+
54
+ @transport.perform_request 'POST', '/', {}, {:foo => 'bar'}, {"Content-Type" => "application/x-ndjson"}
55
+ end
56
+
45
57
  should "properly pass the Content-Type header option" do
46
58
  transport = Faraday.new :hosts => [ { :host => 'foobar', :port => 1234 } ], :options => { :transport_options => { :headers => { 'Content-Type' => 'foo/bar' } } }
47
59
 
@@ -55,6 +55,13 @@ else
55
55
  @transport.perform_request 'POST', '/', {}, {'foo' => 'bar'}
56
56
  end
57
57
 
58
+ should "set custom headers for PUT request" do
59
+ @transport.connections.first.connection.expects(:put).
60
+ with('http://127.0.0.1:8080//', {:body => '{"foo":"bar"}', :headers => {"Content-Type" => "application/x-ndjson"}})
61
+ .returns(stub_everything)
62
+ @transport.perform_request 'PUT', '/', {}, '{"foo":"bar"}', {"Content-Type" => "application/x-ndjson"}
63
+ end
64
+
58
65
  should "not serialize a String request body" do
59
66
  @transport.connections.first.connection.expects(:post).
60
67
  with('http://127.0.0.1:8080//', {:body => '{"foo":"bar"}'}).returns(stub_everything)
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: 6.0.1
4
+ version: 6.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karel Minarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-28 00:00:00.000000000 Z
11
+ date: 2018-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json