google-cloud-storage 1.44.0 → 1.54.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -763,6 +763,30 @@ module Google
763
763
  @gapi.retention_expiration_time
764
764
  end
765
765
 
766
+ ##
767
+ # This soft delete time is the time when the object became
768
+ # soft-deleted.
769
+ #
770
+ # @return [DateTime, nil] A DateTime representing the time at
771
+ # which the object became soft-deleted, or `nil` if the file was
772
+ # not deleted.
773
+ #
774
+ def soft_delete_time
775
+ @gapi.soft_delete_time
776
+ end
777
+
778
+ ##
779
+ # This hard delete time is The time when the file will be permanently
780
+ # deleted.
781
+ #
782
+ # @return [DateTime, nil] A DateTime representing the time at
783
+ # which the file will be permanently deleted, or `nil` if the file is
784
+ # not soft deleted.
785
+ #
786
+ def hard_delete_time
787
+ @gapi.hard_delete_time
788
+ end
789
+
766
790
  ##
767
791
  # Retrieves a list of versioned files for the current object.
768
792
  #
@@ -825,6 +849,9 @@ module Google
825
849
  # @param [Integer] if_metageneration_not_match Makes the operation
826
850
  # conditional on whether the file's current metageneration does not
827
851
  # match the given value.
852
+ # @param [Boolean] override_unlocked_retention
853
+ # Must be true to remove the retention configuration, reduce its unlocked
854
+ # retention period, or change its mode from unlocked to locked.
828
855
  #
829
856
  # @yield [file] a block yielding a delegate object for updating the file
830
857
  #
@@ -865,7 +892,8 @@ module Google
865
892
  if_generation_match: nil,
866
893
  if_generation_not_match: nil,
867
894
  if_metageneration_match: nil,
868
- if_metageneration_not_match: nil
895
+ if_metageneration_not_match: nil,
896
+ override_unlocked_retention: nil
869
897
  updater = Updater.new gapi
870
898
  yield updater
871
899
  updater.check_for_changed_metadata!
@@ -875,7 +903,8 @@ module Google
875
903
  if_generation_match: if_generation_match,
876
904
  if_generation_not_match: if_generation_not_match,
877
905
  if_metageneration_match: if_metageneration_match,
878
- if_metageneration_not_match: if_metageneration_not_match
906
+ if_metageneration_not_match: if_metageneration_not_match,
907
+ override_unlocked_retention: override_unlocked_retention
879
908
  end
880
909
 
881
910
  ##
@@ -1560,6 +1589,64 @@ module Google
1560
1589
  true
1561
1590
  end
1562
1591
 
1592
+ # Mode of object level retention configuration.
1593
+ # Valid values are 'Locked' or 'Unlocked'
1594
+ #
1595
+ # @return [String]
1596
+ def retention_mode
1597
+ @gapi.retention&.mode
1598
+ end
1599
+
1600
+ # The earliest time in RFC 3339 UTC "Zulu" format that the object can
1601
+ # be deleted or replaced.
1602
+ #
1603
+ # @return [DateTime]
1604
+ def retention_retain_until_time
1605
+ @gapi.retention&.retain_until_time
1606
+ end
1607
+
1608
+ # A collection of object level retention parameters.
1609
+ # The full list of available options are outlined at the [JSON API docs]
1610
+ # (https://cloud.google.com/storage/docs/json_api/v1/objects/insert#request-body).
1611
+ #
1612
+ # @return [Google::Apis::StorageV1::Object::Retention]
1613
+ def retention
1614
+ @gapi.retention
1615
+ end
1616
+
1617
+ ##
1618
+ # Update method to update retention parameter of an object / file
1619
+ # It accepts params as a Hash of attributes in the following format:
1620
+ #
1621
+ # { mode: 'Locked|Unlocked', retain_until_time: '2023-12-19T03:22:23+00:00' }
1622
+ #
1623
+ # @param [Hash(String => String)] new_retention_attributes
1624
+ #
1625
+ # @example Update retention parameters for the File / Object
1626
+ # require "google/cloud/storage"
1627
+ # storage = Google::Cloud::Storage.new
1628
+ # bucket = storage.bucket "my-bucket"
1629
+ # file = bucket.file "avatars/heidi/400x400.png"
1630
+ # retention_params = { mode: 'Unlocked', retain_until_time: '2023-12-19T03:22:23+00:00'.to_datetime }
1631
+ # file.retention = retention_params
1632
+ #
1633
+ # @example Update retention parameters for the File / Object with override enabled
1634
+ # require "google/cloud/storage"
1635
+ # storage = Google::Cloud::Storage.new
1636
+ # bucket = storage.bucket "my-bucket"
1637
+ # file = bucket.file "avatars/heidi/400x400.png"
1638
+ # retention_params = { mode: 'Unlocked',
1639
+ # retain_until_time: '2023-12-19T03:22:23+00:00'.to_datetime,
1640
+ # override_unlocked_retention: true }
1641
+ # file.retention = retention_params
1642
+ #
1643
+ def retention= new_retention_attributes
1644
+ @gapi.retention ||= Google::Apis::StorageV1::Object::Retention.new
1645
+ @gapi.retention.mode = new_retention_attributes[:mode]
1646
+ @gapi.retention.retain_until_time = new_retention_attributes[:retain_until_time]
1647
+ update_gapi! :retention, override_unlocked_retention: new_retention_attributes[:override_unlocked_retention]
1648
+ end
1649
+
1563
1650
  ##
