class AWS::SQS::QueueCollection

Represents all the {Queue} objects in your account.

If you have permission to access a queue created by another account, you can also use this collection to access that queue by URL.

@example Printing the URLs of all queues

pp sqs.queues.map(&:url)

@example Filtering queues by queue name prefix

pp sqs.queues.with_prefix("production_").map(&:url)

@example Accessing a queue by URL

url = "http://sqs.us-east-1.amazonaws.com/123456789012/myqueue"
sqs.queues[url].send_message("HELLO")

Attributes

prefix[R]

@return [String] The queue name prefix by which this

collection is filtered.

Public Class Methods

new(opts = {}) click to toggle source

@private

# File lib/aws/sqs/queue_collection.rb, line 38
def initialize(opts = {})
  @prefix = opts[:prefix]
  super
end

Public Instance Methods

[](url) click to toggle source

@return [Queue] The queue with the given URL.

# File lib/aws/sqs/queue_collection.rb, line 130
def [] url
  Queue.new(url, :config => config)
end
create(name, options = {}) click to toggle source

Creates a new queue.

@note If you delete a queue, you must wait at least 60

seconds before creating a queue with the same name.

@param [String] name The name to use for the queue created.

Constraints: Maximum 80 characters; alphanumeric
characters, hyphens (-), and underscores (_) are allowed.

The name of the queue should be unique within your account.  If
you provide the name of an existing queue with the same options
it was created with then no error is raised and the existing
queue will be returned.

@param [Hash] options

@option options [Integer] :visibility_timeout (30) The number of

seconds a message received from a queue will be invisible to 
others when they ask to receive messages.

@option options [Policy] :policy A policy object or policy desription

(a json string).

@option options [Integer] :maximum_message_size (65536) The maximum

number of bytes a message can contain before Amazon SQS rejects 
it.

@option options [Integer] :delay_seconds The time in seconds that

the delivery of all messages in the queue will be delayed.
This can be overriden when sending a message to the queue.

@option options [Integer] :message_retention_period The number of

seconds from 60 (1 minute) to 1209600 (14 days).  The default
is 345600 (4 days).

@return [Queue] The newly created queue.

# File lib/aws/sqs/queue_collection.rb, line 84
def create name, options = {}

  # SQS removed the default prefix to the visibility timeout option
  # in the 2011-10-01 update -- this allows us to not break existing
  # customers.
  if options[:default_visibility_timeout]
    options[:visibility_timeout] = 
      options.delete(:default_visibility_timeout)
  end

  if policy = options[:policy]
    options[:policy] = policy.to_json unless policy.is_a?(String)
  end

  client_opts = {}
  client_opts[:queue_name] = name
  unless options.empty?
    client_opts[:attributes] = options.inject({}) do |attributes,(k,v)|
      attributes.merge(Core::Inflection.class_name(k.to_s) => v.to_s)
    end
  end

  response = client.create_queue(client_opts)

  Queue.new(response.queue_url, :config => config)

end
each() { |queue| ... } click to toggle source

@yieldparam [Queue] queue Each {Queue} object in the collection.

# File lib/aws/sqs/queue_collection.rb, line 113
def each(&block)
  options = {}
  options[:queue_name_prefix] = prefix if prefix
  client.list_queues(options).queue_urls.each do |url|
    queue = self[url]
    yield(queue)
  end
end
named(queue_name, options = {}) click to toggle source

Returns the queue with the given name. This requires making a request to SQS to get the queue url. If you know the url, you should use {#[]} instead.

queue = AWS::SQS.new.queues.named('my-queue')

@param (see url_for) @option (see url_for) @return [Queue] Returns the queue with the given name.

# File lib/aws/sqs/queue_collection.rb, line 143
def named queue_name, options = {}
  self[url_for(queue_name, options = {})]
end
url_for(queue_name, options = {}) click to toggle source

Returns the url for the given queue.

sqs.queues.url_for('my-queue') 
#=> "https://sqs.us-east-1.amazonaws.com/123456789012/my-queue"

@param [String] queue_name The name of the queue you need a URL for.

@param [Hash] options

@option options [String] :queue_owner_aws_account_id The AWS account

ID of the account that created the queue.  You can only get the
url for queues in other accounts when the account owner has
granted you permission.
# File lib/aws/sqs/queue_collection.rb, line 161
def url_for queue_name, options = {}
  client_opts = {}
  client_opts[:queue_name] = queue_name
  client.get_queue_url(client_opts.merge(options)).queue_url
end
with_prefix(prefix) click to toggle source

@param [String] prefix The queue name prefix. @return [QueueCollection] A new collection representing only

the queues whose names start with the given prefix.
# File lib/aws/sqs/queue_collection.rb, line 125
def with_prefix(prefix)
  self.class.new(:prefix => prefix, :config => config)
end