google-apis-core 1.2.4 → 1.4.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e473e85fbf99d63f40efe7a2ad6a62aa63e2243098d0ca89de9913b0158f16ed
4
- data.tar.gz: ac5ef1511631d8fe647c25891cf25ef8fd6c57fddcfdf6be86def2dd79eab50a
3
+ metadata.gz: b1c9da7b904255f5cfa7a7340b09680ad04e9b654cf0b9119a62d0d3f23785bb
4
+ data.tar.gz: dcb808f302b5a8432d7b71aac11d5eed7b57bbf84e27c759616e5f13bd3e65b8
5
5
  SHA512:
6
- metadata.gz: 9043b70319aa23ec2bb0d902595124e47b81fa3d1bb523edc98533642e23a2835038e6fa2f6fe267f08eb721c2c26c37465aa5c97fb7d02b6878cb9a5702ef48
7
- data.tar.gz: ea1b48cdcbb50d39686a19499bca54ef7dd8f60a8241917d8299858376d3d31441a0f6b2aa41cc0b8bfcec007a33a53f9fb6ec0dfdc53d1d784c2decc0dd9f7c
6
+ metadata.gz: 9c591df50fe928a6edb03dba868becf61a918e9fa07173b8d8e4cbef540129c5985ad460252ce35ce6910eb7ba53c819663d94d231c9fbc8e92a842664ca7009
7
+ data.tar.gz: 1b191c3c847f9bda6e522160f6c5ff58862c534eacac8be8f708f2337cba4f2792438947bf2d243b5cc9208daf327fdf1ee17317e090b9aa8308b5f646a983a1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Release History
2
2
 