1564
1651
  # Public URL to access the file. If the file is not public, requests to
1565
1652
  # the URL will return an error. (See {File::Acl#public!} and
@@ -1985,15 +2072,59 @@ module Google
1985
2072
  def self.gapi_from_attrs gapi, attributes
1986
2073
  attributes.flatten!
1987
2074
  return nil if attributes.empty?
1988
- attr_params = Hash[attributes.map do |attr|
1989
- [attr, gapi.send(attr)]
1990
- end]
2075
+ attr_params = attributes.to_h do |attr|
2076
+ [attr, gapi.send(attr)]
2077
+ end
1991
2078
  # Sending nil metadata results in an Apiary runtime error:
1992
2079
  # NoMethodError: undefined method `each' for nil:NilClass
1993
2080
  attr_params.reject! { |k, v| k == :metadata && v.nil? }
1994
2081
  Google::Apis::StorageV1::Object.new(**attr_params)
1995
2082
  end
1996
2083
 
2084
+ ##
2085
+ # from_gs_url is a method to fetch bucket details and file details from a gs url
2086
+ #
2087
+ # @return [Hash(String => String)]
2088
+ #
2089
+ # @example Fetch bucket_name and file_Path from gs url:
2090
+ # require "google/cloud/storage"
2091
+ # gs_url= "gs://my-todo-app/avatars/heidi.jpeg"
2092
+ # file=Google::Cloud::Storage::File
2093
+ # file.from_gs_url(gs_url)
2094
+ # =>
2095
+ # {"bucket_name"=>"my-todo-app", "file_path"=>"avatars/heidi.jpeg"}
2096
+ #
2097
+ # @example Fetch bucket_name , file_Path and other query params from gs url:
2098
+ # require "google/cloud/storage"
2099
+ # gs_url= "gs://my-todo-app/test_sub_folder/heidi.jpeg?params1=test1&params2=test2"
2100
+ # file=Google::Cloud::Storage::File
2101
+ # file.from_gs_url(gs_url)
2102
+ # =>{
2103
+ # "bucket_name"=>"my-todo-app",
2104
+ # "file_path"=>"test_sub_folder/heidi.jpeg",
2105
+ # "options" => {
2106
+ # "params1"=>"test1",
2107
+ # "params2"=>"test2"
2108
+ # }
2109
+ # }
2110
+
2111
+ def self.from_gs_url gs_url
2112
+ prefix = "gs://".freeze
2113
+ raise ArgumentError, "Invalid GCS URL" unless gs_url.start_with? prefix
2114
+ # seprating params from input url
2115
+ path, query = gs_url.sub(prefix, "").split("?", 2)
2116
+ # parsing the url
2117
+ bucket_name, file_path = path.split "/", 2
2118
+ query_params = URI.decode_www_form(query).to_h if query
2119
+ url_items = {
2120
+ "bucket_name" => bucket_name,
2121
+ "file_path" => file_path
2122
+ }
2123
+ # adding url params to output hash
2124
+ url_items.merge! "options" => query_params if query
2125
+ url_items
2126
+ end
2127
+
1997
2128
  protected
