google-cloud-storage 1.29.1 → 1.32.0
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 +4 -4
 - data/CHANGELOG.md +50 -0
 - data/CONTRIBUTING.md +4 -5
 - data/lib/google/cloud/storage/bucket.rb +242 -76
 - data/lib/google/cloud/storage/bucket/acl.rb +12 -14
 - data/lib/google/cloud/storage/bucket/cors.rb +4 -1
 - data/lib/google/cloud/storage/bucket/lifecycle.rb +11 -11
 - data/lib/google/cloud/storage/bucket/list.rb +3 -3
 - data/lib/google/cloud/storage/credentials.rb +16 -14
 - data/lib/google/cloud/storage/file.rb +223 -32
 - data/lib/google/cloud/storage/file/acl.rb +181 -20
 - data/lib/google/cloud/storage/file/list.rb +3 -3
 - data/lib/google/cloud/storage/file/signer_v2.rb +2 -4
 - data/lib/google/cloud/storage/file/signer_v4.rb +12 -10
 - data/lib/google/cloud/storage/file/verifier.rb +2 -2
 - data/lib/google/cloud/storage/hmac_key/list.rb +3 -3
 - data/lib/google/cloud/storage/policy.rb +2 -2
 - data/lib/google/cloud/storage/policy/binding.rb +5 -3
 - data/lib/google/cloud/storage/policy/bindings.rb +2 -2
 - data/lib/google/cloud/storage/policy/condition.rb +4 -2
 - data/lib/google/cloud/storage/post_object.rb +2 -1
 - data/lib/google/cloud/storage/project.rb +18 -6
 - data/lib/google/cloud/storage/service.rb +193 -64
 - data/lib/google/cloud/storage/version.rb +1 -1
 - metadata +34 -14
 
| 
         @@ -212,8 +212,8 @@ module Google 
     | 
|
| 
       212 
212 
     | 
    
         
             
                    def deep_dup
         
     | 
| 
       213 
213 
     | 
    
         
             
                      warn "DEPRECATED: Storage::PolicyV1#deep_dup"
         
     | 
| 
       214 
214 
     | 
    
         
             
                      dup.tap do |p|
         
     | 
| 
       215 
     | 
    
         
            -
                        roles_dup = p.roles. 
     | 
| 
       216 
     | 
    
         
            -
                           
     | 
| 
      
 215 
     | 
    
         
            +
                        roles_dup = p.roles.transform_values do |v|
         
     | 
| 
      
 216 
     | 
    
         
            +
                          v.dup rescue value
         
     | 
| 
       217 
217 
     | 
    
         
             
                        end
         
     | 
| 
       218 
218 
     | 
    
         
             
                        p.instance_variable_set :@roles, roles_dup
         
     | 
| 
       219 
219 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -89,7 +89,9 @@ module Google 
     | 
|
| 
       89 
89 
     | 
    
         
             
                    #   end
         
     | 
| 
       90 
90 
     | 
    
         
             
                    #
         
     | 
| 
       91 
91 
     | 
    
         
             
                    class Binding
         
     | 
| 
       92 
     | 
    
         
            -
                      attr_reader :role 
     | 
| 
      
 92 
     | 
    
         
            +
                      attr_reader :role
         
     | 
| 
      
 93 
     | 
    
         
            +
                      attr_reader :members
         
     | 
| 
      
 94 
     | 
    
         
            +
                      attr_reader :condition
         
     | 
| 
       93 
95 
     | 
    
         | 
| 
       94 
96 
     | 
    
         
             
                      ##
         
     | 
| 
       95 
97 
     | 
    
         
             
                      # Creates a Binding object.
         
     | 
| 
         @@ -128,8 +130,8 @@ module Google 
     | 
|
| 
       128 
130 
     | 
    
         
             
                        raise ArgumentError, "members is empty, must be provided" if @members.empty?
         
     | 
| 
       129 
131 
     | 
    
         | 
| 
       130 
132 
     | 
    
         
             
                        condition = Condition.new(**condition) if condition.is_a? Hash
         
     | 
| 
       131 
     | 
    
         
            -
                        if condition
         
     | 
| 
       132 
     | 
    
         
            -
                          raise ArgumentError, "expected Condition, not #{condition.inspect}" 
     | 
| 
      
 133 
     | 
    
         
            +
                        if condition && !(condition.is_a? Condition)
         
     | 
| 
      
 134 
     | 
    
         
            +
                          raise ArgumentError, "expected Condition, not #{condition.inspect}"
         
     | 
| 
       133 
135 
     | 
    
         
             
                        end
         
     | 
| 
       134 
136 
     | 
    
         
             
                        @condition = condition
         
     | 
| 
       135 
137 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -70,7 +70,9 @@ module Google 
     | 
|
| 
       70 
70 
     | 
    
         
             
                    #   end
         
     | 
| 
       71 
71 
     | 
    
         
             
                    #
         
     | 
| 
       72 
72 
     | 
    
         
             
                    class Condition
         
     | 
| 
       73 
     | 
    
         
            -
                      attr_reader :title 
     | 
| 
      
 73 
     | 
    
         
            +
                      attr_reader :title
         
     | 
| 
      
 74 
     | 
    
         
            +
                      attr_reader :description
         
     | 
