google-cloud-pubsub 1.7.1 → 2.1.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/AUTHENTICATION.md +2 -1
- data/CHANGELOG.md +53 -0
- data/OVERVIEW.md +26 -58
- data/lib/google-cloud-pubsub.rb +14 -13
- data/lib/google/cloud/pubsub.rb +15 -18
- data/lib/google/cloud/pubsub/async_publisher.rb +2 -3
- data/lib/google/cloud/pubsub/credentials.rb +2 -2
- data/lib/google/cloud/pubsub/message.rb +1 -1
- data/lib/google/cloud/pubsub/project.rb +1 -1
- data/lib/google/cloud/pubsub/received_message.rb +4 -4
- data/lib/google/cloud/pubsub/service.rb +110 -260
- data/lib/google/cloud/pubsub/subscriber.rb +3 -3
- data/lib/google/cloud/pubsub/subscriber/stream.rb +3 -2
- data/lib/google/cloud/pubsub/subscription.rb +86 -11
- data/lib/google/cloud/pubsub/subscription/push_config.rb +55 -31
- data/lib/google/cloud/pubsub/topic.rb +52 -14
- data/lib/google/cloud/pubsub/version.rb +1 -1
- metadata +8 -79
- data/lib/google/cloud/pubsub/v1.rb +0 -17
- data/lib/google/cloud/pubsub/v1/credentials.rb +0 -41
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -91
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +0 -29
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -222
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -113
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -807
- data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +0 -19
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -928
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -120
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1463
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -153
- data/lib/google/pubsub/v1/pubsub_pb.rb +0 -266
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -215
| @@ -41,7 +41,7 @@ module Google | |
| 41 41 | 
             
                  #   subscriber.start
         | 
| 42 42 | 
             
                  #
         | 
| 43 43 | 
             
                  #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 44 | 
            -
                  #   subscriber.stop | 
| 44 | 
            +
                  #   subscriber.stop!
         | 
| 45 45 | 
             
                  #
         | 
| 46 46 | 
             
                  # @attr_reader [String] subscription_name The name of the subscription the
         | 
| 47 47 | 
             
                  #   messages are pulled from.
         | 
| @@ -240,7 +240,7 @@ module Google | |
| 240 240 | 
             
                    #   subscriber.start
         | 
| 241 241 | 
             
                    #
         | 
| 242 242 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 243 | 
            -
                    #   subscriber.stop | 
| 243 | 
            +
                    #   subscriber.stop!
         | 
| 244 244 | 
             
                    #
         | 
| 245 245 | 
             
                    def on_error &block
         | 
| 246 246 | 
             
                      synchronize do
         | 
| @@ -276,7 +276,7 @@ module Google | |
| 276 276 | 
             
                    #   subscriber.last_error #=> nil
         | 
| 277 277 | 
             
                    #
         | 
| 278 278 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 279 | 
            -
                    #   subscriber.stop | 
| 279 | 
            +
                    #   subscriber.stop!
         | 
| 280 280 | 
             
                    #
         | 
| 281 281 | 
             
                    def last_error
         | 
| 282 282 | 
             
                      synchronize { @last_error }
         | 
| @@ -271,9 +271,8 @@ module Google | |
| 271 271 | 
             
                        stop
         | 
| 272 272 | 
             
                      rescue GRPC::Cancelled, GRPC::DeadlineExceeded, GRPC::Internal,
         | 
| 273 273 | 
             
                             GRPC::ResourceExhausted, GRPC::Unauthenticated,
         | 
| 274 | 
            -
                             GRPC::Unavailable | 
| 274 | 
            +
                             GRPC::Unavailable
         | 
| 275 275 | 
             
                        # Restart the stream with an incremental back for a retriable error.
         | 
| 276 | 
            -
                        # Also when GRPC raises the internal CallError.
         | 
| 277 276 |  | 
| 278 277 | 
             
                        retry
         | 
| 279 278 | 
             
                      rescue RestartStream
         | 
| @@ -364,6 +363,8 @@ module Google | |
| 364 363 | 
             
                          req.modify_deadline_ack_ids += @inventory.ack_ids
         | 
| 365 364 | 
             
                          req.modify_deadline_seconds += @inventory.ack_ids.map { @subscriber.deadline }
         | 
| 366 365 | 
             
                          req.client_id = @subscriber.service.client_id
         | 
| 366 | 
            +
                          req.max_outstanding_messages = @inventory.limit
         | 
| 367 | 
            +
                          req.max_outstanding_bytes = @inventory.bytesize
         | 
| 367 368 | 
             
                        end
         | 
| 368 369 | 
             
                      end
         | 
| 369 370 |  | 
| @@ -43,12 +43,19 @@ module Google | |
| 43 43 | 
             
                  #     received_message.acknowledge!
         | 
| 44 44 | 
             
                  #   end
         | 