1998
2129
 
1999
2130
  ##
@@ -2015,7 +2146,8 @@ module Google
2015
2146
  if_generation_match: nil,
2016
2147
  if_generation_not_match: nil,
2017
2148
  if_metageneration_match: nil,
2018
- if_metageneration_not_match: nil
2149
+ if_metageneration_not_match: nil,
2150
+ override_unlocked_retention: nil
2019
2151
  attributes = Array(attributes)
2020
2152
  attributes.flatten!
2021
2153
  return if attributes.empty?
@@ -2044,7 +2176,8 @@ module Google
2044
2176
  if_generation_not_match: if_generation_not_match,
2045
2177
  if_metageneration_match: if_metageneration_match,
2046
2178
  if_metageneration_not_match: if_metageneration_not_match,
2047
- user_project: user_project
2179
+ user_project: user_project,
2180
+ override_unlocked_retention: override_unlocked_retention
2048
2181
  end
2049
2182
  end
2050
2183
 
@@ -2107,10 +2240,8 @@ module Google
2107
2240
  [dest_bucket, dest_path]
2108
2241
  end
2109
2242
 
2110
- # rubocop:disable Style/MultipleComparison
2111
-
2112
2243
  def verify_file! file, verify = :md5
2113
- verify_md5 = verify == :md5 || verify == :all
2244
+ verify_md5 = verify == :md5 || verify == :all
2114
2245
  verify_crc32c = verify == :crc32c || verify == :all
2115
2246
  Verifier.verify_md5! self, file if verify_md5 && md5
2116
2247
  Verifier.verify_crc32c! self, file if verify_crc32c && crc32c
@@ -62,6 +62,15 @@ module Google
62
62
  @service = service
63
63
  end
64
64
 
65
+ ##
66
+ # The universe domain the client is connected to
67
+ #
68
+ # @return [String]
69
+ #
70
+ def universe_domain
71
+ service.universe_domain
72
+ end
73
+
65
74
  ##
66
75
  # The Storage project connected to.
67
76
  #
@@ -94,6 +103,41 @@ module Google
94
103
  service.project_service_account.email_address
95
104
  end
96
105
 
106
+ ##
107
+ # Add custom Google extension headers to the requests that use the signed URLs.
108
+ #
109
+ # @param [Hash] headers Google extension headers (custom HTTP headers that
110
+ # begin with `x-goog-`) to be included in requests that use the signed URLs.
111
+ # Provide headers as a key/value array, where the key is
112
+ # the header name, and the value is an array of header values.
113
+ # For headers with multiple values, provide values as a simple
114
+ # array, or a comma-separated string. For a reference of allowed
115
+ # headers, see [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).
116
+ #
117
+ # @return [Google::Cloud::Storage::Project] Returns the Project for method chaining
118
+ #
119
+ def add_custom_headers headers
120
+ @service.add_custom_headers headers
121
+ self
122
+ end
123
+
124
+ ##
125
+ # Add custom Google extension header to the requests that use the signed URLs.
126
+ #
127
+ # @param [String] header_name Name of Google extension header (custom HTTP header that
128
+ # begin with `x-goog-`) to be included in requests that use the signed URLs.
129
+ # For a reference of allowed headers, see
130
+ # [Reference Headers](https://cloud.google.com/storage/docs/xml-api/reference-headers).
131
+ # @param [Object] header_value Valid value of the Google extension header being added.
132
+ # For headers with multiple values, provide values as a simple array, or a comma-separated string.
133
+ #
134
+ # @return [Google::Cloud::Storage::Project] Returns the Project for method chaining
135
+ #
136
+ def add_custom_header header_name, header_value
137
+ @service.add_custom_header header_name, header_value
138
+ self
139
+ end
140
+
97
141
  ##