| 
      
 75 
     | 
    
         
            +
                      attr_reader :expression
         
     | 
| 
       74 
76 
     | 
    
         | 
| 
       75 
77 
     | 
    
         
             
                      ##
         
     | 
| 
       76 
78 
     | 
    
         
             
                      # Creates a Condition object.
         
     | 
| 
         @@ -83,7 +85,7 @@ module Google 
     | 
|
| 
       83 
85 
     | 
    
         
             
                      #   one attributes, and statements are combined using logic operators,
         
     | 
| 
       84 
86 
     | 
    
         
             
                      #   following CEL language specification. Required.
         
     | 
| 
       85 
87 
     | 
    
         
             
                      #
         
     | 
| 
       86 
     | 
    
         
            -
                      def initialize title:, description: nil 
     | 
| 
      
 88 
     | 
    
         
            +
                      def initialize title:, expression:, description: nil
         
     | 
| 
       87 
89 
     | 
    
         
             
                        @title = String title
         
     | 
| 
       88 
90 
     | 
    
         
             
                        @description = String description
         
     | 
| 
       89 
91 
     | 
    
         
             
                        @expression = String expression
         
     | 
| 
         @@ -165,6 +165,11 @@ module Google 
     | 
|
| 
       165 
165 
     | 
    
         
             
                    #   without verifying the bucket resource exists on the Storage service.
         
     | 
| 
       166 
166 
     | 
    
         
             
                    #   Calls made on this object will raise errors if the bucket resource
         
     | 
| 
       167 
167 
     | 
    
         
             
                    #   does not exist. Default is `false`.
         
     | 
| 
      
 168 
     | 
    
         
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         
     | 
| 
      
 169 
     | 
    
         
            +
                    #   on whether the bucket's current metageneration matches the given value.
         
     | 
| 
      
 170 
     | 
    
         
            +
                    # @param [Integer] if_metageneration_not_match Makes the operation
         
     | 
| 
      
 171 
     | 
    
         
            +
                    #   conditional on whether the bucket's current metageneration does not
         
     | 
| 
      
 172 
     | 
    
         
            +
                    #   match the given value.
         
     | 
| 
       168 
173 
     | 
    
         
             
                    # @param [Boolean, String] user_project If this parameter is set to
         
     | 
| 
       169 
174 
     | 
    
         
             
                    #   `true`, transit costs for operations on the requested bucket or a
         
     | 
| 
       170 
175 
     | 
    
         
             
                    #   file it contains will be billed to the current project for this
         
     | 
| 
         @@ -208,12 +213,19 @@ module Google 
     | 
|
| 
       208 
213 
     | 
    
         
             
                    #                           user_project: "my-other-project"
         
     | 
| 
       209 
214 
     | 
    
         
             
                    #   files = bucket.files # Billed to "my-other-project"
         
     | 
| 
       210 
215 
     | 
    
         
             
                    #
         
     | 
| 
       211 
     | 
    
         
            -
                    def bucket bucket_name, 
     | 
| 
      
 216 
     | 
    
         
            +
                    def bucket bucket_name,
         
     | 
| 
      
 217 
     | 
    
         
            +
                               skip_lookup: false,
         
     | 
| 
      
 218 
     | 
    
         
            +
                               if_metageneration_match: nil,
         
     | 
| 
      
 219 
     | 
    
         
            +
                               if_metageneration_not_match: nil,
         
     | 
| 
      
 220 
     | 
    
         
            +
                               user_project: nil
         
     | 
| 
       212 
221 
     | 
    
         
             
                      if skip_lookup
         
     | 
| 
       213 
222 
     | 
    
         
             
                        return Bucket.new_lazy bucket_name, service,
         
     | 
| 
       214 
223 
     | 
    
         
             
                                               user_project: user_project
         
     | 
| 
       215 
224 
     | 
    
         
             
                      end
         
     | 
| 
       216 
     | 
    
         
            -
                      gapi = service.get_bucket bucket_name, 
     | 
| 
      
 225 
     | 
    
         
            +
                      gapi = service.get_bucket bucket_name,
         
     | 
| 
      
 226 
     | 
    
         
            +
                                                if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 227 
     | 
    
         
            +
                                                if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
      
 228 
     | 
    
         
            +
                                                user_project: user_project
         
     | 
| 
       217 
229 
     | 
    
         
             
                      Bucket.from_gapi gapi, service, user_project: user_project
         
     | 
| 
       218 
230 
     | 
    
         
             
                    rescue Google::Cloud::NotFoundError
         
     | 
| 
       219 
231 
     | 
    
         
             
                      nil
         
     | 
| 
         @@ -611,11 +623,11 @@ module Google 
     | 
|
| 
       611 
623 
     | 
    
         
             
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         
     | 
| 
       612 
624 
     | 
    
         
             
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         
     | 
| 
       613 
625 
     | 
    
         
             
                    #
         
     | 
| 
       614 
     | 
    
         
            -
                    #     request =  
     | 
| 
       615 
     | 
    
         
            -
                    #        
     | 
| 
       616 
     | 
    
         
            -
                    #      
     | 
| 
      
 626 
     | 
    
         
            +
                    #     request = Google::Apis::IamcredentialsV1::SignBlobRequest.new(
         
     | 
| 
      
 627 
     | 
    
         
            +
                    #       payload: string_to_sign
         
     | 
