google-cloud-storage 1.29.2 → 1.33.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 +55 -0
- data/CONTRIBUTING.md +3 -4
- data/lib/google/cloud/storage/bucket.rb +344 -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 +11 -9
- 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
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6900463b2861e35e33cef3bda84de638f0f9e7d80e8424755f5eef311bd20352
         | 
| 4 | 
            +
              data.tar.gz: 6469082cd9d6b158a71a808874104e20128187c4c611a0fe71dbd80b0f68e54e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4d32314a8813b66cf6ec488be10c8ac174cb71a54d175cff9f33809a529f4851ff2482a43c646f114c91cac4bf7fbc90cc4135caab85d1a55ab8c732f11c1c5f
         | 
| 7 | 
            +
              data.tar.gz: '08382f70eb5759b7ccb98ac0bb793bed114bd3fcc24b6ca8e3ecc02af2e60540f1761d36133d8299b043155d260d9a659ab2d5b0cda6a27eb40ead70d7b7d6d1'
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,60 @@ | |
| 1 1 | 
             
            # Release History
         | 
| 2 2 |  | 
| 3 | 
            +
            ### 1.33.0 / 2021-06-29
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #### Features
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Add support for PublicAccessPrevention
         | 
| 8 | 
            +
              * Add Bucket#public_access_prevention
         | 
| 9 | 
            +
              * Add Bucket#public_access_prevention=
         | 
| 10 | 
            +
              * Add Bucket#public_access_prevention_enforced?
         | 
| 11 | 
            +
              * Add Bucket#public_access_prevention_unspecified?
         | 
| 12 | 
            +
              * Add samples for PublicAccessPrevention
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            ### 1.32.0 / 2021-06-22
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            #### Features
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * Add sources_if_generation_match to Bucket#compose
         | 
| 19 | 
            +
            * Add support for (meta)generation preconditions to File operations
         | 
| 20 | 
            +
              * Add if_(meta)generation_match options to Bucket#compose
         | 
| 21 | 
            +
              * Add if_(meta)generation_(not_)match options to Bucket#create_file
         | 
| 22 | 
            +
              * Add if_(meta)generation_(not_)match options to Bucket#file
         | 
| 23 | 
            +
              * Add if_(meta)generation_(not_)match options to File#delete.
         | 
| 24 | 
            +
              * Add if_(meta)generation_(not_)match options to File#rewrite
         | 
| 25 | 
            +
              * Add generation and if_(meta)generation_(not_)match options to File#update
         | 
| 26 | 
            +
              * Add generation and if_(meta)generation_(not_)match options to File::Acl predefined_acl methods
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            #### Bug Fixes
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            * Expand googleauth dependency to support future 1.x versions
         | 
| 31 | 
            +
            * Update File::Verifier to test for File#to_path
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ### 1.31.1 / 2021-05-19
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            #### Documentation
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            * Update IAMCredentialsService#sign_service_account_blob examples
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            ### 1.31.0 / 2021-03-10
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            #### Features
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            * Drop support for Ruby 2.4 and add support for Ruby 3.0
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ### 1.30.0 / 2021-01-13
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            #### Features
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            * Replace google-api-client with specific client gems
         | 
| 50 | 
            +
              * Remove google-api-client
         | 
| 51 | 
            +
              * Add google-apis-iamcredentials_v1
         | 
| 52 | 
            +
              * Add google-apis-storage_v1
         | 
| 53 | 
            +
             | 
| 54 | 
            +
            #### Documentation
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            * Update Bucket#generate_signed_post_policy_v4 documentation
         | 
| 57 | 
            +
             | 
| 3 58 | 
             
            ### 1.29.2 / 2020-12-14
         | 
| 4 59 |  | 
| 5 60 | 
             
            #### Bug Fixes
         | 
    
        data/CONTRIBUTING.md
    CHANGED
    
    | @@ -24,7 +24,7 @@ be able to accept your pull requests. | |
| 24 24 | 
             
            In order to use the google-cloud-storage console and run the project's tests,
         | 
| 25 25 | 
             
            there is a small amount of setup:
         | 
| 26 26 |  | 
| 27 | 
            -
            1. Install Ruby. google-cloud-storage requires Ruby 2. | 
| 27 | 
            +
            1. Install Ruby. google-cloud-storage requires Ruby 2.5+. You may choose to
         | 