98
142
  # Retrieves a list of buckets for the given project.
99
143
  #
@@ -337,6 +381,8 @@ module Google
337
381
  # bucket instance and its files.
338
382
  #
339
383
  # See also {Bucket#requester_pays=} and {Bucket#requester_pays}.
384
+ # @param [Boolean] enable_object_retention
385
+ # When set to true, object retention is enabled for this bucket.
340
386
  #
341
387
  # @yield [bucket] a block for configuring the bucket before it is
342
388
  # created
@@ -351,6 +397,13 @@ module Google
351
397
  #
352
398
  # bucket = storage.create_bucket "my-bucket"
353
399
  #
400
+ # @example
401
+ # require "google/cloud/storage"
402
+ #
403
+ # storage = Google::Cloud::Storage.new
404
+ #
405
+ # bucket = storage.create_bucket "my-bucket", enable_object_retention: true
406
+ #
354
407
  # @example Configure the bucket in a block:
355
408
  # require "google/cloud/storage"
356
409
  #
@@ -368,6 +421,7 @@ module Google
368
421
  # b.lifecycle.add_set_storage_class_rule "COLDLINE", age: 10
369
422
  # end
370
423
  #
424
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
371
425
  def create_bucket bucket_name,
372
426
  acl: nil,
373
427
  default_acl: nil,
@@ -381,11 +435,14 @@ module Google
381
435
  versioning: nil,
382
436
  requester_pays: nil,
383
437
  user_project: nil,
384
- autoclass_enabled: false
438
+ autoclass_enabled: false,
439
+ enable_object_retention: nil,
440
+ hierarchical_namespace: nil
385
441
  params = {
386
442
  name: bucket_name,
387
443
  location: location,
388
- custom_placement_config: custom_placement_config
444
+ custom_placement_config: custom_placement_config,
445
+ hierarchical_namespace: hierarchical_namespace
389
446
  }.delete_if { |_, v| v.nil? }
390
447
  new_bucket = Google::Apis::StorageV1::Bucket.new(**params)
391
448
  storage_class = storage_class_for storage_class
@@ -398,6 +455,7 @@ module Google
398
455
  b.website_404 = website_404 unless website_404.nil?
399
456
  b.versioning = versioning unless versioning.nil?
400
457
  b.requester_pays = requester_pays unless requester_pays.nil?
458
+ b.hierarchical_namespace = hierarchical_namespace unless hierarchical_namespace.nil?
401
459
  end
402
460
  yield updater if block_given?
403
461
  updater.check_for_changed_labels!
@@ -405,9 +463,11 @@ module Google
405
463
  updater.check_for_mutable_lifecycle!
406
464
  gapi = service.insert_bucket \
407
465
  new_bucket, acl: acl_rule(acl), default_acl: acl_rule(default_acl),
408
- user_project: user_project
466
+ user_project: user_project,
467
+ enable_object_retention: enable_object_retention
409
468
  Bucket.from_gapi gapi, service, user_project: user_project
410
469
  end
470
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
411
471
 
412
472
  ##
413
473
  # Creates a new HMAC key.
@@ -15,6 +15,7 @@
15
15
 
16
16
  require "google/cloud/storage/version"
17
17
  require "google/apis/storage_v1"
18
+ require "google/cloud/config"
18
19
  require "digest"
19
20
  require "mini_mime"
20
21
  require "pathname"
@@ -36,6 +37,11 @@ module Google
36
37
  # @private
37
38
  attr_accessor :credentials
38
39
 
40
+ # @private
41
+ def universe_domain
42
+ service.universe_domain
43
+ end
44
+
39
45
  ##
40
46
  # Creates a new Service instance.
41
47
  # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -43,7 +49,8 @@ module Google
43
49
  timeout: nil, open_timeout: nil, read_timeout: nil,
44
50
  send_timeout: nil, host: nil, quota_project: nil,
45
51
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
46
- multiplier: nil
52
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
53
+ host ||= Google::Cloud::Storage.configure.endpoint
47
54
  @project = project
48
55
  @credentials = credentials
49
56
  @service = API::StorageService.new