| 
      
 628 
     | 
    
         
            +
                    #     )
         
     | 
| 
       617 
629 
     | 
    
         
             
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         
     | 
| 
       618 
     | 
    
         
            -
                    #     response = iam_client.sign_service_account_blob resource, request 
     | 
| 
      
 630 
     | 
    
         
            +
                    #     response = iam_client.sign_service_account_blob resource, request
         
     | 
| 
       619 
631 
     | 
    
         
             
                    #     response.signed_blob
         
     | 
| 
       620 
632 
     | 
    
         
             
                    #   end
         
     | 
| 
       621 
633 
     | 
    
         
             
                    #
         
     | 
| 
         @@ -83,9 +83,14 @@ module Google 
     | 
|
| 
       83 
83 
     | 
    
         
             
                    ##
         
     | 
| 
       84 
84 
     | 
    
         
             
                    # Retrieves bucket by name.
         
     | 
| 
       85 
85 
     | 
    
         
             
                    # Returns Google::Apis::StorageV1::Bucket.
         
     | 
| 
       86 
     | 
    
         
            -
                    def get_bucket bucket_name, 
     | 
| 
      
 86 
     | 
    
         
            +
                    def get_bucket bucket_name,
         
     | 
| 
      
 87 
     | 
    
         
            +
                                   if_metageneration_match: nil,
         
     | 
| 
      
 88 
     | 
    
         
            +
                                   if_metageneration_not_match: nil,
         
     | 
| 
      
 89 
     | 
    
         
            +
                                   user_project: nil
         
     | 
| 
       87 
90 
     | 
    
         
             
                      execute do
         
     | 
| 
       88 
91 
     | 
    
         
             
                        service.get_bucket bucket_name,
         
     | 
| 
      
 92 
     | 
    
         
            +
                                           if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 93 
     | 
    
         
            +
                                           if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
       89 
94 
     | 
    
         
             
                                           user_project: user_project(user_project)
         
     | 
| 
       90 
95 
     | 
    
         
             
                      end
         
     | 
| 
       91 
96 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -106,26 +111,38 @@ module Google 
     | 
|
| 
       106 
111 
     | 
    
         | 
| 
       107 
112 
     | 
    
         
             
                    ##
         
     | 
| 
       108 
113 
     | 
    
         
             
                    # Updates a bucket, including its ACL metadata.
         
     | 
| 
       109 
     | 
    
         
            -
                    def patch_bucket bucket_name, 
     | 
| 
       110 
     | 
    
         
            -
                                      
     | 
| 
      
 114 
     | 
    
         
            +
                    def patch_bucket bucket_name,
         
     | 
| 
      
 115 
     | 
    
         
            +
                                     bucket_gapi = nil,
         
     | 
| 
      
 116 
     | 
    
         
            +
                                     predefined_acl: nil,
         
     | 
| 
      
 117 
     | 
    
         
            +
                                     predefined_default_acl: nil,
         
     | 
| 
      
 118 
     | 
    
         
            +
                                     if_metageneration_match: nil,
         
     | 
| 
      
 119 
     | 
    
         
            +
                                     if_metageneration_not_match: nil,
         
     | 
| 
      
 120 
     | 
    
         
            +
                                     user_project: nil
         
     | 
| 
       111 
121 
     | 
    
         
             
                      bucket_gapi ||= Google::Apis::StorageV1::Bucket.new
         
     | 
| 
       112 
122 
     | 
    
         
             
                      bucket_gapi.acl = [] if predefined_acl
         
     | 
| 
       113 
123 
     | 
    
         
             
                      bucket_gapi.default_object_acl = [] if predefined_default_acl
         
     | 
| 
       114 
124 
     | 
    
         | 
| 
       115 
125 
     | 
    
         
             
                      execute do
         
     | 
| 
       116 
     | 
    
         
            -
                        service.patch_bucket  
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
      
 126 
     | 
    
         
            +
                        service.patch_bucket bucket_name,
         
     | 
| 
      
 127 
     | 
    
         
            +
                                             bucket_gapi,
         
     | 
| 
      
 128 
     | 
    
         
            +
                                             predefined_acl: predefined_acl,
         
     | 
| 
      
 129 
     | 
    
         
            +
                                             predefined_default_object_acl: predefined_default_acl,
         
     | 
| 
      
 130 
     | 
    
         
            +
                                             if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 131 
     | 
    
         
            +
                                             if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
      
 132 
     | 
    
         
            +
                                             user_project: user_project(user_project)
         
     | 
| 
       121 
133 
     | 
    
         
             
                      end
         
     | 
| 
       122 
134 
     | 
    
         
             
                    end
         
     | 
| 
       123 
135 
     | 
    
         | 
| 
       124 
136 
     | 
    
         
             
                    ##
         
     | 
| 
       125 
137 
     | 
    
         
             
                    # Permanently deletes an empty bucket.
         
     | 
| 
       126 
     | 
    
         
            -
                    def delete_bucket bucket_name, 
     | 
| 
      
 138 
     | 
    
         
            +
                    def delete_bucket bucket_name,
         
     | 
| 
      
 139 
     | 
    
         
            +
                                      if_metageneration_match: nil,
         
     | 