| 45 45 | 
             
                  #
         | 
| 46 | 
            -
                  #   #  | 
| 47 | 
            -
                  #   subscriber. | 
| 46 | 
            +
                  #   # Handle exceptions from listener
         | 
| 47 | 
            +
                  #   subscriber.on_error do |exception|
         | 
| 48 | 
            +
                  #      puts "Exception: #{exception.class} #{exception.message}"
         | 
| 49 | 
            +
                  #   end
         | 
| 48 50 | 
             
                  #
         | 
| 49 | 
            -
                  #   #  | 
| 50 | 
            -
                  #    | 
| 51 | 
            +
                  #   # Gracefully shut down the subscriber
         | 
| 52 | 
            +
                  #   at_exit do
         | 
| 53 | 
            +
                  #     subscriber.stop!
         | 
| 54 | 
            +
                  #   end
         | 
| 51 55 | 
             
                  #
         | 
| 56 | 
            +
                  #   # Start background threads that will call the block passed to listen.
         | 
| 57 | 
            +
                  #   subscriber.start
         | 
| 58 | 
            +
                  #   sleep
         | 
| 52 59 | 
             
                  class Subscription
         | 
| 53 60 | 
             
                    ##
         | 
| 54 61 | 
             
                    # @private The Service object.
         | 
| @@ -323,7 +330,7 @@ module Google | |
| 323 330 | 
             
                    # If {#expires_in=} is not set, a *default* value of of 31 days will be
         | 
| 324 331 | 
             
                    # used. The minimum allowed value is 1 day.
         | 
| 325 332 | 
             
                    #
         | 
| 326 | 
            -
                    # Makes an API call to retrieve the  | 
| 333 | 
            +
                    # Makes an API call to retrieve the value when called on a
         | 
| 327 334 | 
             
                    # reference object. See {#reference?}.
         | 
| 328 335 | 
             
                    #
         | 
| 329 336 | 
             
                    # @return [Numeric, nil] The expiration duration, or `nil` if unset.
         | 
| @@ -346,13 +353,25 @@ module Google | |
| 346 353 | 
             
                    #   to unset.
         | 
| 347 354 | 
             
                    #
         | 
| 348 355 | 
             
                    def expires_in= ttl
         | 
| 349 | 
            -
                      new_expiration_policy = Google:: | 
| 356 | 
            +
                      new_expiration_policy = Google::Cloud::PubSub::V1::ExpirationPolicy.new ttl: Convert.number_to_duration(ttl)
         | 
| 350 357 |  | 
| 351 358 | 
             
                      update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, expiration_policy: new_expiration_policy
         | 
| 352 359 | 
             
                      @grpc = service.update_subscription update_grpc, :expiration_policy
         | 
| 353 360 | 
             
                      @resource_name = nil
         | 
| 354 361 | 
             
                    end
         | 
| 355 362 |  | 
| 363 | 
            +
                    ##
         | 
| 364 | 
            +
                    # An expression written in the Cloud Pub/Sub filter language. If non-empty, then only {Message} instances whose
         | 
| 365 | 
            +
                    # `attributes` field matches the filter are delivered on this subscription. If empty, then no messages are
         | 
| 366 | 
            +
                    # filtered out.
         | 
| 367 | 
            +
                    #
         | 
| 368 | 
            +
                    # @return [String] The frozen filter string.
         | 
| 369 | 
            +
                    #
         | 
| 370 | 
            +
                    def filter
         | 
| 371 | 
            +
                      ensure_grpc!
         | 
| 372 | 
            +
                      @grpc.filter.freeze
         | 
| 373 | 
            +
                    end
         | 
| 374 | 
            +
             | 
| 356 375 | 
             
                    ##
         | 
| 357 376 | 
             
                    # Returns the {Topic} to which dead letter messages should be published if a dead letter policy is configured,
         | 
| 358 377 | 
             
                    # otherwise `nil`. Dead lettering is done on a best effort basis. The same message might be dead lettered
         | 
| @@ -554,7 +573,7 @@ module Google | |
| 554 573 | 
             
                    #
         | 
| 555 574 | 
             
                    # See {Topic#publish_async}, {#listen}, and {Message#ordering_key}.
         | 
| 556 575 | 
             
                    #
         | 
| 557 | 
            -
                    # Makes an API call to retrieve the  | 
| 576 | 
            +
                    # Makes an API call to retrieve the enable_message_ordering value when called on a
         | 
| 558 577 | 
             
                    # reference object. See {#reference?}.
         | 
| 559 578 | 
             
                    #
         | 
| 560 579 | 
             
                    # @return [Boolean]
         | 
| @@ -564,6 +583,35 @@ module Google | |
| 564 583 | 
             
                      @grpc.enable_message_ordering
         | 
| 565 584 | 
             
                    end
         | 