@@ -65,8 +72,16 @@ module Google
65
72
  @service.request_options.max_interval = max_interval if max_interval
66
73
  @service.request_options.multiplier = multiplier if multiplier
67
74
  @service.request_options.add_invocation_id_header = true
75
+ @service.request_options.upload_chunk_size = upload_chunk_size if upload_chunk_size
68
76
  @service.authorization = @credentials.client if @credentials
69
77
  @service.root_url = host if host
78
+ @service.universe_domain = universe_domain || Google::Cloud::Storage.configure.universe_domain
79
+ begin
80
+ @service.verify_universe_domain!
81
+ rescue Google::Apis::UniverseDomainError => e
82
+ # TODO: Create a Google::Cloud::Error subclass for this.
83
+ raise Google::Cloud::Error, e.message
84
+ end
70
85
  end
71
86
  # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
72
87
 
@@ -111,14 +126,16 @@ module Google
111
126
  # Creates a new bucket.
112
127
  # Returns Google::Apis::StorageV1::Bucket.
113
128
  def insert_bucket bucket_gapi, acl: nil, default_acl: nil,
114
- user_project: nil, options: {}
129
+ user_project: nil, enable_object_retention: nil,
130
+ options: {}
115
131
  execute do
116
132
  service.insert_bucket \
117
133
  @project, bucket_gapi,
118
134
  predefined_acl: acl,
119
135
  predefined_default_object_acl: default_acl,
120
136
  user_project: user_project(user_project),
121
- options: options
137
+ options: options,
138
+ enable_object_retention: enable_object_retention
122
139
  end
123
140
  end
124
141
 
@@ -348,13 +365,17 @@ module Google
348
365
  # Retrieves a list of files matching the criteria.
349
366
  def list_files bucket_name, delimiter: nil, max: nil, token: nil,
350
367
  prefix: nil, versions: nil, user_project: nil,
351
- options: {}
368
+ match_glob: nil, include_folders_as_prefixes: nil,
369
+ soft_deleted: nil, options: {}
352
370
  execute do
353
371
  service.list_objects \
354
372
  bucket_name, delimiter: delimiter, max_results: max,
355
373
  page_token: token, prefix: prefix,
356
374
  versions: versions,
357
375
  user_project: user_project(user_project),
376
+ match_glob: match_glob,
377
+ include_folders_as_prefixes: include_folders_as_prefixes,
378
+ soft_deleted: soft_deleted,
358
379
  options: options
359
380
  end
360
381
  end
@@ -438,6 +459,7 @@ module Google
438
459
  if_metageneration_not_match: nil,
439
460
  key: nil,
440
461
  user_project: nil,
462
+ soft_deleted: nil,
441
463
  options: {}
442
464
  execute do
443
465
  service.get_object \
@@ -448,6 +470,7 @@ module Google
448
470
  if_metageneration_match: if_metageneration_match,
449
471
  if_metageneration_not_match: if_metageneration_not_match,
450
472
  user_project: user_project(user_project),
473
+ soft_deleted: soft_deleted,
451
474
  options: key_options(key).merge(options)
452
475
  end
453
476
  end
@@ -520,7 +543,6 @@ module Google
520
543
  if_metageneration_match: nil,
521
544
  user_project: nil,
522
545
  options: {}
523
-
524
546
  source_objects = compose_file_source_objects source_files, if_source_generation_match
525
547
  compose_req = Google::Apis::StorageV1::ComposeRequest.new source_objects: source_objects,
526
548
  destination: destination_gapi
@@ -579,6 +601,7 @@ module Google
579
601
  if_metageneration_not_match: nil,
580
602
  predefined_acl: nil,
581
603
  user_project: nil,
604
+ override_unlocked_retention: nil,
582
605
  options: {}
583
606
  file_gapi ||= Google::Apis::StorageV1::Object.new
584
607
 
@@ -598,6 +621,7 @@ module Google
598
621
  if_metageneration_not_match: if_metageneration_not_match,
599
622
  predefined_acl: predefined_acl,
600
623
  user_project: user_project(user_project),
624
+ override_unlocked_retention: override_unlocked_retention,
601
625
  options: options
