Sha256: 3a994e94297c9a9ea3e0e5420ccbd8751642853583b03d252be358bbc8bd6f0b

Contents?: true

Size: 1.72 KB

Versions: 3

Compression:

Stored size: 1.72 KB

Contents

class Carrot
  module AMQP
    HEADER        = "AMQP".freeze
    VERSION_MAJOR = 8
    VERSION_MINOR = 0
    PORT          = 5672
  end
end
  
$:.unshift File.expand_path(File.dirname(File.expand_path(__FILE__)))
require 'amqp/spec'
require 'amqp/buffer'
require 'amqp/exchange'
require 'amqp/frame'
require 'amqp/header'
require 'amqp/queue'
require 'amqp/server'
require 'amqp/protocol'

class Carrot
  @logging = false
  class << self
    attr_accessor :logging
  end
  def self.logging?
    @logging
  end
  class Error < StandardError; end

  attr_accessor :server

  def initialize(opts = {})
    @server = AMQP::Server.new(opts)
  end
  
  def queue(name, opts = {})
    queues[name] ||= AMQP::Queue.new(server, name, opts)
  end

  def stop
    server.close
  end

  def queues
    @queues ||= {}
  end

  def direct(name = 'amq.direct', opts = {})
    exchanges[name] ||= Exchange.new(server, :direct, name, opts)
  end

  def topic(name = 'amq.topic', opts = {})
    exchanges[name] ||= Exchange.new(server, :topic, name, opts)
  end

  def headers(name = 'amq.match', opts = {})
    exchanges[name] ||= Exchange.new(server, :headers, name, opts)
  end

  def exchanges
    @exchanges ||= {}
  end

private

  def log(*args)
    return unless Carrot.logging?
    pp args
    puts
  end
end

#-- convenience wrapper (read: HACK) for thread-local Carrot object

class Carrot
  def Carrot.default
    #-- XXX clear this when connection is closed
    Thread.current[:carrot] ||= Carrot.new
  end

  # Allows for calls to all Carrot instance methods. This implicitly calls
  # Carrot.new so that a new channel is allocated for subsequent operations.
  def Carrot.method_missing(meth, *args, &blk)
    Carrot.default.__send__(meth, *args, &blk)
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
famoseagle-carrot-0.3.0 lib/carrot.rb
famoseagle-carrot-0.4.0 lib/carrot.rb
famoseagle-carrot-0.5.0 lib/carrot.rb