| 566 585 |  | 
| 586 | 
            +
                    ##
         | 
| 587 | 
            +
                    # Whether the subscription is detached from its topic. Detached subscriptions don't receive messages from their
         | 
| 588 | 
            +
                    # topic and don't retain any backlog. {#pull} and {#listen} (pull and streaming pull) operations will raise
         | 
| 589 | 
            +
                    # `FAILED_PRECONDITION`. If the subscription is a push subscription (see {#push_config}), pushes to the endpoint
         | 
| 590 | 
            +
                    # will not be made. The default value is `false`.
         | 
| 591 | 
            +
                    #
         | 
| 592 | 
            +
                    # See {Topic#subscribe} and {#detach}.
         | 
| 593 | 
            +
                    #
         | 
| 594 | 
            +
                    # Makes an API call to retrieve the value when called on a
         | 
| 595 | 
            +
                    # reference object. See {#reference?}.
         | 
| 596 | 
            +
                    #
         | 
| 597 | 
            +
                    # @return [Boolean]
         | 
| 598 | 
            +
                    #
         | 
| 599 | 
            +
                    # @example
         | 
| 600 | 
            +
                    #   require "google/cloud/pubsub"
         | 
| 601 | 
            +
                    #
         | 
| 602 | 
            +
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| 603 | 
            +
                    #
         | 
| 604 | 
            +
                    #   sub = pubsub.subscription "my-topic-sub"
         | 
| 605 | 
            +
                    #   sub.detach
         | 
| 606 | 
            +
                    #
         | 
| 607 | 
            +
                    #   # sleep 120
         | 
| 608 | 
            +
                    #   sub.detached? #=> true
         | 
| 609 | 
            +
                    #
         | 
| 610 | 
            +
                    def detached?
         | 
| 611 | 
            +
                      ensure_grpc!
         | 
| 612 | 
            +
                      @grpc.detached
         | 
| 613 | 
            +
                    end
         | 
| 614 | 
            +
             | 
| 567 615 | 
             
                    ##
         | 
| 568 616 | 
             
                    # Determines whether the subscription exists in the Pub/Sub service.
         | 
| 569 617 | 
             
                    #
         | 
| @@ -611,6 +659,32 @@ module Google | |
| 611 659 | 
             
                      true
         | 
| 612 660 | 
             
                    end
         | 
| 613 661 |  | 
| 662 | 
            +
                    ##
         | 
| 663 | 
            +
                    # Detaches a subscription from its topic. All messages retained in the subscription are dropped. Detached
         | 
| 664 | 
            +
                    # subscriptions don't receive messages from their topic and don't retain any backlog. Subsequent {#pull} and
         | 
| 665 | 
            +
                    # {#listen} (pull and streaming pull) operations will raise `FAILED_PRECONDITION`. If the subscription is a push
         | 
| 666 | 
            +
                    # subscription (see {#push_config}), pushes to the endpoint will stop. It may take a few minutes for the
         | 
| 667 | 
            +
                    # subscription's detached state to be reflected in subsequent calls to {#detached?}.
         | 
| 668 | 
            +
                    #
         | 
| 669 | 
            +
                    # @return [Boolean] Returns `true` if the detach operation was successful.
         | 
| 670 | 
            +
                    #
         | 
| 671 | 
            +
                    # @example
         | 
| 672 | 
            +
                    #   require "google/cloud/pubsub"
         | 
| 673 | 
            +
                    #
         | 
| 674 | 
            +
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| 675 | 
            +
                    #
         | 
| 676 | 
            +
                    #   sub = pubsub.subscription "my-topic-sub"
         | 
| 677 | 
            +
                    #   sub.detach
         | 
| 678 | 
            +
                    #
         | 
| 679 | 
            +
                    #   # sleep 120
         | 
| 680 | 
            +
                    #   sub.detached? #=> true
         | 
| 681 | 
            +
                    #
         | 
| 682 | 
            +
                    def detach
         | 
| 683 | 
            +
                      ensure_service!
         | 
| 684 | 
            +
                      service.detach_subscription name
         | 
| 685 | 
            +
                      true
         | 
| 686 | 
            +
                    end
         | 
| 687 | 
            +
             | 
| 614 688 | 
             
                    ##
         | 
| 615 689 | 
             
                    # Pulls messages from the server. Returns an empty list if there are no
         | 
| 616 690 | 
             
                    # messages available in the backlog. Raises an ApiError with status
         | 
| @@ -789,6 +863,7 @@ module Google | |
| 789 863 | 
             
                    #
         | 
| 790 864 | 
             
                    #   subscriber = sub.listen do |received_message|
         | 
| 791 865 | 
             
                    #     # process message
         | 
| 866 | 
            +
                    #     puts "Data: #{received_message.message.data}, published at #{received_message.message.published_at}"
         | 
