google-gax 0.10.1 → 0.10.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: 116098acb3407bbd5b01f92e330279b07b13caea
4
- data.tar.gz: 24e05d6e466e28d51f895b472666b2b79785bfb2
3
+ metadata.gz: 042b5b8369bf9dd8599b15f142f6608fbd7d2eb2
4
+ data.tar.gz: 1982637288109d3c84bd27d531f0736a8060ce27
5
5
  SHA512:
6
- metadata.gz: 139d012dfa865a1f7ea219c597f0b0d987d409cdd7a8db2b74b0e8fcbc2a96d9354d669882acb69378ef5461844f34e26905ef8df0069f63d35eb594a087f5f5
7
- data.tar.gz: 75abafa5d443696e83494499b361dc0ff92c5b80c714e7fe4e359d9f88ff970f2c47a4d35e62cd43dbaaf9e4ed4486fd66d81127953bdf607fa3d058ca650e36
6
+ metadata.gz: f0cd057e35054c328494dab34bad86eeb47b90cbe762489be0e3f37598a52bed9097572d9b77a46ccc587fbdf35148a9e4e66e7a671571754a360063e55c5b6f
7
+ data.tar.gz: 619f3cea1620d36159a1cc51f15899f4b7c608a6cb4a20044c8472ef9ccb84d0cc4c352d4b6b5e69e187907d9dcdc52720f6c4c8ddd6523b8bd48fc5909456b8
data/Rakefile CHANGED
@@ -12,4 +12,4 @@ end
12
12
  require 'rubocop/rake_task'
13
13
  RuboCop::RakeTask.new(:rubocop)
14
14
 
15
- task default: [:spec, :rubocop]
15
+ task default: %i[spec rubocop]
@@ -33,6 +33,8 @@ require 'google/gax/errors'
33
33
  require 'google/gax/bundling'
34
34
 
35
35
  module Google
36
+ # rubocop:disable Metrics/ModuleLength
37
+
36
38
  module Gax
37
39
  # A class to provide the Enumerable interface for page-streaming method.
38
40
  # PagedEnumerable assumes that the API call returns a message for a page
@@ -214,10 +216,12 @@ module Google
214
216
  #
215
217
  # @param func [Proc] used to make a bare rpc call
216
218
  # @param settings [CallSettings] provides the settings for this call
219
+ # @param params_extractor [Proc] extracts routing header params from the
220
+ # request
217
221
  # @return [Proc] a bound method on a request stub used to make an rpc call
218
222
  # @raise [StandardError] if +settings+ has incompatible values,
219
223
  # e.g, if bundling and page_streaming are both configured
220
- def create_api_call(func, settings)
224
+ def create_api_call(func, settings, params_extractor: nil)
221
225
  api_caller = proc do |api_call, request|
222
226
  api_call.call(request)
223
227
  end
@@ -237,6 +241,10 @@ module Google
237
241
 
238
242
  proc do |request, options = nil|
239
243
  this_settings = settings.merge(options)
244
+ if params_extractor
245
+ params = params_extractor.call(request)
246
+ this_settings = with_routing_header(this_settings, params)
247
+ end
240
248
  api_call = if settings.retry_codes?
241
249
  retryable(func, this_settings.retry_options,
242
250
  this_settings.kwargs)
@@ -298,6 +306,20 @@ module Google
298
306
  enumerable.method(:start)
299
307
  end
300
308
 
309
+ # Create a new CallSettings with the routing metadata from the request
310
+ # header params merged with the given settings.
311
+ #
312
+ # @param settings [CallSettings] the settings for an API call.
313
+ # @param params [Hash] the request header params.
314
+ # @return [CallSettings] a new merged settings.
315
+ def with_routing_header(settings, params)
316
+ routing_header = params.map { |k, v| "#{k}=#{v}" }.join('&')
317
+ options = CallOptions.new(
318
+ kwargs: { 'x-goog-request-params' => routing_header }
319
+ )
320
+ settings.merge(options)
321
+ end
322
+
301
323
  # Creates a proc equivalent to a_func, but that retries on certain
302
324
  # exceptions.
303
325
  #
@@ -357,8 +379,9 @@ module Google
357
379
  end
358
380
 
359
381
  module_function :create_api_call, :bundleable,
360
- :page_streamable, :retryable, :add_timeout_arg
382
+ :page_streamable, :with_routing_header, :retryable,
383
+ :add_timeout_arg
361
384
  private_class_method :bundleable, :page_streamable,
362
- :retryable, :add_timeout_arg
385
+ :with_routing_header, :retryable, :add_timeout_arg
363
386
  end
364
387
  end
@@ -29,6 +29,6 @@
29
29
 
30
30
  module Google
31
31
  module Gax
32
- VERSION = '0.10.1'.freeze
32
+ VERSION = '0.10.2'.freeze
33
33
  end
34
34
  end
@@ -108,8 +108,8 @@ module Google
108
108
  # @param timeout [Numeric]
109
109
  # The default timeout, in seconds, for calls made through this client.
110
110
  def initialize \
111
- service_path: SERVICE_ADDRESS,
112
- port: DEFAULT_SERVICE_PORT,
111
+ service_path: self.class::SERVICE_ADDRESS,
112
+ port: self.class::DEFAULT_SERVICE_PORT,
113
113
  channel: nil,
114
114
  chan_creds: nil,
115
115
  updater_proc: nil,
@@ -199,6 +199,27 @@ describe Google::Gax do
199
199
  end
200
200
  end
201
201
 
