Sha256: 0b57201367370b53c049bd739db56de2d0e03f0fdf2adeb0eccf1e374b7babda

Contents?: true

Size: 1.55 KB

Versions: 36

Compression:

Stored size: 1.55 KB

Contents

require 'toiler/aws/message'

module Toiler
  module Aws
    # SQS Queue abstraction
    # Provides methods for querying and acting on a SQS queue
    class Queue
      attr_accessor :name, :client, :url

      def initialize(name, client = nil)
        @name   = name
        @client = client || ::Aws::SQS::Client.new
        @url    = client.get_queue_url(queue_name: name).queue_url
      end

      def visibility_timeout
        client.get_queue_attributes(
          queue_url: url,
          attribute_names: ['VisibilityTimeout']
        ).attributes['VisibilityTimeout'].to_i
      end

      def delete_messages(options)
        client.delete_message_batch options.merge queue_url: url
      end

      def send_message(options)
        client.send_message sanitize_message_body options.merge queue_url: url
      end

      def send_messages(options)
        client.send_message_batch(
          sanitize_message_body options.merge queue_url: url
        )
      end

      def receive_messages(options)
        client.receive_message(options.merge(queue_url: url))
          .messages
          .map { |m| Message.new(client, url, m) }
      end

      private

      def sanitize_message_body(options)
        messages = options[:entries] || [options]

        messages.each do |m|
          body = m[:message_body]
          if body.is_a?(Hash)
            m[:message_body] = JSON.dump(body)
          elsif !body.is_a? String
            fail ArgumentError, "Body must be a String, found #{body.class}"
          end
        end

        options
      end
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
toiler-0.6.1 lib/toiler/aws/queue.rb
toiler-0.6.0 lib/toiler/aws/queue.rb
toiler-0.6.0.pre1 lib/toiler/aws/queue.rb
toiler-0.5.1 lib/toiler/aws/queue.rb
toiler-0.5.1.pre9 lib/toiler/aws/queue.rb
toiler-0.5.1.pre7 lib/toiler/aws/queue.rb
toiler-0.5.1.pre6 lib/toiler/aws/queue.rb
toiler-0.5.1.pre5 lib/toiler/aws/queue.rb
toiler-0.5.1.pre4 lib/toiler/aws/queue.rb
toiler-0.5.1.pre3 lib/toiler/aws/queue.rb
toiler-0.5.1.pre2 lib/toiler/aws/queue.rb
toiler-0.5.1.pre1 lib/toiler/aws/queue.rb
toiler-0.5.0 lib/toiler/aws/queue.rb
toiler-0.4.3 lib/toiler/aws/queue.rb
toiler-0.4.2 lib/toiler/aws/queue.rb
toiler-0.4.1 lib/toiler/aws/queue.rb
toiler-0.4.0 lib/toiler/aws/queue.rb
toiler-0.4.0.beta1 lib/toiler/aws/queue.rb
toiler-0.3.5 lib/toiler/aws/queue.rb
toiler-0.3.4 lib/toiler/aws/queue.rb