602
626
  end
603
627
  end
@@ -613,7 +637,6 @@ module Google
613
637
  if_metageneration_not_match: nil,
614
638
  user_project: nil,
615
639
  options: {}
616
-
617
640
  if options[:retries].nil?
618
641
  is_idempotent = retry? generation: generation, if_generation_match: if_generation_match
619
642
  options = is_idempotent ? {} : { retries: 0 }
@@ -631,6 +654,39 @@ module Google
631
654
  end
632
655
  end
633
656
 
657
+ ##
658
+ # Restores a soft-deleted object.
659
+ def restore_file bucket_name,
660
+ file_path,
661
+ generation,
662
+ copy_source_acl: nil,
663
+ if_generation_match: nil,
664
+ if_generation_not_match: nil,
665
+ if_metageneration_match: nil,
666
+ if_metageneration_not_match: nil,
667
+ projection: nil,
668
+ user_project: nil,
669
+ fields: nil,
670
+ options: {}
671
+ if options[:retries].nil?
672
+ is_idempotent = retry? generation: generation, if_generation_match: if_generation_match
673
+ options = is_idempotent ? {} : { retries: 0 }
674
+ end
675
+
676
+ execute do
677
+ service.restore_object bucket_name, file_path, generation,
678
+ copy_source_acl: copy_source_acl,
679
+ if_generation_match: if_generation_match,
680
+ if_generation_not_match: if_generation_not_match,
681
+ if_metageneration_match: if_metageneration_match,
682
+ if_metageneration_not_match: if_metageneration_not_match,
683
+ projection: projection,
684
+ user_project: user_project(user_project),
685
+ fields: fields,
686
+ options: options
687
+ end
688
+ end
689
+
634
690
  ##
635
691
  # Retrieves a list of ACLs for the given file.
636
692
  def list_file_acls bucket_name, file_name, user_project: nil, options: {}
@@ -679,7 +735,6 @@ module Google
679
735
  # Returns Google::Apis::StorageV1::HmacKey.
680
736
  def create_hmac_key service_account_email, project_id: nil,
681
737
  user_project: nil, options: {}
682
-
683
738
  if options[:retries].nil?
684
739
  options = options.merge({ retries: 0 })
685
740
  end
@@ -794,6 +849,18 @@ module Google
794
849
  "#{self.class}(#{@project})"
795
850
  end
796
851
 
852
+ ##
853
+ # Add custom Google extension headers to the requests that use the signed URLs.
854
+ def add_custom_headers headers
855
+ @service.request_options.header.merge! headers
856
+ end
857
+
858
+ ##
859
+ # Add custom Google extension header to the requests that use the signed URLs.
860
+ def add_custom_header header_name, header_value
861
+ @service.request_options.header[header_name] = header_value
862
+ end
863
+
797
864
  protected
798
865
 
799
866
  def user_project user_project
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Storage
19
- VERSION = "1.44.0".freeze
19
+ VERSION = "1.54.0".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -67,6 +67,11 @@ module Google
67
67
  # @param [Integer] send_timeout How long, in seconds, before receiving response from server times out. Optional.
68
68
  # @param [String] endpoint Override of the endpoint host name. Optional.
69
69
  # If the param is nil, uses the default endpoint.
70
+ # @param universe_domain [String] Override of the universe domain. Optional.
71
+ # If unset or nil, uses the default unvierse domain
72
+ # @param [Integer] upload_chunk_size The chunk size of storage upload, in bytes.
73
+ # The default value is 100 MB, i.e. 104_857_600 bytes. To disable chunking and upload
74
+ # the complete file regardless of size, pass 0 as the chunk size.
70
75
  # @param [String] project Alias for the `project_id` argument. Deprecated.
71
76
  # @param [String] keyfile Alias for the `credentials` argument.
72
77
  # Deprecated.
@@ -89,19 +94,21 @@ module Google
89
94
  timeout: nil, open_timeout: nil, read_timeout: nil,
90
95
  send_timeout: nil, endpoint: nil, project: nil, keyfile: nil,
91
96
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
92
- multiplier: nil
97
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
93
98
  scope ||= configure.scope