| 28 28 | 
             
               manage your Ruby and gem installations with [RVM](https://rvm.io/),
         | 
| 29 29 | 
             
               [rbenv](https://github.com/rbenv/rbenv), or
         | 
| 30 30 | 
             
               [chruby](https://github.com/postmodern/chruby).
         | 
| @@ -119,15 +119,14 @@ If you alter an example's title, you may encounter breaking tests. | |
| 119 119 | 
             
            ### Storage Acceptance Tests
         | 
| 120 120 |  | 
| 121 121 | 
             
            The Storage acceptance tests interact with the live service API. Follow the
         | 
| 122 | 
            -
            instructions in the {file:AUTHENTICATION.md Authentication  | 
| 122 | 
            +
            instructions in the {file:AUTHENTICATION.md Authentication Guide} for enabling
         | 
| 123 123 | 
             
            the Storage API. Occasionally, some API features may not yet be generally
         | 
| 124 124 | 
             
            available, making it difficult for some contributors to successfully run the
         | 
| 125 125 | 
             
            entire acceptance test suite. However, please ensure that you do successfully
         | 
| 126 126 | 
             
            run acceptance tests for any code areas covered by your pull request.
         | 
| 127 127 |  | 
| 128 128 | 
             
            To run the acceptance tests, first create and configure a project in the Google
         | 
| 129 | 
            -
            Developers Console, as described in the {file:AUTHENTICATION.md Authentication
         | 
| 130 | 
            -
            guide}. Be sure to download the JSON KEY file. Make note of the PROJECT_ID and
         | 
| 129 | 
            +
            Developers Console, as described in the {file:AUTHENTICATION.md Authentication Guide}. Be sure to download the JSON KEY file. Make note of the PROJECT_ID and
         | 
| 131 130 | 
             
            the KEYFILE location on your system.
         | 
| 132 131 |  | 
| 133 132 | 
             
            Before you can run the Storage acceptance tests, you must first create indexes
         | 
| @@ -309,12 +309,15 @@ module Google | |
| 309 309 | 
             
                    # @see https://cloud.google.com/storage/docs/access-logs Access Logs
         | 
| 310 310 | 
             
                    #
         | 
| 311 311 | 
             
                    def logging_bucket
         | 
| 312 | 
            -
                      @gapi.logging | 
| 312 | 
            +
                      @gapi.logging&.log_bucket
         | 
| 313 313 | 
             
                    end
         | 
| 314 314 |  | 
| 315 315 | 
             
                    ##
         | 
| 316 316 | 
             
                    # Updates the destination bucket for the bucket's logs.
         | 
| 317 317 | 
             
                    #
         | 
| 318 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 319 | 
            +
                    # block passed to {#update}.
         | 
| 320 | 
            +
                    #
         | 
| 318 321 | 
             
                    # @see https://cloud.google.com/storage/docs/access-logs Access Logs
         | 
| 319 322 | 
             
                    #
         | 
| 320 323 | 
             
                    # @param [String] logging_bucket The bucket to hold the logging output
         | 
| @@ -333,7 +336,7 @@ module Google | |
| 333 336 | 
             
                    # @return [String]
         | 
| 334 337 | 
             
                    #
         | 
| 335 338 | 
             
                    def logging_prefix
         | 
| 336 | 
            -
                      @gapi.logging | 
| 339 | 
            +
                      @gapi.logging&.log_object_prefix
         | 
| 337 340 | 
             
                    end
         | 
| 338 341 |  | 
| 339 342 | 
             
                    ##
         | 
| @@ -344,6 +347,9 @@ module Google | |
| 344 347 | 
             
                    # By default, the object prefix is the name of the bucket for which the
         | 
| 345 348 | 
             
                    # logs are enabled.
         | 
| 346 349 | 
             
                    #
         | 
| 350 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 351 | 
            +
                    # block passed to {#update}.
         | 
| 352 | 
            +
                    #
         | 
| 347 353 | 
             
                    # @see https://cloud.google.com/storage/docs/access-logs Access Logs
         | 
| 348 354 | 
             
                    #
         | 
| 349 355 | 
             
                    # @param [String] logging_prefix The logging object prefix.
         | 
| @@ -377,6 +383,9 @@ module Google | |
| 377 383 | 
             
                    # For more information, see [Storage
         | 
| 378 384 | 
             
                    # Classes](https://cloud.google.com/storage/docs/storage-classes).
         | 
| 379 385 | 
             
                    #
         | 
| 386 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 387 | 
            +
                    # block passed to {#update}.
         | 
| 388 | 
            +
                    #
         | 
| 380 389 | 
             
                    # @param [Symbol, String] new_storage_class Storage class of the bucket.
         | 
| 381 390 | 
             
                    #
         | 
| 382 391 | 
             
                    def storage_class= new_storage_class
         | 
| @@ -392,7 +401,7 @@ module Google | |
| 392 401 | 
             
                    # @return [Boolean]
         | 
| 393 402 | 
             
                    #
         | 
| 394 403 | 
             
                    def versioning?
         | 
| 395 | 
            -
                      @gapi.versioning | 
| 404 | 
            +
                      @gapi.versioning&.enabled?
         | 
| 396 405 | 
             
                    end
         | 
| 397 406 |  | 
| 398 407 | 
             
                    ##
         | 
| @@ -400,6 +409,9 @@ module Google | |
| 400 409 | 
             
                    # Versioning](https://cloud.google.com/storage/docs/object-versioning)
         | 
| 401 410 | 
             
                    # is enabled for the bucket.
         | 
| 402 411 | 
             
                    #
         | 
| 412 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 413 | 
            +
                    # block passed to {#update}.
         | 
| 414 | 
            +
                    #
         | 
| 403 415 | 
             
                    # @param [Boolean] new_versioning true if versioning is to be enabled
         | 
| 404 416 | 
             
                    #   for the bucket.
         | 
| 405 417 | 
             
                    #
         | 
| @@ -422,12 +434,15 @@ module Google | |
| 422 434 | 
             
                    # @return [String] The main page suffix.
         | 
| 423 435 | 
             
                    #
         | 
| 424 436 | 
             
                    def website_main
         | 
| 425 | 
            -
                      @gapi.website | 
| 437 | 
            +
                      @gapi.website&.main_page_suffix
         | 
| 426 438 | 
             
                    end
         | 
| 427 439 |  | 
| 428 440 | 
             
                    ##
         | 
| 429 441 | 
             
                    # Updates the main page suffix for a static website.
         | 
| 430 442 | 
             
                    #
         | 
| 443 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 444 | 
            +
                    # block passed to {#update}.
         | 
| 445 | 
            +
                    #
         | 
| 431 446 | 
             
                    # @see https://cloud.google.com/storage/docs/website-configuration#step4
         | 
| 432 447 | 
             
                    #   How to Host a Static Website
         | 
| 433 448 | 
             
                    #
         | 
| @@ -449,7 +464,7 @@ module Google | |
| 449 464 | 
             
                    # @return [String]
         | 
| 450 465 | 
             
                    #
         | 
| 451 466 | 
             
                    def website_404
         | 
| 452 | 
            -
                      @gapi.website | 
| 467 | 
            +
                      @gapi.website&.not_found_page
         | 
| 453 468 | 
             
                    end
         | 
| 454 469 |  | 
| 455 470 | 
             
                    ##
         | 
| @@ -467,6 +482,9 @@ module Google | |
| 467 482 | 
             
                    ##
         | 
| 468 483 | 
             
                    # Updates the hash of user-provided labels.
         | 
| 469 484 | 
             
                    #
         | 
| 485 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 486 | 
            +
                    # block passed to {#update}.
         | 
| 487 | 
            +
                    #
         | 
| 470 488 | 
             
                    # @param [Hash(String => String)] labels The user-provided labels.
         | 
| 471 489 | 
             
                    #
         | 
| 472 490 | 
             
                    def labels= labels
         | 
| @@ -478,6 +496,9 @@ module Google | |
| 478 496 | 
             
                    # Updates the page returned from a static website served from the bucket
         | 
| 479 497 | 
             
                    # when a site visitor requests a resource that does not exist.
         | 
| 480 498 | 
             
                    #
         | 
| 499 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 500 | 
            +
                    # block passed to {#update}.
         | 
| 501 | 
            +
                    #
         | 
| 481 502 | 
             
                    # @see https://cloud.google.com/storage/docs/website-configuration#step4
         | 
| 482 503 | 
             
                    #   How to Host a Static Website
         | 
| 483 504 | 
             
                    #
         | 
| @@ -498,7 +519,7 @@ module Google | |
| 498 519 | 
             
                    #   the bucket.
         | 
| 499 520 | 
             
                    #
         | 
| 500 521 | 
             
                    def requester_pays
         | 
| 501 | 
            -
                      @gapi.billing | 
| 522 | 
            +
                      @gapi.billing&.requester_pays
         | 
| 502 523 | 
             
                    end
         | 
| 503 524 | 
             
                    alias requester_pays? requester_pays
         | 
| 504 525 |  | 
| @@ -509,6 +530,9 @@ module Google | |
| 509 530 | 
             
                    # {Project#bucket} and {Project#buckets} to indicate the project to
         | 
| 510 531 | 
             
                    # which the access costs should be billed.
         | 
| 511 532 | 
             
                    #
         | 
| 533 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 534 | 
            +
                    # block passed to {#update}.
         | 
| 535 | 
            +
                    #
         | 
| 512 536 | 
             
                    # @param [Boolean] new_requester_pays When set to `true`, requester pays
         | 
| 513 537 | 
             
                    #   is enabled for the bucket.
         | 
| 514 538 | 
             
                    #
         | 
| @@ -550,13 +574,16 @@ module Google | |
| 550 574 | 
             
                    #   bucket.default_kms_key #=> kms_key_name
         | 
| 551 575 | 
             
                    #
         | 
| 552 576 | 
             
                    def default_kms_key
         | 
| 553 | 
            -
                      @gapi.encryption | 
| 577 | 
            +
                      @gapi.encryption&.default_kms_key_name
         | 
| 554 578 | 
             
                    end
         | 
| 555 579 |  | 
| 556 580 | 
             
                    ##
         | 
| 557 581 | 
             
                    # Set the Cloud KMS encryption key that will be used to protect files.
         | 
| 558 582 | 
             
                    # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
         | 
| 559 583 | 
             
                    #
         | 
| 584 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 585 | 
            +
                    # block passed to {#update}.
         | 
| 586 | 
            +
                    #
         | 
| 560 587 | 
             
                    # @param [String, nil] new_default_kms_key New Cloud KMS key name, or
         | 
| 561 588 | 
             
                    #   `nil` to delete the Cloud KMS encryption key.
         | 
| 562 589 | 
             
                    #
         | 
| @@ -599,7 +626,7 @@ module Google | |
| 599 626 | 
             
                    #   retention policy exists for the bucket.
         | 
| 600 627 | 
             
                    #
         | 
| 601 628 | 
             
                    def retention_period
         | 
| 602 | 
            -
                      @gapi.retention_policy | 
| 629 | 
            +
                      @gapi.retention_policy&.retention_period
         | 
| 603 630 | 
             
                    end
         | 
| 604 631 |  | 
| 605 632 | 
             
                    ##
         | 
| @@ -617,6 +644,9 @@ module Google | |
| 617 644 | 
             
                    # See also: {#lock_retention_policy!}, {#retention_period},
         | 
| 618 645 | 
             
                    # {#retention_effective_at}, and {#retention_policy_locked?}.
         | 
| 619 646 | 
             
                    #
         | 
| 647 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 648 | 
            +
                    # block passed to {#update}.
         | 
| 649 | 
            +
                    #
         | 
| 620 650 | 
             
                    # @param [Integer, nil] new_retention_period The retention period
         | 
| 621 651 | 
             
                    #   defined in seconds. The value must be between 0 and 100 years (in
         | 
| 622 652 | 
             
                    #   seconds), or `nil`.
         | 
| @@ -658,7 +688,7 @@ module Google | |
| 658 688 | 
             
                    #   policy, if a policy exists.
         | 
| 659 689 | 
             
                    #
         | 
| 660 690 | 
             
                    def retention_effective_at
         | 
| 661 | 
            -
                      @gapi.retention_policy | 
| 691 | 
            +
                      @gapi.retention_policy&.effective_time
         | 
| 662 692 | 
             
                    end
         | 
| 663 693 |  | 
| 664 694 | 
             
                    ##
         | 
| @@ -715,6 +745,9 @@ module Google | |
| 715 745 | 
             
                    #
         | 
| 716 746 | 
             
                    # See {File#event_based_hold?} and {File#set_event_based_hold!}.
         | 
| 717 747 | 
             
                    #
         | 
| 748 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 749 | 
            +
                    # block passed to {#update}.
         | 
| 750 | 
            +
                    #
         | 
| 718 751 | 
             
                    # @param [Boolean] new_default_event_based_hold The default event-based
         | 
| 719 752 | 
             
                    #   hold field for the bucket.
         | 
| 720 753 | 
             
                    #
         | 
| @@ -808,7 +841,7 @@ module Google | |
| 808 841 | 
             
                    #   bucket.uniform_bucket_level_access? # true
         | 
| 809 842 | 
             
                    #
         | 
| 810 843 | 
             
                    def uniform_bucket_level_access?
         | 
| 811 | 
            -
                      return false unless @gapi.iam_configuration | 
| 844 | 
            +
                      return false unless @gapi.iam_configuration&.uniform_bucket_level_access
         | 
| 812 845 | 
             
                      !@gapi.iam_configuration.uniform_bucket_level_access.enabled.nil? &&
         | 
| 813 846 | 
             
                        @gapi.iam_configuration.uniform_bucket_level_access.enabled
         | 
| 814 847 | 
             
                    end
         | 
| @@ -823,6 +856,9 @@ module Google | |
| 823 856 | 
             
                    # Before enabling uniform bucket-level access please review [uniform bucket-level
         | 
| 824 857 | 
             
                    # access](https://cloud.google.com/storage/docs/uniform-bucket-level-access).
         | 
| 825 858 | 
             
                    #
         | 
| 859 | 
            +
                    # To pass metageneration preconditions, call this method within a
         | 
| 860 | 
            +
                    # block passed to {#update}.
         | 
| 861 | 
            +
                    #
         | 
| 826 862 | 
             
                    # @param [Boolean] new_uniform_bucket_level_access When set to `true`, uniform bucket-level access is enabled in
         | 
| 827 863 | 
             
                    #   the bucket's IAM configuration.
         | 
| 828 864 | 
             
                    #
         | 
| @@ -870,7 +906,7 @@ module Google | |
| 870 906 | 
             
                    #   puts bucket.uniform_bucket_level_access_locked_at
         | 
| 871 907 | 
             
                    #
         | 
| 872 908 | 
             
                    def uniform_bucket_level_access_locked_at
         | 
| 873 | 
            -
                      return nil unless @gapi.iam_configuration | 
| 909 | 
            +
                      return nil unless @gapi.iam_configuration&.uniform_bucket_level_access
         | 
| 874 910 | 
             
                      @gapi.iam_configuration.uniform_bucket_level_access.locked_time
         | 
| 875 911 | 
             
                    end
         | 
| 876 912 |  | 
| @@ -895,6 +931,108 @@ module Google | |
| 895 931 | 
             
                      uniform_bucket_level_access_locked_at
         | 
| 896 932 | 
             
                    end
         | 
| 897 933 |  | 
| 934 | 
            +
                    ##
         | 
| 935 | 
            +
                    # The value for Public Access Prevention in the bucket's IAM configuration. Currently, `unspecified` and
         | 
| 936 | 
            +
                    # `enforced` are supported. When set to `enforced`, Public Access Prevention is enforced in the bucket's IAM
         | 
| 937 | 
            +
                    # configuration. This value can be modified by calling {#public_access_prevention=}.
         | 
| 938 | 
            +
                    #
         | 
| 939 | 
            +
                    # @return [String, nil] Currently, `unspecified` and `enforced` are supported. Returns `nil` if the bucket has
         | 
| 940 | 
            +
                    #    no IAM configuration.
         | 
| 941 | 
            +
                    #
         | 
| 942 | 
            +
                    # @example
         | 
| 943 | 
            +
                    #   require "google/cloud/storage"
         | 
| 944 | 
            +
                    #
         | 
| 945 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 946 | 
            +
                    #
         | 
| 947 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 948 | 
            +
                    #
         | 
| 949 | 
            +
                    #   bucket.public_access_prevention = :enforced
         | 
| 950 | 
            +
                    #   bucket.public_access_prevention #=> "enforced"
         | 
| 951 | 
            +
                    #
         | 
| 952 | 
            +
                    def public_access_prevention
         | 
| 953 | 
            +
                      @gapi.iam_configuration&.public_access_prevention
         | 
| 954 | 
            +
                    end
         | 
| 955 | 
            +
             | 
| 956 | 
            +
                    ##
         | 
| 957 | 
            +
                    # Sets the value for Public Access Prevention in the bucket's IAM configuration. This value can be queried by
         | 
| 958 | 
            +
                    # calling {#public_access_prevention}.
         | 
| 959 | 
            +
                    #
         | 
| 960 | 
            +
                    # @param [Symbol, String] new_public_access_prevention The bucket's new Public Access Prevention configuration.
         | 
| 961 | 
            +
                    #   Currently, `unspecified` and `enforced` are supported. When set to `enforced`, Public Access
         | 
| 962 | 
            +
                    #   Prevention is enforced in the bucket's IAM configuration.
         | 
| 963 | 
            +
                    #
         | 
| 964 | 
            +
                    # @example Set Public Access Prevention to enforced:
         | 
| 965 | 
            +
                    #   require "google/cloud/storage"
         | 
| 966 | 
            +
                    #
         | 
| 967 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 968 | 
            +
                    #
         | 
| 969 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 970 | 
            +
                    #
         | 
| 971 | 
            +
                    #   bucket.public_access_prevention = :enforced
         | 
| 972 | 
            +
                    #   bucket.public_access_prevention #=> "enforced"
         | 
| 973 | 
            +
                    #
         | 
| 974 | 
            +
                    # @example Set Public Access Prevention to unspecified:
         | 
| 975 | 
            +
                    #   require "google/cloud/storage"
         | 
| 976 | 
            +
                    #
         | 
| 977 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 978 | 
            +
                    #
         | 
| 979 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 980 | 
            +
                    #
         | 
| 981 | 
            +
                    #   bucket.public_access_prevention = :unspecified
         | 
| 982 | 
            +
                    #   bucket.public_access_prevention #=> "unspecified"
         | 
| 983 | 
            +
                    #
         | 
| 984 | 
            +
                    def public_access_prevention= new_public_access_prevention
         | 
| 985 | 
            +
                      @gapi.iam_configuration ||= API::Bucket::IamConfiguration.new
         | 
| 986 | 
            +
                      @gapi.iam_configuration.public_access_prevention = new_public_access_prevention.to_s
         | 
| 987 | 
            +
                      patch_gapi! :iam_configuration
         | 
| 988 | 
            +
                    end
         | 
| 989 | 
            +
             | 
| 990 | 
            +
                    ##
         | 
| 991 | 
            +
                    # Whether the bucket's file IAM configuration enforces Public Access Prevention. The default is `false`. This
         | 
| 992 | 
            +
                    # value can be modified by calling {Bucket#public_access_prevention=}.
         | 
| 993 | 
            +
                    #
         | 
| 994 | 
            +
                    # @return [Boolean] Returns `false` if the bucket has no IAM configuration or if Public Access Prevention is
         | 
| 995 | 
            +
                    #   not `enforced` in the IAM configuration. Returns `true` if Public Access Prevention is `enforced` in the IAM
         | 
| 996 | 
            +
                    #   configuration.
         | 
| 997 | 
            +
                    #
         | 
| 998 | 
            +
                    # @example
         | 
| 999 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1000 | 
            +
                    #
         | 
| 1001 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1002 | 
            +
                    #
         | 
| 1003 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 1004 | 
            +
                    #
         | 
| 1005 | 
            +
                    #   bucket.public_access_prevention = :enforced
         | 
| 1006 | 
            +
                    #   bucket.public_access_prevention_enforced? # true
         | 
| 1007 | 
            +
                    #
         | 
| 1008 | 
            +
                    def public_access_prevention_enforced?
         | 
| 1009 | 
            +
                      return false unless @gapi.iam_configuration&.public_access_prevention
         | 
| 1010 | 
            +
                      @gapi.iam_configuration.public_access_prevention.to_s == "enforced"
         | 
| 1011 | 
            +
                    end
         | 
| 1012 | 
            +
             | 
| 1013 | 
            +
                    ##
         | 
| 1014 | 
            +
                    # Whether the value for Public Access Prevention in the bucket's IAM configuration is `unspecified`. The default
         | 
| 1015 | 
            +
                    # is `false`. This value can be modified by calling {Bucket#public_access_prevention=}.
         | 
| 1016 | 
            +
                    #
         | 
| 1017 | 
            +
                    # @return [Boolean] Returns `false` if the bucket has no IAM configuration or if Public Access Prevention is
         | 
| 1018 | 
            +
                    #   not `unspecified` in the IAM configuration. Returns `true` if Public Access Prevention is `unspecified` in
         | 
| 1019 | 
            +
                    #   the IAM configuration.
         | 
| 1020 | 
            +
                    #
         | 
| 1021 | 
            +
                    # @example
         | 
| 1022 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1023 | 
            +
                    #
         | 
| 1024 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1025 | 
            +
                    #
         | 
| 1026 | 
            +
                    #   bucket = storage.bucket "my-bucket"
         | 
| 1027 | 
            +
                    #
         | 
| 1028 | 
            +
                    #   bucket.public_access_prevention = :unspecified
         | 
| 1029 | 
            +
                    #   bucket.public_access_prevention_unspecified? # true
         | 
| 1030 | 
            +
                    #
         | 
| 1031 | 
            +
                    def public_access_prevention_unspecified?
         | 
| 1032 | 
            +
                      return false unless @gapi.iam_configuration&.public_access_prevention
         | 
| 1033 | 
            +
                      @gapi.iam_configuration.public_access_prevention.to_s == "unspecified"
         | 
| 1034 | 
            +
                    end
         | 
| 1035 | 
            +
             | 
| 898 1036 | 
             
                    ##
         | 
| 899 1037 | 
             
                    # Updates the bucket with changes made in the given block in a single
         | 
| 900 1038 | 
             
                    # PATCH request. The following attributes may be set: {#cors},
         | 
| @@ -905,6 +1043,12 @@ module Google | |
| 905 1043 | 
             
                    # completely mutable and will be included in the request. (See
         | 
| 906 1044 | 
             
                    # {Bucket::Cors})
         | 
| 907 1045 | 
             
                    #
         | 
| 1046 | 
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         | 
| 1047 | 
            +
                    #   on whether the bucket's current metageneration matches the given value.
         | 
| 1048 | 
            +
                    # @param [Integer] if_metageneration_not_match Makes the operation
         | 
| 1049 | 
            +
                    #   conditional on whether the bucket's current metageneration does not
         | 
| 1050 | 
            +
                    #   match the given value.
         | 
| 1051 | 
            +
                    #
         | 
| 908 1052 | 
             
                    # @yield [bucket] a block yielding a delegate object for updating the
         | 
| 909 1053 | 
             
                    #   file
         | 
| 910 1054 | 
             
                    #
         | 
| @@ -936,14 +1080,27 @@ module Google | |
| 936 1080 | 
             
                    #     end
         | 
| 937 1081 | 
             
                    #   end
         | 
| 938 1082 | 
             
                    #
         | 
| 939 | 
            -
                     | 
| 1083 | 
            +
                    # @example With a `if_metageneration_match` precondition:
         | 
| 1084 | 
            +
                    #   require "google/cloud/storage"
         | 
| 1085 | 
            +
                    #
         | 
| 1086 | 
            +
                    #   storage = Google::Cloud::Storage.new
         | 
| 1087 | 
            +
                    #
         | 
| 1088 | 
            +
                    #   bucket = storage.bucket "my-todo-app"
         | 
| 1089 | 
            +
                    #   bucket.update if_metageneration_match: 6 do |b|
         | 
| 1090 | 
            +
                    #     b.website_main = "index.html"
         | 
| 1091 | 
            +
                    #   end
         | 
| 1092 | 
            +
                    #
         | 
| 1093 | 
            +
                    def update if_metageneration_match: nil, if_metageneration_not_match: nil
         | 
| 940 1094 | 
             
                      updater = Updater.new @gapi
         | 
| 941 1095 | 
             
                      yield updater
         | 
| 942 1096 | 
             
                      # Add check for mutable cors
         | 
| 943 1097 | 
             
                      updater.check_for_changed_labels!
         | 
| 944 1098 | 
             
                      updater.check_for_mutable_cors!
         | 
| 945 1099 | 
             
                      updater.check_for_mutable_lifecycle!
         | 
| 946 | 
            -
                       | 
| 1100 | 
            +
                      return if updater.updates.empty?
         | 
| 1101 | 
            +
                      patch_gapi! updater.updates,
         | 
| 1102 | 
            +
                                  if_metageneration_match: if_metageneration_match,
         | 
| 1103 | 
            +
                                  if_metageneration_not_match: if_metageneration_not_match
         | 
| 947 1104 | 
             
                    end
         | 
| 948 1105 |  | 
| 949 1106 | 
             
                    ##
         | 
| @@ -953,6 +1110,12 @@ module Google | |
| 953 1110 | 
             
                    # The API call to delete the bucket may be retried under certain
         | 
| 954 1111 | 
             
                    # conditions. See {Google::Cloud#storage} to control this behavior.
         | 
| 955 1112 | 
             
                    #
         | 
| 1113 | 
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         | 
| 1114 | 
            +
                    #   on whether the bucket's current metageneration matches the given value.
         | 
| 1115 | 
            +
                    # @param [Integer] if_metageneration_not_match Makes the operation
         | 
| 1116 | 
            +
                    #   conditional on whether the bucket's current metageneration does not
         | 
| 1117 | 
            +
                    #   match the given value.
         | 
| 1118 | 
            +
                    #
         | 
| 956 1119 | 
             
                    # @return [Boolean] Returns `true` if the bucket was deleted.
         | 
| 957 1120 | 
             
                    #
         | 
| 958 1121 | 
             
                    # @example
         | 
| @@ -963,10 +1126,12 @@ module Google | |
| 963 1126 | 
             
                    #   bucket = storage.bucket "my-bucket"
         | 
| 964 1127 | 
             
                    #   bucket.delete
         | 
| 965 1128 | 
             
                    #
         | 
| 966 | 
            -
                    def delete
         | 
| 1129 | 
            +
                    def delete if_metageneration_match: nil, if_metageneration_not_match: nil
         | 
| 967 1130 | 
             
                      ensure_service!
         | 
| 968 | 
            -
                      service.delete_bucket name, | 
| 969 | 
            -
             | 
| 1131 | 
            +
                      service.delete_bucket name,
         | 
| 1132 | 
            +
                                            if_metageneration_match: if_metageneration_match,
         | 
| 1133 | 
            +
                                            if_metageneration_not_match: if_metageneration_not_match,
         | 
| 1134 | 
            +
                                            user_project: user_project
         | 
| 970 1135 | 
             
                    end
         | 
| 971 1136 |  | 
| 972 1137 | 
             
                    ##
         | 
| @@ -1040,6 +1205,19 @@ module Google | |
| 1040 1205 | 
             
                    # @param [String] path Name (path) of the file.
         | 
| 1041 1206 | 
             
                    # @param [Integer] generation When present, selects a specific revision
         | 
| 1042 1207 | 
             
                    #   of this object. Default is the latest version.
         | 
| 1208 | 
            +
                    # @param [Integer] if_generation_match Makes the operation conditional
         | 
| 1209 | 
            +
                    #   on whether the file's current generation matches the given value.
         | 
| 1210 | 
            +
                    #   Setting to 0 makes the operation succeed only if there are no live
         | 
| 1211 | 
            +
                    #   versions of the file.
         | 
| 1212 | 
            +
                    # @param [Integer] if_generation_not_match Makes the operation conditional
         | 
| 1213 | 
            +
                    #   on whether the file's current generation does not match the given
         | 
| 1214 | 
            +
                    #   value. If no live file exists, the precondition fails. Setting to 0
         | 
| 1215 | 
            +
                    #   makes the operation succeed only if there is a live version of the file.
         | 
| 1216 | 
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         | 
| 1217 | 
            +
                    #   on whether the file's current metageneration matches the given value.
         | 
| 1218 | 
            +
                    # @param [Integer] if_metageneration_not_match Makes the operation
         | 
| 1219 | 
            +
                    #   conditional on whether the file's current metageneration does not
         | 
| 1220 | 
            +
                    #   match the given value.
         | 
| 1043 1221 | 
             
                    # @param [Boolean] skip_lookup Optionally create a Bucket object
         | 
| 1044 1222 | 
             
                    #   without verifying the bucket resource exists on the Storage service.
         | 
| 1045 1223 | 
             
                    #   Calls made on this object will raise errors if the bucket resource
         | 
| @@ -1061,7 +1239,14 @@ module Google | |
| 1061 1239 | 
             
                    #   file = bucket.file "path/to/my-file.ext"
         | 
| 1062 1240 | 
             
                    #   puts file.name
         | 
| 1063 1241 | 
             
                    #
         | 
| 1064 | 
            -
                    def file path, | 
| 1242 | 
            +
                    def file path,
         | 
| 1243 | 
            +
                             generation: nil,
         | 
| 1244 | 
            +
                             if_generation_match: nil,
         | 
| 1245 | 
            +
                             if_generation_not_match: nil,
         | 
| 1246 | 
            +
                             if_metageneration_match: nil,
         | 
| 1247 | 
            +
                             if_metageneration_not_match: nil,
         | 
| 1248 | 
            +
                             skip_lookup: nil,
         | 
| 1249 | 
            +
                             encryption_key: nil
         | 
| 1065 1250 | 
             
                      ensure_service!
         | 
| 1066 1251 | 
             
                      if skip_lookup
         | 
| 1067 1252 | 
             
                        return File.new_lazy name, path, service,
         | 
| @@ -1069,6 +1254,10 @@ module Google | |
| 1069 1254 | 
             
                                             user_project: user_project
         | 
| 1070 1255 | 
             
                      end
         | 
| 1071 1256 | 
             
                      gapi = service.get_file name, path, generation: generation,
         | 
| 1257 | 
            +
                                                          if_generation_match: if_generation_match,
         | 
| 1258 | 
            +
                                                          if_generation_not_match: if_generation_not_match,
         | 
| 1259 | 
            +
                                                          if_metageneration_match: if_metageneration_match,
         | 
| 1260 | 
            +
                                                          if_metageneration_not_match: if_metageneration_not_match,
         | 
| 1072 1261 | 
             
                                                          key: encryption_key,
         | 
| 1073 1262 | 
             
                                                          user_project: user_project
         | 
| 1074 1263 | 
             
                      File.from_gapi gapi, service, user_project: user_project
         | 
| @@ -1179,6 +1368,19 @@ module Google | |
| 1179 1368 | 
             
                    #   the same location as the bucket.The Service Account associated with
         | 
| 1180 1369 | 
             
                    #   your project requires access to this encryption key. Do not provide
         | 
| 1181 1370 | 
             
                    #   if `encryption_key` is used.
         | 
| 1371 | 
            +
                    # @param [Integer] if_generation_match Makes the operation conditional
         | 
| 1372 | 
            +
                    #   on whether the file's current generation matches the given value.
         | 
| 1373 | 
            +
                    #   Setting to 0 makes the operation succeed only if there are no live
         | 
| 1374 | 
            +
                    #   versions of the file.
         | 
| 1375 | 
            +
                    # @param [Integer] if_generation_not_match Makes the operation conditional
         | 
| 1376 | 
            +
                    #   on whether the file's current generation does not match the given
         | 
| 1377 | 
            +
                    #   value. If no live file exists, the precondition fails. Setting to 0
         | 
| 1378 | 
            +
                    #   makes the operation succeed only if there is a live version of the file.
         | 
| 1379 | 
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         | 
| 1380 | 
            +
                    #   on whether the file's current metageneration matches the given value.
         | 
| 1381 | 
            +
                    # @param [Integer] if_metageneration_not_match Makes the operation
         | 
| 1382 | 
            +
                    #   conditional on whether the file's current metageneration does not
         | 
| 1383 | 
            +
                    #   match the given value.
         | 
| 1182 1384 | 
             
                    #
         | 
| 1183 1385 | 
             
                    # @return [Google::Cloud::Storage::File]
         | 
| 1184 1386 | 
             
                    #
         | 
| @@ -1262,12 +1464,27 @@ module Google | |
| 1262 1464 | 
             
                    #   file.download "path/to/downloaded/gzipped.txt",
         | 
| 1263 1465 | 
             
                    #                 skip_decompress: true
         | 
| 1264 1466 | 
             
                    #
         | 
| 1265 | 
            -
                    def create_file file, | 
| 1266 | 
            -
                                     | 
| 1267 | 
            -
                                     | 
| 1268 | 
            -
                                     | 
| 1269 | 
            -
                                     | 
| 1270 | 
            -
                                     | 
| 1467 | 
            +
                    def create_file file,
         | 
| 1468 | 
            +
                                    path = nil,
         | 
| 1469 | 
            +
                                    acl: nil,
         | 
| 1470 | 
            +
                                    cache_control: nil,
         | 
| 1471 | 
            +
                                    content_disposition: nil,
         | 
| 1472 | 
            +
                                    content_encoding: nil,
         | 
| 1473 | 
            +
                                    content_language: nil,
         | 
| 1474 | 
            +
                                    content_type: nil,
         | 
| 1475 | 
            +
                                    custom_time: nil,
         | 
| 1476 | 
            +
                                    crc32c: nil,
         | 
| 1477 | 
            +
                                    md5: nil,
         | 
| 1478 | 
            +
                                    metadata: nil,
         | 
| 1479 | 
            +
                                    storage_class: nil,
         | 
| 1480 | 
            +
                                    encryption_key: nil,
         | 
| 1481 | 
            +
                                    kms_key: nil,
         | 
| 1482 | 
            +
                                    temporary_hold: nil,
         | 
| 1483 | 
            +
                                    event_based_hold: nil,
         | 
| 1484 | 
            +
                                    if_generation_match: nil,
         | 
| 1485 | 
            +
                                    if_generation_not_match: nil,
         | 
| 1486 | 
            +
                                    if_metageneration_match: nil,
         | 
| 1487 | 
            +
                                    if_metageneration_not_match: nil
         | 
| 1271 1488 | 
             
                      ensure_service!
         | 
| 1272 1489 | 
             
                      ensure_io_or_file_exists! file
         | 
| 1273 1490 | 
             
                      path ||= file.path if file.respond_to? :path
         | 
| @@ -1275,22 +1492,29 @@ module Google | |
| 1275 1492 | 
             
                      raise ArgumentError, "must provide path" if path.nil?
         | 
| 1276 1493 |  | 
| 1277 1494 |  | 
| 1278 | 
            -
                      gapi = service.insert_file name, | 
| 1279 | 
            -
             | 
| 1280 | 
            -
             | 
| 1281 | 
            -
             | 
| 1282 | 
            -
             | 
| 1283 | 
            -
             | 
| 1284 | 
            -
             | 
| 1285 | 
            -
             | 
| 1286 | 
            -
             | 
| 1287 | 
            -
             | 
| 1288 | 
            -
             | 
| 1289 | 
            -
             | 
| 1290 | 
            -
             | 
| 1291 | 
            -
             | 
| 1292 | 
            -
             | 
| 1293 | 
            -
             | 
| 1495 | 
            +
                      gapi = service.insert_file name,
         | 
| 1496 | 
            +
                                                 file,
         | 
| 1497 | 
            +
                                                 path,
         | 
| 1498 | 
            +
                                                 acl: File::Acl.predefined_rule_for(acl),
         | 
| 1499 | 
            +
                                                 md5: md5,
         | 
| 1500 | 
            +
                                                 cache_control: cache_control,
         | 
| 1501 | 
            +
                                                 content_type: content_type,
         | 
| 1502 | 
            +
                                                 custom_time: custom_time,
         | 
| 1503 | 
            +
                                                 content_disposition: content_disposition,
         | 
| 1504 | 
            +
                                                 crc32c: crc32c,
         | 
| 1505 | 
            +
                                                 content_encoding: content_encoding,
         | 
| 1506 | 
            +
                                                 metadata: metadata,
         | 
| 1507 | 
            +
                                                 content_language: content_language,
         | 
| 1508 | 
            +
                                                 key: encryption_key,
         | 
| 1509 | 
            +
                                                 kms_key: kms_key,
         | 
| 1510 | 
            +
                                                 storage_class: storage_class_for(storage_class),
         | 
| 1511 | 
            +
                                                 temporary_hold: temporary_hold,
         | 
| 1512 | 
            +
                                                 event_based_hold: event_based_hold,
         | 
| 1513 | 
            +
                                                 if_generation_match: if_generation_match,
         | 
| 1514 | 
            +
                                                 if_generation_not_match: if_generation_not_match,
         | 
| 1515 | 
            +
                                                 if_metageneration_match: if_metageneration_match,
         | 
| 1516 | 
            +
                                                 if_metageneration_not_match: if_metageneration_not_match,
         | 
| 1517 | 
            +
                                                 user_project: user_project
         | 
| 1294 1518 | 
             
                      File.from_gapi gapi, service, user_project: user_project
         | 
| 1295 1519 | 
             
                    end
         | 
| 1296 1520 | 
             
                    alias upload_file create_file
         | 
| @@ -1334,6 +1558,16 @@ module Google | |
| 1334 1558 | 
             
                    #   used. All source files must have been encrypted with the same key,
         | 
| 1335 1559 | 
             
                    #   and the resulting destination file will also be encrypted with the
         | 
| 1336 1560 | 
             
                    #   key.
         | 
| 1561 | 
            +
                    # @param [Array<Integer>] if_source_generation_match Makes the operation
         | 
| 1562 | 
            +
                    #   conditional on whether the source files' current generations match the
         | 
| 1563 | 
            +
                    #   given values. The list must match `sources` item-to-item.
         | 
| 1564 | 
            +
                    # @param [Integer] if_generation_match Makes the operation conditional
         | 
| 1565 | 
            +
                    #   on whether the destination file's current generation matches the
         | 
| 1566 | 
            +
                    #   given value. Setting to 0 makes the operation succeed only if there
         | 
| 1567 | 
            +
                    #   are no live versions of the file.
         | 
| 1568 | 
            +
                    # @param [Integer] if_metageneration_match Makes the operation conditional
         | 
| 1569 | 
            +
                    #   on whether the destination file's current metageneration matches the
         | 
| 1570 | 
            +
                    #   given value.
         | 
| 1337 1571 | 
             
                    #
         | 
| 1338 1572 | 
             
                    # @yield [file] A block yielding a delegate file object for setting the
         | 
| 1339 1573 | 
             
                    #   properties of the destination file.
         | 
| @@ -1382,7 +1616,13 @@ module Google | |
| 1382 1616 | 
             
                    #
         | 
| 1383 1617 | 
             
                    #   new_file = bucket.compose [file_1, file_2], "path/to/new-file.ext"
         | 
| 1384 1618 | 
             
                    #
         | 
| 1385 | 
            -
                    def compose sources, | 
| 1619 | 
            +
                    def compose sources,
         | 
| 1620 | 
            +
                                destination,
         | 
| 1621 | 
            +
                                acl: nil,
         | 
| 1622 | 
            +
                                encryption_key: nil,
         | 
| 1623 | 
            +
                                if_source_generation_match: nil,
         | 
| 1624 | 
            +
                                if_generation_match: nil,
         | 
| 1625 | 
            +
                                if_metageneration_match: nil
         | 
| 1386 1626 | 
             
                      ensure_service!
         | 
| 1387 1627 | 
             
                      sources = Array sources
         | 
| 1388 1628 | 
             
                      if sources.size < 2
         | 
| @@ -1398,9 +1638,16 @@ module Google | |
| 1398 1638 | 
             
                      end
         | 
| 1399 1639 |  | 
| 1400 1640 | 
             
                      acl_rule = File::Acl.predefined_rule_for acl
         | 
| 1401 | 
            -
                      gapi = service.compose_file name, | 
| 1402 | 
            -
             | 
| 1403 | 
            -
             | 
| 1641 | 
            +
                      gapi = service.compose_file name,
         | 
| 1642 | 
            +
                                                  sources,
         | 
| 1643 | 
            +
                                                  destination,
         | 
| 1644 | 
            +
                                                  destination_gapi,
         | 
| 1645 | 
            +
                                                  acl: acl_rule,
         | 
| 1646 | 
            +
                                                  key: encryption_key,
         | 
| 1647 | 
            +
                                                  if_source_generation_match: if_source_generation_match,
         | 
| 1648 | 
            +
                                                  if_generation_match: if_generation_match,
         | 
| 1649 | 
            +
                                                  if_metageneration_match: if_metageneration_match,
         | 
| 1650 | 
            +
                                                  user_project: user_project
         | 
| 1404 1651 | 
             
                      File.from_gapi gapi, service, user_project: user_project
         | 
| 1405 1652 | 
             
                    end
         | 
| 1406 1653 | 
             
                    alias compose_file compose
         | 
| @@ -1545,11 +1792,11 @@ module Google | |
| 1545 1792 | 
             
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1546 1793 | 
             
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1547 1794 | 
             
                    #
         | 
| 1548 | 
            -
                    #     request =  | 
| 1549 | 
            -
                    #        | 
| 1550 | 
            -
                    #      | 
| 1795 | 
            +
                    #     request = Google::Apis::IamcredentialsV1::SignBlobRequest.new(
         | 
| 1796 | 
            +
                    #       payload: string_to_sign
         | 
| 1797 | 
            +
                    #     )
         | 
| 1551 1798 | 
             
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1552 | 
            -
                    #     response = iam_client.sign_service_account_blob resource, request | 
| 1799 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request
         | 
| 1553 1800 | 
             
                    #     response.signed_blob
         | 
| 1554 1801 | 
             
                    #   end
         | 
| 1555 1802 | 
             
                    #
         | 
| @@ -1647,8 +1894,8 @@ module Google | |
| 1647 1894 | 
             
                    end
         | 
| 1648 1895 |  | 
| 1649 1896 | 
             
                    ##
         | 
| 1650 | 
            -
                    # Generate a PostObject that includes the fields and  | 
| 1651 | 
            -
                    # upload objects via  | 
| 1897 | 
            +
                    # Generate a PostObject that includes the fields and URL to
         | 
| 1898 | 
            +
                    # upload objects via HTML forms.
         | 
| 1652 1899 | 
             
                    #
         | 
| 1653 1900 | 
             
                    # Generating a PostObject requires service account credentials,
         | 
| 1654 1901 | 
             
                    # either by connecting with a service account when calling
         | 
| @@ -1694,7 +1941,7 @@ module Google | |
| 1694 1941 | 
             
                    #   Proc should return a signature created using a RPC call to the
         | 
| 1695 1942 | 
             
                    #   [Service Account Credentials signBlob](https://cloud.google.com/iam/docs/reference/credentials/rest/v1/projects.serviceAccounts/signBlob)
         | 
| 1696 1943 | 
             
                    #   method as shown in the example below.
         | 
| 1697 | 
            -
                    # @return [PostObject] An object containing the URL, fields, and values needed to upload files via  | 
| 1944 | 
            +
                    # @return [PostObject] An object containing the URL, fields, and values needed to upload files via HTML forms.
         | 
| 1698 1945 | 
             
                    #
         | 
| 1699 1946 | 
             
                    # @raise [SignedUrlUnavailable] If the service account credentials
         | 
| 1700 1947 | 
             
                    #   are missing. Service account credentials are acquired by following the
         | 
| @@ -1778,11 +2025,11 @@ module Google | |
| 1778 2025 | 
             
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1779 2026 | 
             
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1780 2027 | 
             
                    #
         | 
| 1781 | 
            -
                    #     request =  | 
| 1782 | 
            -
                    #        | 
| 1783 | 
            -
                    #      | 
| 2028 | 
            +
                    #     request = Google::Apis::IamcredentialsV1::SignBlobRequest.new(
         | 
| 2029 | 
            +
                    #       payload: string_to_sign
         | 
| 2030 | 
            +
                    #     )
         | 
| 1784 2031 | 
             
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1785 | 
            -
                    #     response = iam_client.sign_service_account_blob resource, request | 
| 2032 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request
         | 
| 1786 2033 | 
             
                    #     response.signed_blob
         | 
| 1787 2034 | 
             
                    #   end
         | 
| 1788 2035 | 
             
                    #
         | 
| @@ -1817,10 +2064,14 @@ module Google | |
| 1817 2064 | 
             
                    end
         | 
| 1818 2065 |  | 
| 1819 2066 | 
             
                    ##
         | 
| 1820 | 
            -
                    # Generate a PostObject that includes the fields and  | 
| 1821 | 
            -
                    # upload objects via  | 
| 2067 | 
            +
                    # Generate a `PostObject` that includes the fields and URL to
         | 
| 2068 | 
            +
                    # upload objects via HTML forms. The resulting `PostObject` is
         | 
| 2069 | 
            +
                    # based on a policy document created from the method arguments.
         | 
| 2070 | 
            +
                    # This policy provides authorization to ensure that the HTML
         | 
| 2071 | 
            +
                    # form can upload files into the bucket. See [Signatures -
         | 
| 2072 | 
            +
                    # Policy document](https://cloud.google.com/storage/docs/authentication/signatures#policy-document).
         | 
| 1822 2073 | 
             
                    #
         | 
| 1823 | 
            -
                    # Generating a PostObject requires service account credentials,
         | 
| 2074 | 
            +
                    # Generating a `PostObject` requires service account credentials,
         | 
| 1824 2075 | 
             
                    # either by connecting with a service account when calling
         | 
| 1825 2076 | 
             
                    # {Google::Cloud.storage}, or by passing in the service account
         | 
| 1826 2077 | 
             
                    # `issuer` and `signing_key` values. Although the private key can
         | 
| @@ -1833,6 +2084,8 @@ module Google | |
| 1833 2084 | 
             
                    # steps in [Service Account Authentication](
         | 
| 1834 2085 | 
             
                    # https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1835 2086 | 
             
                    #
         | 
| 2087 | 
            +
                    # @see https://cloud.google.com/storage/docs/authentication/signatures#policy-document Signatures -
         | 
| 2088 | 
            +
                    #   Policy document
         | 
| 1836 2089 | 
             
                    # @see https://cloud.google.com/storage/docs/xml-api/post-object
         | 
| 1837 2090 | 
             
                    #
         | 
| 1838 2091 | 
             
                    # @param [String] path Path to the file in Google Cloud Storage.
         | 
| @@ -1856,9 +2109,14 @@ module Google | |
| 1856 2109 | 
             
                    #   method as shown in the example below.
         | 
| 1857 2110 | 
             
                    # @param [Integer] expires The number of seconds until the URL expires.
         | 
| 1858 2111 | 
             
                    #   The default is 604800 (7 days).
         | 
| 1859 | 
            -
                    # @param [Hash] fields User-supplied form fields such as `acl`,
         | 
| 2112 | 
            +
                    # @param [Hash{String => String}] fields User-supplied form fields such as `acl`,
         | 
| 1860 2113 | 
             
                    #   `cache-control`, `success_action_status`, and `success_action_redirect`.
         | 
| 1861 | 
            -
                    #  | 
| 2114 | 
            +
                    #   Optional. See [Upload an object with HTML forms - Form
         | 
| 2115 | 
            +
                    #   fields](https://cloud.google.com/storage/docs/xml-api/post-object-forms#form_fields).
         | 
| 2116 | 
            +
                    # @param [Array<Hash{String => String}|Array<String>>] conditions An array of
         | 
| 2117 | 
            +
                    #   policy conditions that every upload must satisfy. For example:
         | 
| 2118 | 
            +
                    #   `[["eq", "$Content-Type", "image/jpeg"]]`. Optional. See [Signatures - Policy
         | 
| 2119 | 
            +
                    #   document](https://cloud.google.com/storage/docs/authentication/signatures#policy-document).
         | 
| 1862 2120 | 
             
                    # @param [String] scheme The URL scheme. The default value is `HTTPS`.
         | 
| 1863 2121 | 
             
                    # @param [Boolean] virtual_hosted_style Whether to use a virtual hosted-style
         | 
| 1864 2122 | 
             
                    #   hostname, which adds the bucket into the host portion of the URI rather
         | 
| @@ -1871,12 +2129,12 @@ module Google | |
| 1871 2129 | 
             
                    #   Cloud Load Balancer which routes to a bucket you own, e.g.
         | 
| 1872 2130 | 
             
                    #   `my-load-balancer-domain.tld`.
         | 
| 1873 2131 | 
             
                    #
         | 
| 1874 | 
            -
                    # @return [PostObject] An object containing the URL, fields, and values needed to | 
| 2132 | 
            +
                    # @return [PostObject] An object containing the URL, fields, and values needed to
         | 
| 2133 | 
            +
                    #   upload files via HTML forms.
         | 
| 1875 2134 | 
             
                    #
         | 
| 1876 | 
            -
                    # @raise [SignedUrlUnavailable] If the service account credentials
         | 
| 1877 | 
            -
                    #    | 
| 1878 | 
            -
                    #    | 
| 1879 | 
            -
                    #   https://cloud.google.com/iam/docs/service-accounts).
         | 
| 2135 | 
            +
                    # @raise [SignedUrlUnavailable] If the service account credentials are missing.
         | 
| 2136 | 
            +
                    #   Service account credentials are acquired by following the steps in [Service
         | 
| 2137 | 
            +
                    #   Account Authentication](https://cloud.google.com/iam/docs/service-accounts).
         | 
| 1880 2138 | 
             
                    #
         | 
| 1881 2139 | 
             
                    # @example
         | 
| 1882 2140 | 
             
                    #   require "google/cloud/storage"
         | 
| @@ -1886,8 +2144,9 @@ module Google | |
| 1886 2144 | 
             
                    #   bucket = storage.bucket "my-todo-app"
         | 
| 1887 2145 | 
             
                    #
         | 
| 1888 2146 | 
             
                    #   conditions = [["starts-with", "$acl","public"]]
         | 
| 1889 | 
            -
                    #   post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png", | 
| 1890 | 
            -
                    # | 
| 2147 | 
            +
                    #   post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png",
         | 
| 2148 | 
            +
                    #                                                expires:    10,
         | 
| 2149 | 
            +
                    #                                                conditions: conditions
         | 
| 1891 2150 | 
             
                    #
         | 
| 1892 2151 | 
             
                    #   post.url #=> "https://storage.googleapis.com/my-todo-app/"
         | 
| 1893 2152 | 
             
                    #   post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
         | 
| @@ -1916,11 +2175,11 @@ module Google | |
| 1916 2175 | 
             
                    #     scopes = ["https://www.googleapis.com/auth/iam"]
         | 
| 1917 2176 | 
             
                    #     iam_client.authorization = Google::Auth.get_application_default scopes
         | 
| 1918 2177 | 
             
                    #
         | 
| 1919 | 
            -
                    #     request =  | 
| 1920 | 
            -
                    #        | 
| 1921 | 
            -
                    #      | 
| 2178 | 
            +
                    #     request = Google::Apis::IamcredentialsV1::SignBlobRequest.new(
         | 
| 2179 | 
            +
                    #       payload: string_to_sign
         | 
| 2180 | 
            +
                    #     )
         | 
| 1922 2181 | 
             
                    #     resource = "projects/-/serviceAccounts/#{issuer}"
         | 
| 1923 | 
            -
                    #     response = iam_client.sign_service_account_blob resource, request | 
| 2182 | 
            +
                    #     response = iam_client.sign_service_account_blob resource, request
         | 
| 1924 2183 | 
             
                    #     response.signed_blob
         | 
| 1925 2184 | 
             
                    #   end
         | 
| 1926 2185 | 
             
                    #
         | 
| @@ -1928,10 +2187,11 @@ module Google | |
| 1928 2187 | 
             
                    #
         | 
| 1929 2188 | 
             
                    #   bucket = storage.bucket "my-todo-app"
         | 
| 1930 2189 | 
             
                    #   conditions = [["starts-with", "$acl","public"]]
         | 
| 1931 | 
            -
                    #   post = bucket.generate_signed_post_policy_v4 | 
| 1932 | 
            -
                    # | 
| 1933 | 
            -
                    # | 
| 1934 | 
            -
                    # | 
| 2190 | 
            +
                    #   post = bucket.generate_signed_post_policy_v4 "avatars/heidi/400x400.png",
         | 
| 2191 | 
            +
                    #                                                expires:    10,
         | 
| 2192 | 
            +
                    #                                                conditions: conditions,
         | 
| 2193 | 
            +
                    #                                                issuer:     issuer,
         | 
| 2194 | 
            +
                    #                                                signer:     signer
         | 
| 1935 2195 | 
             
                    #
         | 
| 1936 2196 | 
             
                    #   post.url #=> "https://storage.googleapis.com/my-todo-app/"
         | 
| 1937 2197 | 
             
                    #   post.fields["key"] #=> "my-todo-app/avatars/heidi/400x400.png"
         | 
| @@ -2533,7 +2793,10 @@ module Google | |
| 2533 2793 | 
             
                      reload!
         | 
| 2534 2794 | 
             
                    end
         | 
| 2535 2795 |  | 
| 2536 | 
            -
                    def patch_gapi!  | 
| 2796 | 
            +
                    def patch_gapi! attributes,
         | 
| 2797 | 
            +
                                    if_metageneration_match: nil,
         | 
| 2798 | 
            +
                                    if_metageneration_not_match: nil
         | 
| 2799 | 
            +
                      attributes = Array(attributes)
         | 
| 2537 2800 | 
             
                      attributes.flatten!
         | 
| 2538 2801 | 
             
                      return if attributes.empty?
         | 
| 2539 2802 | 
             
                      ensure_service!
         | 
| @@ -2541,7 +2804,10 @@ module Google | |
| 2541 2804 | 
             
                        [attr, @gapi.send(attr)]
         | 
| 2542 2805 | 
             
                      end]
         | 
| 2543 2806 | 
             
                      patch_gapi = API::Bucket.new(**patch_args)
         | 
| 2544 | 
            -
                      @gapi = service.patch_bucket name, | 
| 2807 | 
            +
                      @gapi = service.patch_bucket name,
         | 
| 2808 | 
            +
                                                   patch_gapi,
         | 
| 2809 | 
            +
                                                   if_metageneration_match: if_metageneration_match,
         | 
| 2810 | 
            +
                                                   if_metageneration_not_match: if_metageneration_not_match,
         | 
| 2545 2811 | 
             
                                                   user_project: user_project
         | 
| 2546 2812 | 
             
                      @lazy = nil
         | 
| 2547 2813 | 
             
                      self
         | 
| @@ -2559,9 +2825,11 @@ module Google | |
| 2559 2825 | 
             
                    # Yielded to a block to accumulate changes for a patch request.
         | 
| 2560 2826 | 
             
                    class Updater < Bucket
         | 
| 2561 2827 | 
             
                      attr_reader :updates
         | 
| 2828 | 
            +
             | 
| 2562 2829 | 
             
                      ##
         | 
| 2563 2830 | 
             
                      # Create an Updater object.
         | 
| 2564 2831 | 
             
                      def initialize gapi
         | 
| 2832 | 
            +
                        super()
         | 
| 2565 2833 | 
             
                        @updates = []
         | 
| 2566 2834 | 
             
                        @gapi = gapi
         | 
| 2567 2835 | 
             
                        @labels = @gapi.labels.to_h.dup
         |