| 792 867 | 
             
                    #     received_message.acknowledge!
         | 
| 793 868 | 
             
                    #   end
         | 
| 794 869 | 
             
                    #
         | 
| @@ -796,7 +871,7 @@ module Google | |
| 796 871 | 
             
                    #   subscriber.start
         | 
| 797 872 | 
             
                    #
         | 
| 798 873 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 799 | 
            -
                    #   subscriber.stop | 
| 874 | 
            +
                    #   subscriber.stop!
         | 
| 800 875 | 
             
                    #
         | 
| 801 876 | 
             
                    # @example Configuring to increase concurrent callbacks:
         | 
| 802 877 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -815,7 +890,7 @@ module Google | |
| 815 890 | 
             
                    #   subscriber.start
         | 
| 816 891 | 
             
                    #
         | 
| 817 892 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 818 | 
            -
                    #   subscriber.stop | 
| 893 | 
            +
                    #   subscriber.stop!
         | 
| 819 894 | 
             
                    #
         | 
| 820 895 | 
             
                    # @example Ordered messages are supported using ordering_key:
         | 
| 821 896 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -835,7 +910,7 @@ module Google | |
| 835 910 | 
             
                    #   subscriber.start
         | 
| 836 911 | 
             
                    #
         | 
| 837 912 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 838 | 
            -
                    #   subscriber.stop | 
| 913 | 
            +
                    #   subscriber.stop!
         | 
| 839 914 | 
             
                    #
         | 
| 840 915 | 
             
                    # @example Set the maximum amount of time before redelivery if the subscriber fails to extend the deadline:
         | 
| 841 916 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -854,7 +929,7 @@ module Google | |
| 854 929 | 
             
                    #   subscriber.start
         | 
| 855 930 | 
             
                    #
         | 
| 856 931 | 
             
                    #   # Shut down the subscriber when ready to stop receiving messages.
         | 
| 857 | 
            -
                    #   subscriber.stop | 
| 932 | 
            +
                    #   subscriber.stop!
         | 
| 858 933 | 
             
                    #
         | 
| 859 934 | 
             
                    def listen deadline: nil, message_ordering: nil, streams: nil, inventory: nil, threads: {}, &block
         | 
| 860 935 | 
             
                      ensure_service!
         | 
| @@ -22,7 +22,18 @@ module Google | |
| 22 22 | 
             
                    ##
         | 
| 23 23 | 
             
                    # Configuration for a push delivery endpoint.
         | 
| 24 24 | 
             
                    #
         | 
| 25 | 
            -
                    # @example
         | 
| 25 | 
            +
                    # @example Create a push config:
         | 
| 26 | 
            +
                    #   require "google/cloud/pubsub"
         | 
| 27 | 
            +
                    #
         | 
| 28 | 
            +
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| 29 | 
            +
                    #   topic = pubsub.topic "my-topic"
         | 
| 30 | 
            +
                    #
         | 
| 31 | 
            +
                    #   push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: "http://example.net/callback"
         | 
| 32 | 
            +
                    #   push_config.set_oidc_token "service-account@example.net", "audience-header-value"
         | 
| 33 | 
            +
                    #
         | 
| 34 | 
            +
                    #   sub = topic.subscribe "my-subscription", push_config: push_config
         | 
| 35 | 
            +
                    #
         | 
| 36 | 
            +
                    # @example Read a push config:
         | 
| 26 37 | 
             
                    #   require "google/cloud/pubsub"
         | 
| 27 38 | 
             
                    #
         | 
| 28 39 | 
             
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| @@ -32,7 +43,7 @@ module Google | |
| 32 43 | 
             
                    #   sub.push_config.authentication.email #=> "user@example.com"
         | 
| 33 44 | 
             
                    #   sub.push_config.authentication.audience #=> "client-12345"
         | 
| 34 45 | 
             
                    #
         | 
| 35 | 
            -
                    # @example Update  | 
| 46 | 
            +
                    # @example Update a push config:
         | 
| 36 47 | 
             
                    #   require "google/cloud/pubsub"
         | 
| 37 48 | 
             
                    #
         | 
| 38 49 | 
             
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| @@ -45,14 +56,31 @@ module Google | |
| 45 56 | 
             
                    #
         | 
| 46 57 | 
             
                    class PushConfig
         | 
| 47 58 | 
             
                      ##
         | 
| 48 | 
            -
                      #  | 
| 49 | 
            -
                       | 
| 59 | 
            +
                      # Creates a new push configuration.
         | 
| 60 | 
            +
                      #
         | 
| 61 | 
            +
                      # @param [String] endpoint A URL locating the endpoint to which messages should be pushed. For
         | 
| 62 | 
            +
                      #   example, a Webhook endpoint might use `https://example.com/push`.
         | 
| 63 | 
            +
                      # @param [String] email The service account email to be used for generating the OIDC token.
         | 