3
+ ### 1.4.1 (2026-11-01)
4
+
5
+ #### Bug Fixes
6
+
7
+ * bump dependencies representable to ~> 3.3, >= 3.3.1 and multi_json to ~> 1.21, >= 1.21.2 ([#28003](https://github.com/googleapis/google-api-ruby-client/issues/28003)) ([6e0759d](https://github.com/googleapis/google-api-ruby-client/commit/6e0759d7ccbc753ea04793cb991486d7b99faccd)), refs [#26611](https://github.com/googleapis/google-api-ruby-client/issues/26611)
8
+
9
+ ### 1.4.0 (2026-10-22)
10
+
11
+ #### Features
12
+
13
+ * allow setting the faraday adapter to use ([#27337](https://github.com/googleapis/google-api-ruby-client/issues/27337)) ([370d8ae](https://github.com/googleapis/google-api-ruby-client/commit/370d8ae750e125066f3c1204b3ceb561d3aca1dd)), refs [#27339](https://github.com/googleapis/google-api-ruby-client/issues/27339)
14
+
15
+ #### Documentation
16
+
17
+ * document ClientOptions#adapter requirements and caveats ([#28298](https://github.com/googleapis/google-api-ruby-client/issues/28298)) ([96bd38f](https://github.com/googleapis/google-api-ruby-client/commit/96bd38fcceccfe20f0713545611911604d673f94)), refs [#27337](https://github.com/googleapis/google-api-ruby-client/issues/27337)
18
+
19
+ ### 1.3.2 (2026-10-15)
20
+
21
+ #### Bug Fixes
22
+
23
+ * correct ClientSecrets JSON.dump constant ([#28074](https://github.com/googleapis/google-api-ruby-client/issues/28074))
24
+
25
+ ### 1.3.1 (2026-10-11)
26
+
27
+ #### Bug Fixes
28
+
29
+ * honor max for singular items in PagedResults#each ([#28073](https://github.com/googleapis/google-api-ruby-client/issues/28073))
30
+
31
+ ### 1.3.0 (2026-10-04)
32
+
33
+ #### Features
34
+
35
+ * implement path validation and traversal checks in HttpCommand ([#27476](https://github.com/googleapis/google-api-ruby-client/issues/27476))
36
+
37
+ ### 1.2.5 (2026-07-20)
38
+
39
+ #### Bug Fixes
40
+
41
+ * ignore non-2xx status codes in streaming downloads ([#27256](https://github.com/googleapis/google-api-ruby-client/issues/27256))
42
+
3
43
  ### 1.2.4 (2026-06-28)
4
44
 
5
45
  #### Bug Fixes
data/OVERVIEW.md CHANGED
@@ -22,6 +22,14 @@ should pin `google-apis-core` to a 0.x version in your Gemfile. For example:
22
22
 
23
23
  gem "google-apis-core", "~> 0.18"
24
24
 
25
+ google-apis-core uses Faraday's default adapter, which wraps [net-http](https://github.com/ruby/net-http), and is tested only against it. You can change the adapter by setting the `:adapter` client option:
26
+
27
+ ```ruby
28
+ Google::Apis::ClientOptions.default.adapter = :net_http_persistent # or :httpx, or...
29
+ ```
30
+
31
+ There's a caveat, though: downloading media requires a `faraday` adapter which [implements the `on_data` streaming API](https://lostisland.github.io/faraday/#/advanced/streaming-responses?id=streaming-responses). See {Google::Apis::ClientOptions#adapter} for the full requirements.
32
+
25
33
  ## Documentation
26
34
 
27
35
  More detailed descriptions of the Google legacy REST clients are available in two documents.
@@ -119,7 +119,7 @@ module Google
119
119
  # @return [String]
120
120
  # JSON
121
121
  def to_json
122
- return Json.dump(to_hash)
122
+ return JSON.dump(to_hash)
123
123
  end
124
124
 
125
125
  def to_hash
@@ -80,6 +80,8 @@ module Google
80
80
  end
81
81
  elsif items
82
82
  # yield singular non-nil items (for genomics API)
83
+ item_count = item_count + 1
84
+ break if @max && item_count > @max
83
85
  yield items
84
86
  end
85
87
  break if @max && item_count >= @max
@@ -565,6 +567,7 @@ module Google
565
567
  Faraday.new options do |faraday|
566
568
  faraday.response :logger, Google::Apis.logger if client_options.log_http_requests
567
569
  faraday.response :follow_redirects_google_apis_core, limit: 5
570
+ faraday.adapter client_options.adapter if client_options.adapter
568
571
  end
569
572
  end
570
573
 
@@ -81,11 +81,12 @@ module Google
81
81
 
82
82
  http_res = client.get(url.to_s, query, request_header) do |request|
83
83
  request.options.on_data = proc do |chunk, _size, res|
84
- # The on_data callback is only invoked on a successful response.
85
84
  # Some Faraday adapters (e.g. Typhoeus) may not provide a response
86
85
  # object in the callback, so we default to a 200 OK status.
86
+ # Note: Ignore non-2xx responses (redirects and 4xx/5xx error payloads)
87
+ # so error messages are not written to the download stream.
87
88
  status = res ? res.status.to_i : 200
88
- next if chunk.nil? || (status >= 300 && status < 400)
89
+ next if chunk.nil? || !(200..299).include?(status)
89
90
 
90
91
  # HTTP 206 is Partial Content
91
92
  download_offset ||= (status == 206 ? @offset : 0)
@@ -31,7 +31,7 @@ module Google
31
31
  RETRIABLE_ERRORS = [Google::Apis::ServerError,
32
32
  Google::Apis::RateLimitError,
33
33
  Google::Apis::TransmissionError,
34
- Google::Apis::RequestTimeOutError]
34
+ Google::Apis::RequestTimeOutError].freeze
35
35
 
36
36
  begin
37
37
  require 'opencensus'
@@ -83,15 +83,15 @@ module Google
83
83
  self.url = url
84
84
  self.url = Addressable::Template.new(url) if url.is_a?(String)
85
85
  self.method = method
86
- self.header = Hash.new
86
+ self.header = {}
87
87
  self.body = body
88
88
  self.query = {}
89
89
  self.params = {}
90
90
  @opencensus_span = nil
91
91
  if OPENCENSUS_AVAILABLE
92
92
  logger.warn 'OpenCensus support is now deprecated. ' +
93
- 'Please refer https://github.com/googleapis/google-api-ruby-client#tracing for migrating to use OpenTelemetry.'
94
-
93
+ 'Please refer https://github.com/googleapis/google-api-ruby-client#tracing for migrating to use OpenTelemetry.'
94
+
95
95
  end
96
96
  end
97
97
 
@@ -114,34 +114,30 @@ module Google
114
114
  release!
115
115
  end
116
116
 
117
- def do_retry func, client
118
- begin
119
- Retriable.retriable tries: options.retries + 1,
120
- max_elapsed_time: options.max_elapsed_time,
121
- base_interval: options.base_interval,
122
- max_interval: options.max_interval,
123
- multiplier: options.multiplier,
124
- on: RETRIABLE_ERRORS do |try|
125
- # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
126
- # auth to be re-attempted without having to retry all sorts of other failures like
127
- # NotFound, etc
128
- auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
129
- Retriable.retriable tries: auth_tries,
130
- on: [Google::Apis::AuthorizationError, Signet::AuthorizationError, Signet::RemoteServerError, Signet::UnexpectedStatusError],
131
- on_retry: proc { |*| refresh_authorization } do
132
- send(func, client).tap do |result|
133
- if block_given?
134
- yield result, nil
135
- end
136
- end
117
+ def do_retry(func, client)
118
+ Retriable.retriable tries: options.retries + 1,
119
+ max_elapsed_time: options.max_elapsed_time,
120
+ base_interval: options.base_interval,
121
+ max_interval: options.max_interval,
122
+ multiplier: options.multiplier,
123
+ on: RETRIABLE_ERRORS do |try|
124
+ # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
125
+ # auth to be re-attempted without having to retry all sorts of other failures like
126
+ # NotFound, etc
127
+ auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
128
+ Retriable.retriable tries: auth_tries,
129
+ on: [Google::Apis::AuthorizationError, Signet::AuthorizationError, Signet::RemoteServerError, Signet::UnexpectedStatusError],
130
+ on_retry: proc { |*| refresh_authorization } do
131
+ send(func, client).tap do |result|
132
+ yield result, nil if block_given?
137
133
  end
138
134
  end
139
- rescue => e
140
- if block_given?
141
- yield nil, e
142
- else
143
- raise e
144
- end
135
+ end
136
+ rescue StandardError => e
137
+ if block_given?
138
+ yield nil, e
139
+ else
140
+ raise e
145
141
  end
146
142
  end
147
143
 
@@ -164,6 +160,7 @@ module Google
164
160
  #
165
161
  # @private
166
162
  # @return [void]
163
+ # @raise [Google::Apis::ClientError] If path parameter validation fails.
167
164
  def prepare!
168
165
  normalize_unicode = true
169
166
  if options
@@ -171,7 +168,10 @@ module Google
171
168
  query.update(options.query) if options.query
172
169
  normalize_unicode = options.normalize_unicode
173
170
  end
174
- self.url = url.expand(params, nil, normalize_unicode) if url.is_a?(Addressable::Template)
171
+ if url.is_a?(Addressable::Template)
172
+ validate_path_parameters!
173
+ self.url = encode_reserved_parameters(url, normalize_unicode).expand(params, nil, normalize_unicode)
174
+ end
175
175
  url.query_values = normalize_query_values(query).merge(url.query_values || {})
176
176
 
177
177
  if allow_form_encoding?
@@ -182,17 +182,16 @@ module Google
182
182
  @form_encoded = false
183
183
  end
184
184
 
185
- self.body = '' if self.body.nil? && [:post, :put, :patch].include?(method)
185
+ self.body = '' if self.body.nil? && %i[post put patch].include?(method)
186
186
  if defined?(::Google::Apis::Core::CompositeIO) && body.is_a?(::Google::Apis::Core::CompositeIO)
187
- header["Content-Length"] ||= body.size.to_s
187
+ header['Content-Length'] ||= body.size.to_s
188
188
  end
189
189
  end
190
190
 
191
191
  # Release any resources used by this command
192
192
  # @private
193
193
  # @return [void]
194
- def release!
195
- end
194
+ def release!; end
196
195
 
197
196
  # Check the response and either decode body or raise error
198
197
  #
@@ -298,7 +297,7 @@ module Google
298
297
  err = Google::Apis::TransmissionError.new(err)
299
298
  end
300
299
  block.call(nil, err) if block_given?
301
- fail err if rethrow || block.nil?
300
+ raise err if rethrow || block.nil?
302
301
  end
303
302
 
304
303
  # Execute the command once.
@@ -323,7 +322,7 @@ module Google
323
322
  logger.debug { safe_single_line_representation @http_res }
324
323
  response = process_response(@http_res.status.to_i, @http_res.headers, @http_res.body)
325
324
  success(response)
326
- rescue => e
325
+ rescue StandardError => e
327
326
  logger.debug { sprintf('Caught error %s', e) }
328
327
  error(e, rethrow: true)
329
328
  end
@@ -343,28 +342,33 @@ module Google
343
342
  end
344
343
 
345
344
  def allow_form_encoding?
346
- [:post, :put].include?(method) && body.nil?
345
+ %i[post put].include?(method) && body.nil?
347
346
  end
348
347
 
349
348
  # Set the API version header for the service if not empty.
350
349
  # @return [void]
351
- def set_api_version_header api_version
350
+ def set_api_version_header(api_version)
352
351
  self.header['X-Goog-Api-Version'] = api_version unless api_version.empty?
353
352
  end
354
353
 
355
354
  private
356
355
 
357
356
  UNSAFE_CLASS_NAMES = [
358
- "Google::Apis::CloudkmsV1::DecryptResponse",
359
- "Google::Apis::SecretmanagerV1::SecretPayload",
360
- "Google::Apis::SecretmanagerV1beta1::SecretPayload"
361
- ]
357
+ 'Google::Apis::CloudkmsV1::DecryptResponse',
358
+ 'Google::Apis::SecretmanagerV1::SecretPayload',
359
+ 'Google::Apis::SecretmanagerV1beta1::SecretPayload'
360
+ ].freeze
361
+
362
+ # Matches the two URI template expressions Discovery documents use: simple ({var})
363
+ # and reserved ({+var}). Group 1 is '+' for reserved expansion, group 2 the name.
364
+ TEMPLATE_VAR_PATTERN = /\{(\+?)(\w+)\}/.freeze
362
365
 
363
366
  module RedactingPPMethods
364
- def pp_object obj
367
+ def pp_object(obj)
365
368
  return super unless UNSAFE_CLASS_NAMES.include? obj.class.name
369
+
366
370
  object_address_group obj do
367
- text "(fields redacted)"
371
+ text '(fields redacted)'
368
372
  end
369
373
  end
370
374
  end
@@ -377,16 +381,16 @@ module Google
377
381
  include RedactingPPMethods
378
382
  end
379
383
 
380
- def safe_pretty_representation obj
381
- out = +""
384
+ def safe_pretty_representation(obj)
385
+ out = +''
382
386
  printer = RedactingPP.new out, 79
383
387
  printer.guard_inspect_key { printer.pp obj }
384
388
  printer.flush
385
389
  out << "\n"
386
390
  end
387
391
 
388
- def safe_single_line_representation obj
389
- out = +""
392
+ def safe_single_line_representation(obj)
393
+ out = +''
390
394
  printer = RedactingSingleLine.new out
391
395
  printer.guard_inspect_key { printer.pp obj }
392
396
  printer.flush
@@ -400,9 +404,9 @@ module Google
400
404
 
401
405
  @opencensus_span = OpenCensus::Trace.start_span url.path.to_s
402
406
  @opencensus_span.kind = OpenCensus::Trace::SpanBuilder::CLIENT
403
- @opencensus_span.put_attribute "http.host", url.host.to_s
404
- @opencensus_span.put_attribute "http.method", method.to_s.upcase
405
- @opencensus_span.put_attribute "http.path", url.path.to_s
407
+ @opencensus_span.put_attribute 'http.host', url.host.to_s
408
+ @opencensus_span.put_attribute 'http.method', method.to_s.upcase
409
+ @opencensus_span.put_attribute 'http.path', url.path.to_s
406
410
  sent_size =
407
411
  if body.respond_to? :bytesize
408
412
  body.bytesize
@@ -436,7 +440,7 @@ module Google
436
440
  status = @http_res.status.to_i
437
441
  if status > 0
438
442
  @opencensus_span.set_status map_http_status status
439
- @opencensus_span.put_attribute "http.status_code", status
443
+ @opencensus_span.put_attribute 'http.status_code', status
440
444
  end
441
445
  end
442
446
 
@@ -452,7 +456,7 @@ module Google
452
456
  @form_encoded
453
457
  end
454
458
 
455
- def map_http_status http_status
459
+ def map_http_status(http_status)
456
460
  case http_status
457
461
  when 200..399 then 0 # OK
458
462
  when 400 then 3 # INVALID_ARGUMENT
@@ -468,9 +472,8 @@ module Google
468
472
  end
469
473
 
470
474
  def normalize_query_values(input)
471
- input.inject({}) do |h, (k, v)|
475
+ input.each_with_object({}) do |(k, v), h|
472
476
  h[k] = normalize_query_value(v)
473
- h
474
477
  end
475
478
  end
476
479
 
@@ -484,6 +487,96 @@ module Google
484
487
  v.to_s
485
488
  end
486
489
  end
490
+
491
+ # Validates user-supplied path parameter values against the URL template specification
492
+ # to prevent directory traversal and parameter injection exploits.
493
+ #
494
+ # Validation rejects only dot segments. Other characters are percent-encoded instead.
495
+ #
496
+ # Validation Mechanism:
497
+ # 1. For simple variables ({var}, standard single-wildcard behavior):
498
+ # - Rejects if the value is exactly '.' or '..'.
499
+ # - Reserved characters such as '/', '?' and '#' are percent-encoded by Addressable.
500
+ # 2. For reserved variables ({+var}, double-wildcard behavior):
501
+ # - Splits the value by slash ('/') and rejects any segment that is exactly '.' or '..'.
502
+ # - Every character except '/' and unreserved characters is percent-encoded by
503
+ # #encode_reserved_parameters.
504
+ #
505
+ # @raise [Google::Apis::ClientError] If any validation check fails.
506
+ def validate_path_parameters!
507
+ template_pattern = url.pattern
508
+
509
+ variables = template_pattern.scan(TEMPLATE_VAR_PATTERN).map do |operator, var_name|
510
+ { name: var_name, reserved: operator == '+' }
511
+ end
512
+
513
+ variables.each do |v|
514
+ var_name = v[:name]
515
+ var_key = params.key?(var_name) ? var_name : var_name.to_sym
516
+ next unless params.key?(var_key)
517
+
518
+ value = params[var_key].to_s
519
+
520
+ if v[:reserved]
521
+ value.split('/').each do |seg|
522
+ if ['.', '..'].include?(seg)
523
+ raise Google::Apis::ClientError,
524
+ "Value for #{var_name} must not contain segments that are exactly '#{seg}'."
525
+ end
526
+ end
527
+ elsif ['.', '..'].include?(value)
528
+ raise Google::Apis::ClientError,
529
+ "Invalid value for #{var_name} '#{value}'."
530
+ end
531
+ end
532
+ end
533
+
534
+ # Substitutes percent-encoded values for reserved ({+var}) variables in the template.
535
+ #
536
+ # Addressable leaves reserved characters such as '+', ':', '?' and '#' literal in a
537
+ # reserved expansion, so they would reach the server unencoded. Only '/' and unreserved
538
+ # characters should stay literal, so these values are encoded here and written into the
539
+ # template's literal text, which Addressable passes through untouched when it expands
540
+ # the rest.
541
+ #
542
+ # @param [Addressable::Template] template
543
+ # The URL template.
544
+ # @param [Boolean] normalize_unicode
545
+ # Whether to apply Unicode NFC normalization to the values.
546
+ # @return [Addressable::Template]
547
+ # A template with reserved variables replaced by their encoded values.
548
+ def encode_reserved_parameters(template, normalize_unicode)
549
+ pattern = template.pattern.dup
550
+ template.pattern.scan(TEMPLATE_VAR_PATTERN).each do |operator, var_name|
551
+ next unless operator == '+'
552
+
553
+ var_key = params.key?(var_name) ? var_name : var_name.to_sym
554
+ next unless params.key?(var_key)
555
+
556
+ # The encoded value contains no braces, so the new pattern parses cleanly and the
557
+ # value cannot introduce a template expression of its own.
558
+ pattern = pattern.gsub("{+#{var_name}}", encode_reserved_value(params[var_key], normalize_unicode))
559
+ end
560
+ Addressable::Template.new(pattern)
561
+ end
562
+
563
+ # Percent-encodes every character except '/' and unreserved characters.
564
+ #
565
+ # @param [Object] value
566
+ # The parameter value.
567
+ # @param [Boolean] normalize_unicode
568
+ # Whether to apply Unicode NFC normalization to the value.
569
+ # @return [String]
570
+ # The encoded value.
571
+ def encode_reserved_value(value, normalize_unicode)
572
+ value = value.to_s
573
+ # Addressable only normalizes values left in the mapping, so normalize here to match.
574
+ value = value.unicode_normalize(:nfc) if normalize_unicode
575
+ # Split on '/' and keep empty segments (-1), so slashes stay literal.
576
+ # Each segment is then fully encoded, including '%' itself (as '%25').
577
+ unreserved = Addressable::URI::CharacterClasses::UNRESERVED
578
+ value.split('/', -1).map { |segment| Addressable::URI.encode_component(segment, unreserved) }.join('/')
579
+ end
487
580
  end
488
581
  end
489
582
  end
@@ -48,11 +48,12 @@ module Google
48
48
 
49
49
  http_res = client.get(url.to_s, query, request_header) do |request|
50
50
  request.options.on_data = proc do |chunk, _size, res|
51
- # The on_data callback is only invoked on a successful response.
52
51
  # Some Faraday adapters (e.g. Typhoeus) may not provide a response
53
52
  # object in the callback, so we default to a 200 OK status.
53
+ # Note: Ignore non-2xx responses (redirects and 4xx/5xx error payloads)
54
+ # so error messages are not written to the download stream.
54
55
  status = res ? res.status.to_i : 200
55
- next if chunk.nil? || (status >= 300 && status < 400)
56
+ next if chunk.nil? || !(200..299).include?(status)
56
57
 
57
58
  download_offset ||= (status == 206 ? @offset : 0)
58
59
  download_offset += chunk.bytesize
@@ -16,7 +16,7 @@ module Google
16
16
  module Apis
17
17
  module Core
18
18
  # Core version
19
- VERSION = "1.2.4".freeze
19
+ VERSION = "1.4.1".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -23,7 +23,8 @@ module Google
23
23
  :read_timeout_sec,
24
24
  :send_timeout_sec,
25
25
  :log_http_requests,
26
- :transparent_gzip_decompression)
26
+ :transparent_gzip_decompression,
27
+ :adapter)
27
28
 
28
29
  RequestOptions = Struct.new(
29
30
  :authorization,
@@ -50,6 +51,30 @@ module Google
50
51
  # @return [String] Name of the application, for identification in the User-Agent header
51
52
  # @!attribute [rw] application_version
52
53
  # @return [String] Version of the application, for identification in the User-Agent header
54
+ # @!attribute [rw] adapter
55
+ # @return [Symbol, Class, nil] The Faraday adapter for HTTP connections, either a registered
56
+ # adapter name ([Faraday adapters](https://lostisland.github.io/faraday/#/adapters/index?id=adapters),
57
+ # for example `:net_http_persistent`) or an adapter class. If `nil` (the
58
+ # default), Faraday uses `Faraday.default_adapter`, which is `:net_http` unless changed.
59
+ #
60
+ # Only the default `:net_http` adapter is tested with google-apis-core. Any other adapter
61
+ # is used at your own risk. It must:
62
+ #
63
+ # * support response streaming with `on_data`, which media downloads require;
64
+ # * honor the `open_timeout_sec`, `read_timeout_sec`, `send_timeout_sec` and `proxy_url`
65
+ # settings;
66
+ # * raise `Faraday::Error` subclasses for network failures, so that requests are retried;
67
+ # * be safe to use from several threads at once, because each service shares a single
68
+ # connection.
69
+ #
70
+ # If the adapter keeps connections open, don't reuse them across `fork`. Create services
71
+ # in each process after forking.
72
+ #
73
+ # Load the adapter (for example `require "faraday/net_http_persistent"`) before the
74
+ # connection is created. An unregistered name raises `Faraday::Error` at that point.
75
+ # A service creates its connection once, on first use, so set this option before then.
76
+ # Each service copies `ClientOptions.default` when it's created, so changing the default
77
+ # only affects services created afterwards.
53
78
  # @!attribute [rw] proxy_url
54
79
  # @return [String] URL of a proxy server
55
80
  # @!attribute [rw] log_http_requests
@@ -82,7 +107,7 @@ module Google
82
107
  # @!attribute [rw] max_interval
83
108
  # @return [Integer] The maximum interval in seconds that any individual retry can reach.
84
109
  # @!attribute [rw] multiplier
85
- # @return [Numeric] Each successive interval grows by this factor. A multipler of 1.5 means the next interval
110
+ # @return [Numeric] Each successive interval grows by this factor. A multipler of 1.5 means the next interval
86
111
  # will be 1.5x the current interval.
87
112
  # @!attribute [rw] header
88
113
  # @return [Hash<String,String>] Additional HTTP headers to include in requests.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-apis-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Google LLC
@@ -85,28 +85,40 @@ dependencies:
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '1.11'
88
+ version: '1.21'
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 1.21.2
89
92
  type: :runtime
90
93
  prerelease: false
91
94
  version_requirements: !ruby/object:Gem::Requirement
92
95
  requirements:
93
96
  - - "~>"
94
97
  - !ruby/object:Gem::Version
95
- version: '1.11'
98
+ version: '1.21'
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: 1.21.2
96
102
  - !ruby/object:Gem::Dependency
97
103
  name: representable
98
104
  requirement: !ruby/object:Gem::Requirement
99
105
  requirements:
100
106
  - - "~>"
101
107
  - !ruby/object:Gem::Version
102
- version: '3.0'
108
+ version: '3.3'
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 3.3.1
103
112
  type: :runtime
104
113
  prerelease: false
105
114
  version_requirements: !ruby/object:Gem::Requirement
106
115
  requirements:
107
116
  - - "~>"
108
117
  - !ruby/object:Gem::Version
109
- version: '3.0'
118
+ version: '3.3'
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 3.3.1
110
122
  - !ruby/object:Gem::Dependency
111
123
  name: retriable
112
124
  requirement: !ruby/object:Gem::Requirement
@@ -167,7 +179,7 @@ licenses:
167
179
  metadata:
168
180
  bug_tracker_uri: https://github.com/googleapis/google-api-ruby-client/issues
169
181
  changelog_uri: https://github.com/googleapis/google-api-ruby-client/tree/main/google-apis-core/CHANGELOG.md
170
- documentation_uri: https://googleapis.dev/ruby/google-apis-core/v1.2.4
182
+ documentation_uri: https://googleapis.dev/ruby/google-apis-core/v1.4.1
171
183
  source_code_uri: https://github.com/googleapis/google-api-ruby-client/tree/main/google-apis-core
172
184
  rdoc_options: []
173
185
  require_paths: