module SqsCli

Constants

VERSION

Public Instance Methods

run() click to toggle source
# File lib/sqs_cli.rb, line 10
def run
  all_queue_urls = Cli.wait_with_message("Fetching queues...") do
    SQS.all_queues
  end

  source = Cli.list_options "Source queue or file",
    all_queue_urls,
    include_file: true
  source_is_queue = source[:selected_item]

  destination = Cli.list_options "Destination queue or file (appends)",
    all_queue_urls,
    include_file: source_is_queue,
    include_stdout: source_is_queue

  if source_is_queue
    delete_when_done = Ask.confirm "Delete message when processed?"
  end


  ticker = Ticker.new

  if source_url = source[:selected_item]
    SQS.read_message_batches(source_url) do |batch|
      batch.each { ticker.increment }

      if destination_url = destination[:selected_item]
        SQS.send_message_batch(destination_url, batch)
      elsif destination_file = destination[:filename]
        DataFile.new(destination_file).write_batch(batch)
      elsif stream = destination[:stream]
        batch.each { |message| stream.puts message.body }
      end

      SQS.delete_message_batch(source_url, batch) if delete_when_done
    end

  elsif source_file = source[:filename]
    DataFile.new(source_file).read_batches do |batch|
      batch.each { ticker.increment }

      if destination_url = destination[:selected_item]
        SQS.send_message_batch(destination_url, batch)
      end
    end
  end

  puts "\nProcessed #{ticker.count} messages in #{ticker.uptime} seconds"
end