| 64 | 
            +
                      #   The caller must have the `iam.serviceAccounts.actAs` permission for the service account.
         | 
| 65 | 
            +
                      # @param [String] audience The audience to be used when generating OIDC token. The audience claim identifies
         | 
| 66 | 
            +
                      #   the recipients that the JWT is intended for. The audience value is a single case-sensitive string. Having
         | 
| 67 | 
            +
                      #   multiple values (array) for the audience field is not supported. More info about the OIDC JWT token
         | 
| 68 | 
            +
                      #   audience here: https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint`
         | 
| 69 | 
            +
                      #   URL will be used.
         | 
| 70 | 
            +
                      #
         | 
| 71 | 
            +
                      def initialize endpoint: nil, email: nil, audience: nil
         | 
| 50 72 | 
             
                        @grpc = Google::Cloud::PubSub::V1::PushConfig.new
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                        self.endpoint = endpoint unless endpoint.nil?
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                        raise ArgumentError, "audience provided without email. Authentication is invalid" if audience && !email
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                        set_oidc_token email, audience if email
         | 
| 51 79 | 
             
                      end
         | 
| 52 80 |  | 
| 53 81 | 
             
                      ##
         | 
| 54 | 
            -
                      # A URL locating the endpoint to which messages should be pushed. For
         | 
| 55 | 
            -
                      #  | 
| 82 | 
            +
                      # A URL locating the endpoint to which messages should be pushed. For example, a Webhook endpoint might use
         | 
| 83 | 
            +
                      # `https://example.com/push`.
         | 
| 56 84 | 
             
                      #
         | 
| 57 85 | 
             
                      # @return [String]
         | 
| 58 86 | 
             
                      def endpoint
         | 
| @@ -60,9 +88,8 @@ module Google | |
| 60 88 | 
             
                      end
         | 
| 61 89 |  | 
| 62 90 | 
             
                      ##
         | 
| 63 | 
            -
                      # Sets the URL locating the endpoint to which messages should be
         | 
| 64 | 
            -
                      #  | 
| 65 | 
            -
                      # `https://example.com/push`.
         | 
| 91 | 
            +
                      # Sets the URL locating the endpoint to which messages should be pushed. For example, a Webhook endpoint might
         | 
| 92 | 
            +
                      # use `https://example.com/push`.
         | 
| 66 93 | 
             
                      #
         | 
| 67 94 | 
             
                      # @param [String, nil] new_endpoint New URL value
         | 
| 68 95 | 
             
                      def endpoint= new_endpoint
         | 
| @@ -70,8 +97,7 @@ module Google | |
| 70 97 | 
             
                      end
         | 
| 71 98 |  | 
| 72 99 | 
             
                      ##
         | 
| 73 | 
            -
                      # The authentication method used by push endpoints to verify the
         | 
| 74 | 
            -
                      # source of push requests.
         | 
| 100 | 
            +
                      # The authentication method used by push endpoints to verify the source of push requests.
         | 
| 75 101 | 
             
                      #
         | 
| 76 102 | 
             
                      # @return [OidcToken, nil] An OIDC JWT token if specified, `nil`
         | 
| 77 103 | 
             
                      #   otherwise.
         | 
| @@ -82,8 +108,7 @@ module Google | |
| 82 108 | 
             
                      end
         | 
| 83 109 |  | 
| 84 110 | 
             
                      ##
         | 
| 85 | 
            -
                      # Sets the authentication method used by push endpoints to verify the
         | 
| 86 | 
            -
                      # source of push requests.
         | 
| 111 | 
            +
                      # Sets the authentication method used by push endpoints to verify the source of push requests.
         | 
| 87 112 | 
             
                      #
         | 
| 88 113 | 
             
                      # @param [OidcToken, nil] new_auth An authentication value.
         | 
| 89 114 | 
             
                      def authentication= new_auth
         | 
| @@ -118,13 +143,12 @@ module Google | |
| 118 143 | 
             
                      end
         | 
| 119 144 |  | 
| 120 145 | 
             
                      ##
         | 
| 121 | 
            -
                      # The format of the pushed message. This attribute indicates the
         | 
| 122 | 
            -
                      #  | 
| 123 | 
            -
                      #  | 
| 124 | 
            -
                      # endpoint version is based on the version of the Pub/Sub API.
         | 
| 146 | 
            +
                      # The format of the pushed message. This attribute indicates the version of the data expected by the endpoint.
         | 
| 147 | 
            +
                      # This controls the shape of the pushed message (i.e., its fields and metadata). The endpoint version is based
         | 
| 148 | 
            +
                      # on the version of the Pub/Sub API.
         | 
| 125 149 | 
             
                      #
         | 
| 126 | 
            -
                      # If not present during the Subscription creation, it will default to
         | 
| 127 | 
            -
                      #  | 