202
+ describe 'with_routing_header' do
203
+ it 'merges request header params with the existing settings' do
204
+ settings = CallSettings.new
205
+ metadata_arg = nil
206
+ func = proc do |_, metadata: nil, **_deadline|
207
+ metadata_arg = metadata
208
+ 42
209
+ end
210
+ params_extractor = proc do |request|
211
+ { 'name' => request[:name], 'book.read' => request[:book][:read] }
212
+ end
213
+ my_callable = Google::Gax.create_api_call(
214
+ func, settings, params_extractor: params_extractor
215
+ )
216
+ expect(my_callable.call(name: 'foo', book: { read: true })).to eq(42)
217
+ expect(metadata_arg).to eq(
218
+ 'x-goog-request-params' => 'name=foo&book.read=true'
219
+ )
220
+ end
221
+ end
222
+
202
223
  describe 'retryable' do
203
224
  RetryOptions = Google::Gax::RetryOptions
204
225
  BackoffSettings = Google::Gax::BackoffSettings
@@ -77,7 +77,7 @@ describe Google::Gax do
77
77
  it 'composite value with nil' do
78
78
  actual =
79
79
  Google::Gax.compute_bundle_id(
80
- simple_builder('dummy_value'), %w(field1 field2)
80
+ simple_builder('dummy_value'), %w[field1 field2]
81
81
  )
82
82
  expect(actual).to eq(['dummy_value', ''])
83
83
  end
@@ -86,16 +86,16 @@ describe Google::Gax do
86
86
  actual =
87
87
  Google::Gax.compute_bundle_id(
88
88
  simple_builder('dummy_value', other_value: 'other_value'),
89
- %w(field1 field2)
89
+ %w[field1 field2]
90
90
  )
91
- expect(actual).to eq(%w(dummy_value other_value))
91
+ expect(actual).to eq(%w[dummy_value other_value])
92
92
  end
93
93
 
94
94
  it 'simple dotted value' do
95
95
  actual =
96
96
  Google::Gax.compute_bundle_id(
97
97
  outer_builder('dummy_value'),
98
- %w(inner.field1)
98
+ %w[inner.field1]
99
99
  )
100
100
  expect(actual).to eq(['dummy_value'])
101
101
  end
@@ -104,9 +104,9 @@ describe Google::Gax do
104
104
  actual =
105
105
  Google::Gax.compute_bundle_id(
106
106
  outer_builder('dummy_value'),
107
- %w(inner.field1 inner.field2 field1)
107
+ %w[inner.field1 inner.field2 field1]
108
108
  )
109
- expect(actual).to eq(%w(dummy_value dummy_value dummy_value))
109
+ expect(actual).to eq(%w[dummy_value dummy_value dummy_value])
110
110
  end
111
111
 
112
112
  it 'should return false for a single missing field value' do
@@ -122,7 +122,7 @@ describe Google::Gax do
122
122
  expect(
123
123
  Google::Gax.compute_bundle_id(
124
124
  simple_builder('dummy_value'),
125
- %w(field1 field3)
125
+ %w[field1 field3]
126
126
  )
127
127
  ).to eq(['dummy_value', nil])
128
128
  end
@@ -287,7 +287,7 @@ describe Google::Gax do
287
287
  it 'should group the api_calls by bundle_id' do
288
288
  an_elt = 'dummy_message'
289
289
  api_call = return_request
290
- bundle_ids = %w(id1 id2)
290
+ bundle_ids = %w[id1 id2]
291
291
  threshold = 5
292
292
  options =
293
293
  Google::Gax::BundleOptions.new(element_count_threshold: threshold)
@@ -307,7 +307,9 @@ describe Google::Gax::Operation do
307
307
  op = create_op(GrpcOp.new(done: false), client: mock_client)
308
308
  time_now = Time.now
309
309
  allow(Time).to receive(:now) { time_now }
310
- expect(op).to receive(:sleep).exactly(3).times { |secs| time_now += secs }
310
+ expect(op).to(
311
+ receive(:sleep).exactly(3).times { |secs| time_now += secs }
312
+ )
311
313
  op.wait_until_done!
312
314
  expect(to_call).to eq(0)
313
315
  end
@@ -324,7 +326,9 @@ describe Google::Gax::Operation do
324
326
 
325
327
  time_now = Time.now
326
328
  allow(Time).to receive(:now) { time_now }
327
- expect(op).to receive(:sleep).exactly(3).times { |secs| time_now += secs }
329
+ expect(op).to(
330
+ receive(:sleep).exactly(3).times { |secs| time_now += secs }
331
+ )
328
332
 
329
333
  op.wait_until_done!
330
334
  expect(to_call).to eq(0)
@@ -36,8 +36,8 @@ A_CONFIG = {
36
36
  'interfaces' => {
37
37
  SERVICE_NAME => {
38
38
  'retry_codes' => {
39
- 'foo_retry' => %w(code_a code_b),
40
- 'bar_retry' => %w(code_c)
39
+ 'foo_retry' => %w[code_a code_b],
40
+ 'bar_retry' => %w[code_c]
41
41
  },
42
42
  'retry_params' => {
43
43
  'default' => {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-gax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Google API Authors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-14 00:00:00.000000000 Z
11
+ date: 2017-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: googleauth
@@ -140,14 +140,14 @@ dependencies:
140
140
  requirements:
141
141
  - - '='
142
142
  - !ruby/object:Gem::Version
143
- version: 0.47.1
143
+ version: 0.49.0
144
144
  type: :development
145
145
  prerelease: false
146
146
  version_requirements: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - '='
149
149
  - !ruby/object:Gem::Version
150
- version: 0.47.1
150
+ version: 0.49.0
151
151
  - !ruby/object:Gem::Dependency
152
152
  name: simplecov
153
153
  requirement: !ruby/object:Gem::Requirement