feat: send x-goog-api-client header in all requests
This commit is contained in:
parent
eea7d16b5e
commit
8cf4330494
|
@ -52,6 +52,7 @@ module Google
|
||||||
#
|
#
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def prepare!
|
def prepare!
|
||||||
|
set_xgac
|
||||||
if options && options.api_format_version
|
if options && options.api_format_version
|
||||||
header['X-Goog-Api-Format-Version'] = options.api_format_version.to_s
|
header['X-Goog-Api-Format-Version'] = options.api_format_version.to_s
|
||||||
end
|
end
|
||||||
|
@ -125,6 +126,17 @@ module Google
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def set_xgac
|
||||||
|
old_xgac = header
|
||||||
|
.find_all { |k, v| k.downcase == 'x-goog-api-client' }
|
||||||
|
.map { |(a, b)| b }
|
||||||
|
.join(' ')
|
||||||
|
xgac = "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}"
|
||||||
|
xgac = old_xgac.empty? ? xgac : "#{old_xgac} #{xgac}"
|
||||||
|
header.delete_if { |k, v| k.downcase == 'x-goog-api-client' }
|
||||||
|
header['X-Goog-Api-Client'] = xgac
|
||||||
|
end
|
||||||
|
|
||||||
# Attempt to parse a JSON error message
|
# Attempt to parse a JSON error message
|
||||||
# @param [String] body
|
# @param [String] body
|
||||||
# HTTP response body
|
# HTTP response body
|
||||||
|
|
|
@ -32,6 +32,33 @@ RSpec.describe Google::Apis::Core::ApiCommand do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
let(:x_goog_api_client_value) { "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}" }
|
||||||
|
|
||||||
|
context('with preparation') do
|
||||||
|
let(:command) do
|
||||||
|
Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should set X-Goog-Api-Client header if none is set' do
|
||||||
|
command.prepare!
|
||||||
|
expect(command.header['X-Goog-Api-Client']).to eql x_goog_api_client_value
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should append to x-goog-api-client header with case difference' do
|
||||||
|
command.header['x-goog-api-client'] = "foo/1.2.3"
|
||||||
|
command.prepare!
|
||||||
|
expect(command.header['X-Goog-Api-Client']).to eql "foo/1.2.3 #{x_goog_api_client_value}"
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should append to multiple x-goog-api-client headers' do
|
||||||
|
command.header['x-goog-api-client'] = "foo/1.2.3"
|
||||||
|
command.header['X-Goog-Api-Client'] = "bar/4.5.6"
|
||||||
|
command.prepare!
|
||||||
|
expect(command.header['X-Goog-Api-Client']).to eql "foo/1.2.3 bar/4.5.6 #{x_goog_api_client_value}"
|
||||||
|
expect(command.header['x-goog-api-client']).to be nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context('with a request body') do
|
context('with a request body') do
|
||||||
let(:command) do
|
let(:command) do
|
||||||
request = model_class.new
|
request = model_class.new
|
||||||
|
|
|
@ -21,6 +21,7 @@ RSpec.describe Google::Apis::Core::BaseService do
|
||||||
include TestHelpers
|
include TestHelpers
|
||||||
|
|
||||||
let(:service) { Google::Apis::Core::BaseService.new('https://www.googleapis.com/', '') }
|
let(:service) { Google::Apis::Core::BaseService.new('https://www.googleapis.com/', '') }
|
||||||
|
let(:x_goog_api_client_value) { "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}" }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
Google::Apis::ClientOptions.default.application_name = 'test'
|
Google::Apis::ClientOptions.default.application_name = 'test'
|
||||||
|
@ -122,6 +123,13 @@ RSpec.describe Google::Apis::Core::BaseService do
|
||||||
expect(url).to eql 'https://www.googleapis.com/zoo/animals'
|
expect(url).to eql 'https://www.googleapis.com/zoo/animals'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should send the command with x-goog-api-client header' do
|
||||||
|
stub_request(:get, 'https://www.googleapis.com/zoo/animals').to_return(body: '')
|
||||||
|
service.send(:execute_or_queue_command, command)
|
||||||
|
expected_headers = {'X-Goog-Api-Client': x_goog_api_client_value}
|
||||||
|
expect(a_request(:get, 'https://www.googleapis.com/zoo/animals').with(headers: expected_headers)).to have_been_made
|
||||||
|
end
|
||||||
|
|
||||||
include_examples 'with options'
|
include_examples 'with options'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -269,10 +277,11 @@ EOF
|
||||||
--outer
|
--outer
|
||||||
Content-Type: application/http
|
Content-Type: application/http
|
||||||
Content-Id: <b1981e17-f622-49af-b2eb-203308b1b17d+0>
|
Content-Id: <b1981e17-f622-49af-b2eb-203308b1b17d+0>
|
||||||
Content-Length: 303
|
Content-Length: 349
|
||||||
Content-Transfer-Encoding: binary
|
Content-Transfer-Encoding: binary
|
||||||
|
|
||||||
POST /upload/zoo/animals? HTTP/1.1
|
POST /upload/zoo/animals? HTTP/1.1
|
||||||
|
X-Goog-Api-Client: #{x_goog_api_client_value}
|
||||||
Content-Type: multipart/related; boundary=inner
|
Content-Type: multipart/related; boundary=inner
|
||||||
X-Goog-Upload-Protocol: multipart
|
X-Goog-Upload-Protocol: multipart
|
||||||
Host: www.googleapis.com
|
Host: www.googleapis.com
|
||||||
|
|
Loading…
Reference in New Issue