Class: Fog::Google::Pubsub::Real

Inherits:
Object
  • Object
show all
Includes:
Shared
Defined in:
lib/fog/google/pubsub/real.rb,
lib/fog/google/requests/pubsub/get_topic.rb,
lib/fog/google/requests/pubsub/list_topics.rb,
lib/fog/google/requests/pubsub/create_topic.rb,
lib/fog/google/requests/pubsub/delete_topic.rb,
lib/fog/google/requests/pubsub/publish_topic.rb,
lib/fog/google/requests/pubsub/get_subscription.rb,
lib/fog/google/requests/pubsub/pull_subscription.rb,
lib/fog/google/requests/pubsub/list_subscriptions.rb,
lib/fog/google/requests/pubsub/create_subscription.rb,
lib/fog/google/requests/pubsub/delete_subscription.rb,
lib/fog/google/requests/pubsub/acknowledge_subscription.rb

Instance Attribute Summary collapse

Attributes included from Shared

#api_url, #api_version, #project

Instance Method Summary collapse

Methods included from Shared

#build_excon_response, #create_signing_key, #initialize_google_client, #new_pk12_google_client, #request, #shared_initialize

Constructor Details

#initialize(options) ⇒ Real

Returns a new instance of Real.



10
11
12
13
14
15
16
# File 'lib/fog/google/pubsub/real.rb', line 10

def initialize(options)
  shared_initialize(options[:google_project], GOOGLE_PUBSUB_API_VERSION, GOOGLE_PUBSUB_BASE_URL)
  options[:google_api_scope_url] = GOOGLE_PUBSUB_API_SCOPE_URLS.join(" ")

  @client = initialize_google_client(options)
  @pubsub = @client.discovered_api("pubsub", api_version)
end

Instance Attribute Details

#clientObject

Returns the value of attribute client.



7
8
9
# File 'lib/fog/google/pubsub/real.rb', line 7

def client
  @client
end

#pubsubObject (readonly)

Returns the value of attribute pubsub.



8
9
10
# File 'lib/fog/google/pubsub/real.rb', line 8

def pubsub
  @pubsub
end

Instance Method Details

#acknowledge_subscription(subscription, ack_ids) ⇒ Object

Acknowledges a message received from a subscription.



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/fog/google/requests/pubsub/acknowledge_subscription.rb', line 8

def acknowledge_subscription(subscription, ack_ids)
  api_method = @pubsub.projects.subscriptions.acknowledge

  parameters = {
    "subscription" => subscription.to_s
  }

  body = {
    "ackIds" => ack_ids
  }

  request(api_method, parameters, body)
end

#create_subscription(subscription_name, topic, push_config = {}, ack_deadline_seconds = nil) ⇒ Object

Create a subscription resource on a topic.