94
99
  retries ||= configure.retries
95
100
  timeout ||= configure.timeout
96
- open_timeout ||= (configure.open_timeout || timeout)
97
- read_timeout ||= (configure.read_timeout || timeout)
98
- send_timeout ||= (configure.send_timeout || timeout)
101
+ open_timeout ||= configure.open_timeout || timeout
102
+ read_timeout ||= configure.read_timeout || timeout
103
+ send_timeout ||= configure.send_timeout || timeout
99
104
  endpoint ||= configure.endpoint
100
- credentials ||= (keyfile || default_credentials(scope: scope))
105
+ credentials ||= keyfile || default_credentials(scope: scope)
101
106
  max_elapsed_time ||= configure.max_elapsed_time
102
107
  base_interval ||= configure.base_interval
103
108
  max_interval ||= configure.max_interval
104
109
  multiplier ||= configure.multiplier
110
+ upload_chunk_size ||= configure.upload_chunk_size
111
+ universe_domain ||= configure.universe_domain
105
112
 
106
113
  unless credentials.is_a? Google::Auth::Credentials
107
114
  credentials = Storage::Credentials.new credentials, scope: scope
@@ -117,7 +124,8 @@ module Google
117
124
  read_timeout: read_timeout, send_timeout: send_timeout,
118
125
  host: endpoint, quota_project: configure.quota_project,
119
126
  max_elapsed_time: max_elapsed_time, base_interval: base_interval,
120
- max_interval: max_interval, multiplier: multiplier
127
+ max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size,
128
+ universe_domain: universe_domain
121
129
  )
122
130
  )
123
131
  end
@@ -141,6 +149,11 @@ module Google
141
149
  # @param [Integer] send_timeout How long, in seconds, before receiving response from server times out. Optional.
142
150
  # @param [String] endpoint Override of the endpoint host name. Optional.
143
151
  # If the param is nil, uses the default endpoint.
152
+ # @param universe_domain [String] Override of the universe domain. Optional.
153
+ # If unset or nil, uses the default unvierse domain
154
+ # @param [Integer] upload_chunk_size The chunk size of storage upload, in bytes.
155
+ # The default value is 100 MB, i.e. 104_857_600 bytes. To disable chunking and upload
156
+ # the complete file regardless of size, pass 0 as the chunk size.
144
157
  #
145
158
  # @return [Google::Cloud::Storage::Project]
146
159
  #
@@ -159,7 +172,7 @@ module Google
159
172
  def self.anonymous retries: nil, timeout: nil, open_timeout: nil,
160
173
  read_timeout: nil, send_timeout: nil, endpoint: nil,
161
174
  max_elapsed_time: nil, base_interval: nil, max_interval: nil,
162
- multiplier: nil
175
+ multiplier: nil, upload_chunk_size: nil, universe_domain: nil
163
176
  open_timeout ||= timeout
164
177
  read_timeout ||= timeout
165
178
  send_timeout ||= timeout
@@ -168,7 +181,8 @@ module Google
168
181
  nil, nil, retries: retries, timeout: timeout, open_timeout: open_timeout,
169
182
  read_timeout: read_timeout, send_timeout: send_timeout, host: endpoint,
170
183
  max_elapsed_time: max_elapsed_time, base_interval: base_interval,
171
- max_interval: max_interval, multiplier: multiplier
184
+ max_interval: max_interval, multiplier: multiplier, upload_chunk_size: upload_chunk_size,
185
+ universe_domain: universe_domain
172
186
  )
173
187
  )
174
188
  end
@@ -202,6 +216,7 @@ module Google
202
216
  # * `open_timeout` - (Integer) How long, in seconds, before failed connections time out.
203
217
  # * `read_timeout` - (Integer) How long, in seconds, before requests time out.
204
218
  # * `send_timeout` - (Integer) How long, in seconds, before receiving response from server times out.
219
+ # * `upload_chunk_size` - (Integer) The chunk size of storage upload, in bytes.
205
220
  #
206
221
  # @return [Google::Cloud::Config] The configuration object the
207
222
  # Google::Cloud::Storage library uses.