| 150 | 
            +
                      # If not present during the Subscription creation, it will default to the version of the API used to make such
         | 
| 151 | 
            +
                      # call.
         | 
| 128 152 | 
             
                      #
         | 
| 129 153 | 
             
                      # The possible values for this attribute are:
         | 
| 130 154 | 
             
                      #
         | 
| @@ -182,7 +206,8 @@ module Google | |
| 182 206 | 
             
                        end
         | 
| 183 207 |  | 
| 184 208 | 
             
                        ##
         | 
| 185 | 
            -
                        #  | 
| 209 | 
            +
                        # The service account email to be used for generating the OIDC token. The caller must have the
         | 
| 210 | 
            +
                        # `iam.serviceAccounts.actAs` permission for the service account.
         | 
| 186 211 | 
             
                        #
         | 
| 187 212 | 
             
                        # @return [String]
         | 
| 188 213 | 
             
                        def email
         | 
| @@ -190,7 +215,8 @@ module Google | |
| 190 215 | 
             
                        end
         | 
| 191 216 |  | 
| 192 217 | 
             
                        ##
         | 
| 193 | 
            -
                        #  | 
| 218 | 
            +
                        # Sets the service account email to be used for generating the OIDC token. The caller must have the
         | 
| 219 | 
            +
                        # `iam.serviceAccounts.actAs` permission for the service account.
         | 
| 194 220 | 
             
                        #
         | 
| 195 221 | 
             
                        # @param [String] new_email New service account email value.
         | 
| 196 222 | 
             
                        def email= new_email
         | 
| @@ -198,15 +224,10 @@ module Google | |
| 198 224 | 
             
                        end
         | 
| 199 225 |  | 
| 200 226 | 
             
                        ##
         | 
| 201 | 
            -
                        #  | 
| 202 | 
            -
                        #  | 
| 203 | 
            -
                        # audience  | 
| 204 | 
            -
                        #
         | 
| 205 | 
            -
                        # Having multiple values (array) for the audience field is not
         | 
| 206 | 
            -
                        # supported.
         | 
| 207 | 
            -
                        #
         | 
| 208 | 
            -
                        # More info about the OIDC JWT token audience here:
         | 
| 209 | 
            -
                        # https://tools.ietf.org/html/rfc7519#section-4.1.3
         | 
| 227 | 
            +
                        # The audience to be used when generating OIDC token. The audience claim identifies the recipients that
         | 
| 228 | 
            +
                        # the JWT is intended for. The audience value is a single case-sensitive string. Having multiple values
         | 
| 229 | 
            +
                        # (array) for the audience field is not supported. More info about the OIDC JWT token audience here:
         | 
| 230 | 
            +
                        # https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint` URL will be used.
         | 
| 210 231 | 
             
                        #
         | 
| 211 232 | 
             
                        # @return [String]
         | 
| 212 233 | 
             
                        def audience
         | 
| @@ -214,7 +235,10 @@ module Google | |
| 214 235 | 
             
                        end
         | 
| 215 236 |  | 
| 216 237 | 
             
                        ##
         | 
| 217 | 
            -
                        # Sets the audience to be used when generating OIDC token.
         | 
| 238 | 
            +
                        # Sets the audience to be used when generating OIDC token. The audience claim identifies the recipients that
         | 
| 239 | 
            +
                        # the JWT is intended for. The audience value is a single case-sensitive string. Having multiple values
         | 
| 240 | 
            +
                        # (array) for the audience field is not supported. More info about the OIDC JWT token audience here:
         | 
| 241 | 
            +
                        # https://tools.ietf.org/html/rfc7519#section-4.1.3 Note: if not specified, the `endpoint` URL will be used.
         | 
| 218 242 | 
             
                        #
         | 
| 219 243 | 
             
                        # @param [String] new_audience New audience value.
         | 
| 220 244 | 
             
                        def audience= new_audience
         | 
| @@ -78,7 +78,7 @@ module Google | |
| 78 78 | 
             
                    #     end
         | 
| 79 79 | 
             
                    #   end
         | 
| 80 80 | 
             
                    #
         | 
| 81 | 
            -
                    #   topic.async_publisher.stop | 
| 81 | 
            +
                    #   topic.async_publisher.stop!
         | 
| 82 82 | 
             
                    #
         | 
| 83 83 | 
             
                    def async_publisher
         | 
| 84 84 | 
             
                      @async_publisher
         | 
| @@ -275,7 +275,10 @@ module Google | |
| 275 275 | 
             
                    #   604,800 seconds (7 days) or less than 600 seconds (10 minutes).
         | 
| 276 276 | 
             
                    #   Default is 604,800 seconds (7 days).
         | 
| 277 277 | 
             
                    # @param [String] endpoint A URL locating the endpoint to which messages
         | 