| 
      
 140 
     | 
    
         
            +
                                      if_metageneration_not_match: nil,
         
     | 
| 
      
 141 
     | 
    
         
            +
                                      user_project: nil
         
     | 
| 
       127 
142 
     | 
    
         
             
                      execute do
         
     | 
| 
       128 
143 
     | 
    
         
             
                        service.delete_bucket bucket_name,
         
     | 
| 
      
 144 
     | 
    
         
            +
                                              if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 145 
     | 
    
         
            +
                                              if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
       129 
146 
     | 
    
         
             
                                              user_project: user_project(user_project)
         
     | 
| 
       130 
147 
     | 
    
         
             
                      end
         
     | 
| 
       131 
148 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -290,41 +307,83 @@ module Google 
     | 
|
| 
       290 
307 
     | 
    
         | 
| 
       291 
308 
     | 
    
         
             
                    ##
         
     | 
| 
       292 
309 
     | 
    
         
             
                    # Inserts a new file for the given bucket
         
     | 
| 
       293 
     | 
    
         
            -
                    def insert_file bucket_name, 
     | 
| 
       294 
     | 
    
         
            -
                                     
     | 
| 
       295 
     | 
    
         
            -
                                     
     | 
| 
       296 
     | 
    
         
            -
                                     
     | 
| 
       297 
     | 
    
         
            -
                                     
     | 
| 
       298 
     | 
    
         
            -
                                     
     | 
| 
      
 310 
     | 
    
         
            +
                    def insert_file bucket_name,
         
     | 
| 
      
 311 
     | 
    
         
            +
                                    source,
         
     | 
| 
      
 312 
     | 
    
         
            +
                                    path = nil,
         
     | 
| 
      
 313 
     | 
    
         
            +
                                    acl: nil,
         
     | 
| 
      
 314 
     | 
    
         
            +
                                    cache_control: nil,
         
     | 
| 
      
 315 
     | 
    
         
            +
                                    content_disposition: nil,
         
     | 
| 
      
 316 
     | 
    
         
            +
                                    content_encoding: nil,
         
     | 
| 
      
 317 
     | 
    
         
            +
                                    content_language: nil,
         
     | 
| 
      
 318 
     | 
    
         
            +
                                    content_type: nil,
         
     | 
| 
      
 319 
     | 
    
         
            +
                                    custom_time: nil,
         
     | 
| 
      
 320 
     | 
    
         
            +
                                    crc32c: nil,
         
     | 
| 
      
 321 
     | 
    
         
            +
                                    md5: nil,
         
     | 
| 
      
 322 
     | 
    
         
            +
                                    metadata: nil,
         
     | 
| 
      
 323 
     | 
    
         
            +
                                    storage_class: nil,
         
     | 
| 
      
 324 
     | 
    
         
            +
                                    key: nil,
         
     | 
| 
      
 325 
     | 
    
         
            +
                                    kms_key: nil,
         
     | 
| 
      
 326 
     | 
    
         
            +
                                    temporary_hold: nil,
         
     | 
| 
      
 327 
     | 
    
         
            +
                                    event_based_hold: nil,
         
     | 
| 
      
 328 
     | 
    
         
            +
                                    if_generation_match: nil,
         
     | 
| 
      
 329 
     | 
    
         
            +
                                    if_generation_not_match: nil,
         
     | 
| 
      
 330 
     | 
    
         
            +
                                    if_metageneration_match: nil,
         
     | 
| 
      
 331 
     | 
    
         
            +
                                    if_metageneration_not_match: nil,
         
     | 
| 
       299 
332 
     | 
    
         
             
                                    user_project: nil
         
     | 
| 
       300 
     | 
    
         
            -
                      params =
         
     | 
| 
       301 
     | 
    
         
            -
                         
     | 
| 
       302 
     | 
    
         
            -
             
     | 
| 
       303 
     | 
    
         
            -
             
     | 
| 
       304 
     | 
    
         
            -
             
     | 
| 
       305 
     | 
    
         
            -
             
     | 
| 
       306 
     | 
    
         
            -
             
     | 
| 
      
 333 
     | 
    
         
            +
                      params = {
         
     | 
| 
      
 334 
     | 
    
         
            +
                        cache_control: cache_control,
         
     | 
| 
      
 335 
     | 
    
         
            +
                        content_type: content_type,
         
     | 
| 
      
 336 
     | 
    
         
            +
                        custom_time: custom_time,
         
     | 
| 
      
 337 
     | 
    
         
            +
                        content_disposition: content_disposition,
         
     | 
| 
      
 338 
     | 
    
         
            +
                        md5_hash: md5,
         
     | 
| 
      
 339 
     | 
    
         
            +
                        content_encoding: content_encoding,
         
     | 
| 
      
 340 
     | 
    
         
            +
                        crc32c: crc32c,
         
     | 
| 
      
 341 
     | 
    
         
            +
                        content_language: content_language,
         
     | 
| 
      
 342 
     | 
    
         
            +
                        metadata: metadata,
         
     | 
| 
      
 343 
     | 
    
         
            +
                        storage_class: storage_class,
         
     | 
| 
      
 344 
     | 
    
         
            +
                        temporary_hold: temporary_hold,
         
     | 
| 
      
 345 
     | 
    
         
            +
                        event_based_hold: event_based_hold
         
     | 
| 
      
 346 
     | 
    
         
            +
                      }.delete_if { |_k, v| v.nil? }
         
     | 
| 
       307 
347 
     | 
    
         
             
                      file_obj = Google::Apis::StorageV1::Object.new(**params)
         
     | 
| 
       308 
348 
     | 
    
         
             
                      content_type ||= mime_type_for(path || Pathname(source).to_path)
         
     | 
| 
       309 
349 
     | 
    
         | 
| 
       310 
350 
     | 
    
         
             
                      execute do
         
     | 
| 
       311 
     | 
    
         
            -
                        service.insert_object  
     | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
             
     | 
| 
       316 
     | 
    
         
            -
             
     | 
| 
      
 351 
     | 
    
         
            +
                        service.insert_object bucket_name,
         
     | 
| 
      
 352 
     | 
    
         
            +
                                              file_obj,
         
     | 
| 
      
 353 
     | 
    
         
            +
                                              name: path,
         
     | 
| 
      
 354 
     | 
    
         
            +
                                              predefined_acl: acl,
         
     | 
| 
      
 355 
     | 
    
         
            +
                                              upload_source: source,
         
     | 
| 
      
 356 
     | 
    
         
            +
                                              content_encoding: content_encoding,
         
     | 
| 
      
 357 
     | 
    
         
            +
                                              content_type: content_type,
         
     | 
| 
      
 358 
     | 
    
         
            +
                                              if_generation_match: if_generation_match,
         
     | 
| 
      
 359 
     | 
    
         
            +
                                              if_generation_not_match: if_generation_not_match,
         
     | 
| 
      
 360 
     | 
    
         
            +
                                              if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 361 
     | 
    
         
            +
                                              if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
      
 362 
     | 
    
         
            +
                                              kms_key_name: kms_key,
         
     | 
| 
      
 363 
     | 
    
         
            +
                                              user_project: user_project(user_project),
         
     | 
| 
      
 364 
     | 
    
         
            +
                                              options: key_options(key)
         
     | 
| 
       317 
365 
     | 
    
         
             
                      end
         
     | 
| 
       318 
366 
     | 
    
         
             
                    end
         
     | 
| 
       319 
367 
     | 
    
         | 
| 
       320 
368 
     | 
    
         
             
                    ##
         
     | 
| 
       321 
369 
     | 
    
         
             
                    # Retrieves an object or its metadata.
         
     | 
| 
       322 
     | 
    
         
            -
                    def get_file bucket_name, 
     | 
| 
      
 370 
     | 
    
         
            +
                    def get_file bucket_name,
         
     | 
| 
      
 371 
     | 
    
         
            +
                                 file_path,
         
     | 
| 
      
 372 
     | 
    
         
            +
                                 generation: nil,
         
     | 
| 
      
 373 
     | 
    
         
            +
                                 if_generation_match: nil,
         
     | 
| 
      
 374 
     | 
    
         
            +
                                 if_generation_not_match: nil,
         
     | 
| 
      
 375 
     | 
    
         
            +
                                 if_metageneration_match: nil,
         
     | 
| 
      
 376 
     | 
    
         
            +
                                 if_metageneration_not_match: nil,
         
     | 
| 
      
 377 
     | 
    
         
            +
                                 key: nil,
         
     | 
| 
       323 
378 
     | 
    
         
             
                                 user_project: nil
         
     | 
| 
       324 
379 
     | 
    
         
             
                      execute do
         
     | 
| 
       325 
380 
     | 
    
         
             
                        service.get_object \
         
     | 
| 
       326 
381 
     | 
    
         
             
                          bucket_name, file_path,
         
     | 
| 
       327 
382 
     | 
    
         
             
                          generation: generation,
         
     | 
| 
      
 383 
     | 
    
         
            +
                          if_generation_match: if_generation_match,
         
     | 
| 
      
 384 
     | 
    
         
            +
                          if_generation_not_match: if_generation_not_match,
         
     | 
| 
      
 385 
     | 
    
         
            +
                          if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 386 
     | 
    
         
            +
                          if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
       328 
387 
     | 
    
         
             
                          user_project: user_project(user_project),
         
     | 
| 
       329 
388 
     | 
    
         
             
                          options: key_options(key)
         
     | 
| 
       330 
389 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -332,42 +391,76 @@ module Google 
     | 
|
| 
       332 
391 
     | 
    
         | 
| 
       333 
392 
     | 
    
         
             
                    ## Rewrite a file from source bucket/object to a
         
     | 
| 
       334 
393 
     | 
    
         
             
                    # destination bucket/object.
         
     | 
| 
       335 
     | 
    
         
            -
                    def rewrite_file source_bucket_name, 
     | 
| 
       336 
     | 
    
         
            -
                                      
     | 
| 
       337 
     | 
    
         
            -
                                      
     | 
| 
       338 
     | 
    
         
            -
                                      
     | 
| 
       339 
     | 
    
         
            -
                                      
     | 
| 
      
 394 
     | 
    
         
            +
                    def rewrite_file source_bucket_name,
         
     | 
| 
      
 395 
     | 
    
         
            +
                                     source_file_path,
         
     | 
| 
      
 396 
     | 
    
         
            +
                                     destination_bucket_name,
         
     | 
| 
      
 397 
     | 
    
         
            +
                                     destination_file_path,
         
     | 
| 
      
 398 
     | 
    
         
            +
                                     file_gapi = nil,
         
     | 
| 
      
 399 
     | 
    
         
            +
                                     source_key: nil,
         
     | 
| 
      
 400 
     | 
    
         
            +
                                     destination_key: nil,
         
     | 
| 
      
 401 
     | 
    
         
            +
                                     destination_kms_key: nil,
         
     | 
| 
      
 402 
     | 
    
         
            +
                                     acl: nil,
         
     | 
| 
      
 403 
     | 
    
         
            +
                                     generation: nil,
         
     | 
| 
      
 404 
     | 
    
         
            +
                                     if_generation_match: nil,
         
     | 
| 
      
 405 
     | 
    
         
            +
                                     if_generation_not_match: nil,
         
     | 
| 
      
 406 
     | 
    
         
            +
                                     if_metageneration_match: nil,
         
     | 
| 
      
 407 
     | 
    
         
            +
                                     if_metageneration_not_match: nil,
         
     | 
| 
      
 408 
     | 
    
         
            +
                                     if_source_generation_match: nil,
         
     | 
| 
      
 409 
     | 
    
         
            +
                                     if_source_generation_not_match: nil,
         
     | 
| 
      
 410 
     | 
    
         
            +
                                     if_source_metageneration_match: nil,
         
     | 
| 
      
 411 
     | 
    
         
            +
                                     if_source_metageneration_not_match: nil,
         
     | 
| 
      
 412 
     | 
    
         
            +
                                     token: nil,
         
     | 
| 
      
 413 
     | 
    
         
            +
                                     user_project: nil
         
     | 
| 
       340 
414 
     | 
    
         
             
                      key_options = rewrite_key_options source_key, destination_key
         
     | 
| 
       341 
415 
     | 
    
         
             
                      execute do
         
     | 
| 
       342 
     | 
    
         
            -
                        service.rewrite_object  
     | 
| 
       343 
     | 
    
         
            -
             
     | 
| 
       344 
     | 
    
         
            -
             
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
     | 
    
         
            -
             
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
             
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
       350 
     | 
    
         
            -
             
     | 
| 
       351 
     | 
    
         
            -
             
     | 
| 
      
 416 
     | 
    
         
            +
                        service.rewrite_object source_bucket_name,
         
     | 
| 
      
 417 
     | 
    
         
            +
                                               source_file_path,
         
     | 
| 
      
 418 
     | 
    
         
            +
                                               destination_bucket_name,
         
     | 
| 
      
 419 
     | 
    
         
            +
                                               destination_file_path,
         
     | 
| 
      
 420 
     | 
    
         
            +
                                               file_gapi,
         
     | 
| 
      
 421 
     | 
    
         
            +
                                               destination_kms_key_name: destination_kms_key,
         
     | 
| 
      
 422 
     | 
    
         
            +
                                               destination_predefined_acl: acl,
         
     | 
| 
      
 423 
     | 
    
         
            +
                                               source_generation: generation,
         
     | 
| 
      
 424 
     | 
    
         
            +
                                               if_generation_match: if_generation_match,
         
     | 
| 
      
 425 
     | 
    
         
            +
                                               if_generation_not_match: if_generation_not_match,
         
     | 
| 
      
 426 
     | 
    
         
            +
                                               if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 427 
     | 
    
         
            +
                                               if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
      
 428 
     | 
    
         
            +
                                               if_source_generation_match: if_source_generation_match,
         
     | 
| 
      
 429 
     | 
    
         
            +
                                               if_source_generation_not_match: if_source_generation_not_match,
         
     | 
| 
      
 430 
     | 
    
         
            +
                                               if_source_metageneration_match: if_source_metageneration_match,
         
     | 
| 
      
 431 
     | 
    
         
            +
                                               if_source_metageneration_not_match: if_source_metageneration_not_match,
         
     | 
| 
      
 432 
     | 
    
         
            +
                                               rewrite_token: token,
         
     | 
| 
      
 433 
     | 
    
         
            +
                                               user_project: user_project(user_project),
         
     | 
| 
      
 434 
     | 
    
         
            +
                                               options: key_options
         
     | 
| 
       352 
435 
     | 
    
         
             
                      end
         
     | 
| 
       353 
436 
     | 
    
         
             
                    end
         
     | 
| 
       354 
437 
     | 
    
         | 
| 
       355 
438 
     | 
    
         
             
                    ## Copy a file from source bucket/object to a
         
     | 
| 
       356 
439 
     | 
    
         
             
                    # destination bucket/object.
         
     | 
| 
       357 
     | 
    
         
            -
                    def compose_file bucket_name, 
     | 
| 
       358 
     | 
    
         
            -
                                      
     | 
| 
      
 440 
     | 
    
         
            +
                    def compose_file bucket_name,
         
     | 
| 
      
 441 
     | 
    
         
            +
                                     source_files,
         
     | 
| 
      
 442 
     | 
    
         
            +
                                     destination_path,
         
     | 
| 
      
 443 
     | 
    
         
            +
                                     destination_gapi,
         
     | 
| 
      
 444 
     | 
    
         
            +
                                     acl: nil,
         
     | 
| 
      
 445 
     | 
    
         
            +
                                     key: nil,
         
     | 
| 
      
 446 
     | 
    
         
            +
                                     if_source_generation_match: nil,
         
     | 
| 
      
 447 
     | 
    
         
            +
                                     if_generation_match: nil,
         
     | 
| 
      
 448 
     | 
    
         
            +
                                     if_metageneration_match: nil,
         
     | 
| 
      
 449 
     | 
    
         
            +
                                     user_project: nil
         
     | 
| 
       359 
450 
     | 
    
         | 
| 
       360 
     | 
    
         
            -
                       
     | 
| 
       361 
     | 
    
         
            -
             
     | 
| 
       362 
     | 
    
         
            -
             
     | 
| 
      
 451 
     | 
    
         
            +
                      source_objects = compose_file_source_objects source_files, if_source_generation_match
         
     | 
| 
      
 452 
     | 
    
         
            +
                      compose_req = Google::Apis::StorageV1::ComposeRequest.new source_objects: source_objects,
         
     | 
| 
      
 453 
     | 
    
         
            +
                                                                                destination: destination_gapi
         
     | 
| 
       363 
454 
     | 
    
         | 
| 
       364 
455 
     | 
    
         
             
                      execute do
         
     | 
| 
       365 
     | 
    
         
            -
                        service.compose_object  
     | 
| 
       366 
     | 
    
         
            -
             
     | 
| 
       367 
     | 
    
         
            -
             
     | 
| 
       368 
     | 
    
         
            -
             
     | 
| 
       369 
     | 
    
         
            -
             
     | 
| 
       370 
     | 
    
         
            -
             
     | 
| 
      
 456 
     | 
    
         
            +
                        service.compose_object bucket_name,
         
     | 
| 
      
 457 
     | 
    
         
            +
                                               destination_path,
         
     | 
| 
      
 458 
     | 
    
         
            +
                                               compose_req,
         
     | 
| 
      
 459 
     | 
    
         
            +
                                               destination_predefined_acl: acl,
         
     | 
| 
      
 460 
     | 
    
         
            +
                                               if_generation_match: if_generation_match,
         
     | 
| 
      
 461 
     | 
    
         
            +
                                               if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 462 
     | 
    
         
            +
                                               user_project: user_project(user_project),
         
     | 
| 
      
 463 
     | 
    
         
            +
                                               options: key_options(key)
         
     | 
| 
       371 
464 
     | 
    
         
             
                      end
         
     | 
| 
       372 
465 
     | 
    
         
             
                    end
         
     | 
| 
       373 
466 
     | 
    
         | 
| 
         @@ -396,24 +489,48 @@ module Google 
     | 
|
| 
       396 
489 
     | 
    
         | 
| 
       397 
490 
     | 
    
         
             
                    ##
         
     | 
| 
       398 
491 
     | 
    
         
             
                    # Updates a file's metadata.
         
     | 
| 
       399 
     | 
    
         
            -
                    def patch_file bucket_name, 
     | 
| 
       400 
     | 
    
         
            -
                                    
     | 
| 
      
 492 
     | 
    
         
            +
                    def patch_file bucket_name,
         
     | 
| 
      
 493 
     | 
    
         
            +
                                   file_path,
         
     | 
| 
      
 494 
     | 
    
         
            +
                                   file_gapi = nil,
         
     | 
| 
      
 495 
     | 
    
         
            +
                                   generation: nil,
         
     | 
| 
      
 496 
     | 
    
         
            +
                                   if_generation_match: nil,
         
     | 
| 
      
 497 
     | 
    
         
            +
                                   if_generation_not_match: nil,
         
     | 
| 
      
 498 
     | 
    
         
            +
                                   if_metageneration_match: nil,
         
     | 
| 
      
 499 
     | 
    
         
            +
                                   if_metageneration_not_match: nil,
         
     | 
| 
      
 500 
     | 
    
         
            +
                                   predefined_acl: nil,
         
     | 
| 
      
 501 
     | 
    
         
            +
                                   user_project: nil
         
     | 
| 
       401 
502 
     | 
    
         
             
                      file_gapi ||= Google::Apis::StorageV1::Object.new
         
     | 
| 
       402 
503 
     | 
    
         
             
                      execute do
         
     | 
| 
       403 
     | 
    
         
            -
                        service.patch_object  
     | 
| 
       404 
     | 
    
         
            -
             
     | 
| 
       405 
     | 
    
         
            -
             
     | 
| 
       406 
     | 
    
         
            -
             
     | 
| 
      
 504 
     | 
    
         
            +
                        service.patch_object bucket_name,
         
     | 
| 
      
 505 
     | 
    
         
            +
                                             file_path,
         
     | 
| 
      
 506 
     | 
    
         
            +
                                             file_gapi,
         
     | 
| 
      
 507 
     | 
    
         
            +
                                             generation: generation,
         
     | 
| 
      
 508 
     | 
    
         
            +
                                             if_generation_match: if_generation_match,
         
     | 
| 
      
 509 
     | 
    
         
            +
                                             if_generation_not_match: if_generation_not_match,
         
     | 
| 
      
 510 
     | 
    
         
            +
                                             if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 511 
     | 
    
         
            +
                                             if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
      
 512 
     | 
    
         
            +
                                             predefined_acl: predefined_acl,
         
     | 
| 
      
 513 
     | 
    
         
            +
                                             user_project: user_project(user_project)
         
     | 
| 
       407 
514 
     | 
    
         
             
                      end
         
     | 
| 
       408 
515 
     | 
    
         
             
                    end
         
     | 
| 
       409 
516 
     | 
    
         | 
| 
       410 
517 
     | 
    
         
             
                    ##
         
     | 
| 
       411 
518 
     | 
    
         
             
                    # Permanently deletes a file.
         
     | 
| 
       412 
     | 
    
         
            -
                    def delete_file bucket_name, 
     | 
| 
      
 519 
     | 
    
         
            +
                    def delete_file bucket_name,
         
     | 
| 
      
 520 
     | 
    
         
            +
                                    file_path,
         
     | 
| 
      
 521 
     | 
    
         
            +
                                    generation: nil,
         
     | 
| 
      
 522 
     | 
    
         
            +
                                    if_generation_match: nil,
         
     | 
| 
      
 523 
     | 
    
         
            +
                                    if_generation_not_match: nil,
         
     | 
| 
      
 524 
     | 
    
         
            +
                                    if_metageneration_match: nil,
         
     | 
| 
      
 525 
     | 
    
         
            +
                                    if_metageneration_not_match: nil,
         
     | 
| 
       413 
526 
     | 
    
         
             
                                    user_project: nil
         
     | 
| 
       414 
527 
     | 
    
         
             
                      execute do
         
     | 
| 
       415 
528 
     | 
    
         
             
                        service.delete_object bucket_name, file_path,
         
     | 
| 
       416 
529 
     | 
    
         
             
                                              generation: generation,
         
     | 
| 
      
 530 
     | 
    
         
            +
                                              if_generation_match: if_generation_match,
         
     | 
| 
      
 531 
     | 
    
         
            +
                                              if_generation_not_match: if_generation_not_match,
         
     | 
| 
      
 532 
     | 
    
         
            +
                                              if_metageneration_match: if_metageneration_match,
         
     | 
| 
      
 533 
     | 
    
         
            +
                                              if_metageneration_not_match: if_metageneration_not_match,
         
     | 
| 
       417 
534 
     | 
    
         
             
                                              user_project: user_project(user_project)
         
     | 
| 
       418 
535 
     | 
    
         
             
                      end
         
     | 
| 
       419 
536 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -615,8 +732,8 @@ module Google 
     | 
|
| 
       615 
732 
     | 
    
         
             
                        "false" => "NONE" }[str_or_bool.to_s.downcase]
         
     | 
| 
       616 
733 
     | 
    
         
             
                    end
         
     | 
| 
       617 
734 
     | 
    
         | 
| 
       618 
     | 
    
         
            -
                    def compose_file_source_objects source_files
         
     | 
| 
       619 
     | 
    
         
            -
                      source_files.map do |file|
         
     | 
| 
      
 735 
     | 
    
         
            +
                    def compose_file_source_objects source_files, if_source_generation_match
         
     | 
| 
      
 736 
     | 
    
         
            +
                      source_objects = source_files.map do |file|
         
     | 
| 
       620 
737 
     | 
    
         
             
                        if file.is_a? Google::Cloud::Storage::File
         
     | 
| 
       621 
738 
     | 
    
         
             
                          Google::Apis::StorageV1::ComposeRequest::SourceObject.new \
         
     | 
| 
       622 
739 
     | 
    
         
             
                            name: file.name,
         
     | 
| 
         @@ -626,6 +743,18 @@ module Google 
     | 
|
| 
       626 
743 
     | 
    
         
             
                            name: file
         
     | 
| 
       627 
744 
     | 
    
         
             
                        end
         
     | 
| 
       628 
745 
     | 
    
         
             
                      end
         
     | 
| 
      
 746 
     | 
    
         
            +
                      return source_objects unless if_source_generation_match
         
     | 
| 
      
 747 
     | 
    
         
            +
                      if source_files.count != if_source_generation_match.count
         
     | 
| 
      
 748 
     | 
    
         
            +
                        raise ArgumentError, "if provided, if_source_generation_match length must match sources length"
         
     | 
| 
      
 749 
     | 
    
         
            +
                      end
         
     | 
| 
      
 750 
     | 
    
         
            +
                      if_source_generation_match.each_with_index do |generation, i|
         
     | 
| 
      
 751 
     | 
    
         
            +
                        next unless generation
         
     | 
| 
      
 752 
     | 
    
         
            +
                        object_preconditions = Google::Apis::StorageV1::ComposeRequest::SourceObject::ObjectPreconditions.new(
         
     | 
| 
      
 753 
     | 
    
         
            +
                          if_generation_match: generation
         
     | 
| 
      
 754 
     | 
    
         
            +
                        )
         
     | 
| 
      
 755 
     | 
    
         
            +
                        source_objects[i].object_preconditions = object_preconditions
         
     | 
| 
      
 756 
     | 
    
         
            +
                      end
         
     | 
| 
      
 757 
     | 
    
         
            +
                      source_objects
         
     | 
| 
       629 
758 
     | 
    
         
             
                    end
         
     | 
| 
       630 
759 
     | 
    
         | 
| 
       631 
760 
     | 
    
         
             
                    def execute
         
     |