Parameters:

  • subscription_name (#to_s)

    name of the subscription to create. Note that it must follow the restrictions of subscription names; specifically it must be named within a project (e.g. “projects/my-project/subscriptions/my-subscripton”)

  • topic (Topic, #to_s)

    topic instance or name of topic to create subscription on

  • push_config (Hash) (defaults to: {})

    configuration for a push config (if empty hash, then no push_config is created)

  • ack_deadline_seconds (Number) (defaults to: nil)

    how long the service waits for an acknowledgement before redelivering the message; if nil then service default of 10 is used

See Also:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/fog/google/requests/pubsub/create_subscription.rb', line 19

def create_subscription(subscription_name, topic, push_config = {}, ack_deadline_seconds = nil)
  api_method = @pubsub.projects.subscriptions.create

  parameters = {}
  parameters["name"] = subscription_name.to_s unless subscription_name.nil?

  body = {
    "topic" => (topic.is_a?(Topic) ? topic.name : topic.to_s)
  }

  if !push_config.nil? && push_config.key?("push_endpoint")
    body["pushConfig"] = push_config["push_endpoint"].clone
    body["pushConfig"]["attributes"] = push_config["attributes"] if push_config.key?("attributes")
  end

  body["ackDeadlineSeconds"] = ack_deadline_seconds unless ack_deadline_seconds.nil?

  request(api_method, parameters, body)
end

#create_topic(topic_name) ⇒ Object

Create a topic on the remote service.

Parameters:

  • topic_name (#to_s)

    name of topic to create; note that it must obey the naming rules for a topic (e.g. ‘projects/myProject/topics/my_topic’)

See Also:



11
12
13
14
15
16
17
18
# File 'lib/fog/google/requests/pubsub/create_topic.rb', line 11

def create_topic(topic_name)
  api_method = @pubsub.projects.topics.create
  parameters = {
    "name" => topic_name.to_s
  }

  request(api_method, parameters)
end

#delete_subscription(subscription_name) ⇒ Object

Delete a subscription on the remote service.

Parameters:

  • subscription_name (#to_s)

    name of subscription to delete

See Also:



9
10
11
12
13
14
15
16
# File 'lib/fog/google/requests/pubsub/delete_subscription.rb', line 9

def delete_subscription(subscription_name)
  api_method = @pubsub.projects.subscriptions.delete
  parameters = {
    "subscription" => subscription_name.to_s
  }

  request(api_method, parameters)
end

#delete_topic(topic_name) ⇒ Object

Delete a topic on the remote service.

Parameters:

  • topic_name (#to_s)

    name of topic to delete

See Also:



9
10
11
12
13
14
15
16
# File 'lib/fog/google/requests/pubsub/delete_topic.rb', line 9

def delete_topic(topic_name)
  api_method = @pubsub.projects.topics.delete
  parameters = {
    "topic" => topic_name.to_s
  }

  request(api_method, parameters)
end

#get_subscription(subscription_name) ⇒ Object

Retrieves a subscription by name from the remote service.

Parameters:

  • subscription_name (#to_s)

    name of subscription to retrieve

See Also:



9
10
11
12
13
14
15
16
# File 'lib/fog/google/requests/pubsub/get_subscription.rb', line 9

def get_subscription(subscription_name)
  api_method = @pubsub.projects.subscriptions.get
  parameters = {
    "subscription" => subscription_name.to_s
  }

  request(api_method, parameters)
end

#get_topic(topic_name) ⇒ Object

Retrieves a resource describing a topic.

Parameters:

  • topic_name (#to_s)

    name of topic to retrieve

See Also:



9
10
11
12
13
14
15
16
# File 'lib/fog/google/requests/pubsub/get_topic.rb', line 9

def get_topic(topic_name)
  api_method = @pubsub.projects.topics.get
  parameters = {
    "topic" => topic_name.to_s
  }

  request(api_method, parameters)
end

#list_subscriptions(project = nil) ⇒ Object

Gets a list of all subscriptions for a given project.



11
12
13
14
15
16
17
18
# File 'lib/fog/google/requests/pubsub/list_subscriptions.rb', line 11

def list_subscriptions(project = nil)
  api_method = @pubsub.projects.subscriptions.list
  parameters = {
    "project" => (project.nil? ? "projects/#{@project}" : project.to_s)
  }

  request(api_method, parameters)
end

#list_topics(project = nil) ⇒ Object

Gets a list of all topics for a given project.



11
12
13
14
15
16
17
18
# File 'lib/fog/google/requests/pubsub/list_topics.rb', line 11

def list_topics(project = nil)
  api_method = @pubsub.projects.topics.list
  parameters = {
    "project" => (project.nil? ? "projects/#{@project}" : project.to_s)
  }

  request(api_method, parameters)
end

#publish_topic(topic, messages) ⇒ Object

Publish a list of messages to a topic.

Parameters:

  • messages (Array<Hash>)

    List of messages to be published to a topic; each hash should have a value defined for ‘data’ or for ‘attributes’ (or both). Note that the value associated with ‘data’ must be base64 encoded.

See Also:



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/fog/google/requests/pubsub/publish_topic.rb', line 12

def publish_topic(topic, messages)
  api_method = @pubsub.projects.topics.publish

  parameters = {
    "topic" => topic
  }

  body = {
    "messages" => messages
  }

  request(api_method, parameters, body)
end

#pull_subscription(subscription, options = { :return_immediately => true, :max_messages => 10 }) ⇒ Object

Pulls from a subscription. If option ‘return_immediately’ is false, then this method blocks until one or more messages is available or the remote server closes the connection.

Parameters:

  • subscription (Subscription, #to_s)

    subscription instance or name of subscription to pull from

  • options (Hash) (defaults to: { :return_immediately => true, :max_messages => 10 })

    options to modify the pull request

Options Hash (options):

  • :return_immediately (Boolean)

    if true, method returns after API call; otherwise the connection is held open until messages are available or the remote server closes the connection (defaults to true)

  • :max_messages (Number)

    maximum number of messages to retrieve (defaults to 10)

See Also:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/fog/google/requests/pubsub/pull_subscription.rb', line 19

def pull_subscription(subscription, options = { :return_immediately => true, :max_messages => 10 })
  api_method = @pubsub.projects.subscriptions.pull

  parameters = {
    "subscription" => Fog::Google::Pubsub.subscription_name(subscription)
  }

  body = {
    "returnImmediately" => options[:return_immediately],
    "maxMessages" => options[:max_messages]
  }

  request(api_method, parameters, body)
end