| 278 | 
            -
                    #   should be pushed.
         | 
| 278 | 
            +
                    #   should be pushed. The parameters `push_config` and `endpoint` should not both be provided.
         | 
| 279 | 
            +
                    # @param [Google::Cloud::PubSub::Subscription::PushConfig] push_config The configuration for a push delivery
         | 
| 280 | 
            +
                    #   endpoint that should contain the endpoint, and can contain authentication data (OIDC token authentication).
         | 
| 281 | 
            +
                    #   The parameters `push_config` and `endpoint` should not both be provided.
         | 
| 279 282 | 
             
                    # @param [Hash] labels A hash of user-provided labels associated with
         | 
| 280 283 | 
             
                    #   the subscription. You can use these to organize and group your
         | 
| 281 284 | 
             
                    #   subscriptions. Label keys and values can be no longer than 63
         | 
| @@ -286,6 +289,9 @@ module Google | |
| 286 289 | 
             
                    #   Managing Labels](https://cloud.google.com/pubsub/docs/labels).
         | 
| 287 290 | 
             
                    # @param [Boolean] message_ordering Whether to enable message ordering
         | 
| 288 291 | 
             
                    #   on the subscription.
         | 
| 292 | 
            +
                    # @param [String] filter An expression written in the Cloud Pub/Sub filter language. If non-empty, then only
         | 
| 293 | 
            +
                    #   {Message} instances whose `attributes` field matches the filter are delivered on this subscription. If
         | 
| 294 | 
            +
                    #   empty, then no messages are filtered out. Optional.
         | 
| 289 295 | 
             
                    # @param [Topic] dead_letter_topic The {Topic} to which dead letter messages for the subscription should be
         | 
| 290 296 | 
             
                    #   published. Dead lettering is done on a best effort basis. The same message might be dead lettered multiple
         | 
| 291 297 | 
             
                    #   times. The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,
         | 
| @@ -317,15 +323,25 @@ module Google | |
| 317 323 | 
             
                    #   sub = topic.subscribe "my-topic-sub"
         | 
| 318 324 | 
             
                    #   sub.name # => "my-topic-sub"
         | 
| 319 325 | 
             
                    #
         | 
| 320 | 
            -
                    # @example Wait 2 minutes for acknowledgement | 
| 326 | 
            +
                    # @example Wait 2 minutes for acknowledgement:
         | 
| 321 327 | 
             
                    #   require "google/cloud/pubsub"
         | 
| 322 328 | 
             
                    #
         | 
| 323 329 | 
             
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| 324 330 | 
             
                    #
         | 
| 325 331 | 
             
                    #   topic = pubsub.topic "my-topic"
         | 
| 326 332 | 
             
                    #   sub = topic.subscribe "my-topic-sub",
         | 
| 327 | 
            -
                    #                         deadline: 120 | 
| 328 | 
            -
                    # | 
| 333 | 
            +
                    #                         deadline: 120
         | 
| 334 | 
            +
                    #
         | 
| 335 | 
            +
                    # @example Configure a push endpoint:
         | 
| 336 | 
            +
                    #   require "google/cloud/pubsub"
         | 
| 337 | 
            +
                    #
         | 
| 338 | 
            +
                    #   pubsub = Google::Cloud::PubSub.new
         | 
| 339 | 
            +
                    #   topic = pubsub.topic "my-topic"
         | 
| 340 | 
            +
                    #
         | 
| 341 | 
            +
                    #   push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: "http://example.net/callback"
         | 
| 342 | 
            +
                    #   push_config.set_oidc_token "service-account@example.net", "audience-header-value"
         | 
| 343 | 
            +
                    #
         | 
| 344 | 
            +
                    #   sub = topic.subscribe "my-subscription", push_config: push_config
         | 
| 329 345 | 
             
                    #
         | 
| 330 346 | 
             
                    # @example Configure a Dead Letter Queues policy:
         | 
| 331 347 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -358,18 +374,40 @@ module Google | |
| 358 374 | 
             
                    #   retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
         | 
| 359 375 | 
             
                    #   sub = topic.subscribe "my-topic-sub", retry_policy: retry_policy
         | 
| 360 376 | 
             
                    #
         | 
| 361 | 
            -
                    def subscribe subscription_name, | 
| 362 | 
            -
                                   | 
| 377 | 
            +
                    def subscribe subscription_name,
         | 
| 378 | 
            +
                                  deadline: nil,
         | 
| 379 | 
            +
                                  retain_acked: false,
         | 
| 380 | 
            +
                                  retention: nil,
         | 
| 381 | 
            +
                                  endpoint: nil,
         | 
| 382 | 
            +
                                  push_config: nil,
         | 
| 383 | 
            +
                                  labels: nil,
         | 
| 384 | 
            +
                                  message_ordering: nil,
         | 
| 385 | 
            +
                                  filter: nil,
         | 
| 386 | 
            +
                                  dead_letter_topic: nil,
         | 
| 387 | 
            +
                                  dead_letter_max_delivery_attempts: nil,
         | 
| 363 388 | 
             
                                  retry_policy: nil
         | 
| 364 389 | 
             
                      ensure_service!
         | 
| 365 | 
            -
                       | 
| 366 | 
            -
             | 
| 367 | 
            -
             | 
| 390 | 
            +
                      if push_config && endpoint
         | 
| 391 | 
            +
                        raise ArgumentError, "endpoint and push_config were both provided. Please provide only one."
         | 
| 392 | 
            +
                      end
         | 
| 393 | 
            +
                      push_config = Google::Cloud::PubSub::Subscription::PushConfig.new endpoint: endpoint if endpoint
         | 
| 394 | 
            +
             | 
| 395 | 
            +
                      options = {
         | 
| 396 | 
            +
                        deadline:                          deadline,
         | 
| 397 | 
            +
                        retain_acked:                      retain_acked,
         | 
| 398 | 
            +
                        retention:                         retention,
         | 
| 399 | 
            +
                        labels:                            labels,
         | 
| 400 | 
            +
                        message_ordering:                  message_ordering,
         | 
| 401 | 
            +
                        filter:                            filter,
         | 
| 402 | 
            +
                        dead_letter_max_delivery_attempts: dead_letter_max_delivery_attempts
         | 
| 403 | 
            +
                      }
         | 
| 404 | 
            +
             | 
| 368 405 | 
             
                      options[:dead_letter_topic_name] = dead_letter_topic.name if dead_letter_topic
         | 
| 369 406 | 
             
                      if options[:dead_letter_max_delivery_attempts] && !options[:dead_letter_topic_name]
         | 
| 370 407 | 
             
                        # Service error message "3:Invalid resource name given (name=)." does not identify param.
         | 
| 371 408 | 
             
                        raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
         | 
| 372 409 | 
             
                      end
         | 
| 410 | 
            +
                      options[:push_config] = push_config.to_grpc if push_config
         | 
| 373 411 | 
             
                      options[:retry_policy] = retry_policy.to_grpc if retry_policy
         | 
| 374 412 | 
             
                      grpc = service.create_subscription name, subscription_name, options
         | 
| 375 413 | 
             
                      Subscription.from_grpc grpc, service
         | 
| @@ -586,7 +624,7 @@ module Google | |
| 586 624 | 
             
                    #   end
         | 
| 587 625 | 
             
                    #
         | 
| 588 626 | 
             
                    #   # Shut down the publisher when ready to stop publishing messages.
         | 
| 589 | 
            -
                    #   topic.async_publisher.stop | 
| 627 | 
            +
                    #   topic.async_publisher.stop!
         | 
| 590 628 | 
             
                    #
         | 
| 591 629 | 
             
                    # @example A message can be published using a File object:
         | 
| 592 630 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -598,7 +636,7 @@ module Google | |
| 598 636 | 
             
                    #   topic.publish_async file
         | 
| 599 637 | 
             
                    #
         | 
| 600 638 | 
             
                    #   # Shut down the publisher when ready to stop publishing messages.
         | 
| 601 | 
            -
                    #   topic.async_publisher.stop | 
| 639 | 
            +
                    #   topic.async_publisher.stop!
         | 
| 602 640 | 
             
                    #
         | 
| 603 641 | 
             
                    # @example Additionally, a message can be published with attributes:
         | 
| 604 642 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -610,7 +648,7 @@ module Google | |
| 610 648 | 
             
                    #                       foo: :bar, this: :that
         | 
| 611 649 | 
             
                    #
         | 
| 612 650 | 
             
                    #   # Shut down the publisher when ready to stop publishing messages.
         | 
| 613 | 
            -
                    #   topic.async_publisher.stop | 
| 651 | 
            +
                    #   topic.async_publisher.stop!
         | 
| 614 652 | 
             
                    #
         | 
| 615 653 | 
             
                    # @example Ordered messages are supported using ordering_key:
         | 
| 616 654 | 
             
                    #   require "google/cloud/pubsub"
         | 
| @@ -627,7 +665,7 @@ module Google | |
| 627 665 | 
             
                    #                       ordering_key: "task-key"
         | 
| 628 666 | 
             
                    #
         | 
| 629 667 | 
             
                    #   # Shut down the publisher when ready to stop publishing messages.
         | 
| 630 | 
            -
                    #   topic.async_publisher.stop | 
| 668 | 
            +
                    #   topic.async_publisher.stop!
         | 
| 631 669 | 
             
                    #
         | 
| 632 670 | 
             
                    def publish_async data = nil, attributes = nil, ordering_key: nil, **extra_attrs, &callback
         | 
| 633 671 | 
             
                      ensure_service!
         |