message_queue 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d43c890e14170d4f2fbc39a359b155a2e4ea94d
4
- data.tar.gz: a6501eccd4b0f1d3745f465360389594867bb062
3
+ metadata.gz: e139a22eb92dc83672337ded0224ee8ae245ddad
4
+ data.tar.gz: c78ce34bfdd40ddcde86691b35e599610621b5c4
5
5
  SHA512:
6
- metadata.gz: 3345bb10af66d6872a97a4c1e527fd825c46fca4af09be6e818b05e02f71d94e8d258517a90515b4cee4f30377841d36c1424471318030a86603b317909b4133
7
- data.tar.gz: 7b1a2f3b0966f6a7e79ae70210389aba52a07c4dff5220baf4a85ef4e4200a16fdc8d326a909092b33e1febd71b3a27399af69aa4ccf46132099cb003688aff0
6
+ metadata.gz: 5a2e5be7579e33fd0ac8bdef724eedeb8a78151128e0c7c5ec175b0e64833d56887308d5345c53c070cfdf2e8352ef097e535aefa41bc2dd5af728eb9eb77cd5
7
+ data.tar.gz: 804f366204e4bf1b979a2938e8bab9a760cac1085f6827986ae71da6a751f2d3e53bea12885fa218a41b523fe990dff4a561493ad2b06d6484bd658ea56974c6
data/Gemfile CHANGED
@@ -2,3 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in message_queue.gemspec
4
4
  gemspec
5
+
6
+ gem "bunny"
7
+ gem "msgpack"
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MessageQueue
2
2
 
3
- TODO: Write a gem description
3
+ A common interface to multiple message queues libraries.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,37 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```ruby
22
+ MessageQueue.with_connection(:adapter => :bunny, :serializer => :message_pack) do |conn|
23
+ publisher = conn.new_publisher(
24
+ :exchange => {
25
+ :name => "time",
26
+ :type => :topic
27
+ },
28
+ :message => {
29
+ :routing_key => "time.now"
30
+ }
31
+ )
32
+
33
+ consumer = conn.new_consumer(
34
+ :queue => {
35
+ :name => "print_time_now"
36
+ },
37
+ :exchange => {
38
+ :name => "time",
39
+ :routing_key => "time.#"
40
+ }
41
+ )
42
+
43
+ consumer.subscribe do |delivery_info, metadata, payload|
44
+ puts "Received message: #{payload}"
45
+ end
46
+
47
+ publisher.publish Time.now.to_s
48
+
49
+ sleep 1
50
+ end
51
+ ```
22
52
 
23
53
  ## Contributing
24
54
 
data/Rakefile CHANGED
@@ -1 +1,37 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ #############################################################################
4
+ #
5
+ # Helper functions
6
+ #
7
+ #############################################################################
8
+
9
+ def name
10
+ @name ||= Dir['*.gemspec'].first.split('.').first
11
+ end
12
+
13
+ #############################################################################
14
+ #
15
+ # Standard tasks
16
+ #
17
+ #############################################################################
18
+
19
+ task :default => :test
20
+
21
+ require 'rake/testtask'
22
+ Rake::TestTask.new(:test) do |test|
23
+ test.libs << 'lib' << 'test'
24
+ test.pattern = 'test/**/*_test.rb'
25
+ test.verbose = true
26
+ end
27
+
28
+ desc "Open an irb session preloaded with this library"
29
+ task :console do
30
+ sh "irb -rubygems -r ./lib/#{name}.rb"
31
+ end
32
+
33
+ #############################################################################
34
+ #
35
+ # Custom tasks (add your own tasks here)
36
+ #
37
+ #############################################################################
@@ -0,0 +1,20 @@
1
+ require_relative "../lib/message_queue"
2
+
3
+ MessageQueue.with_connection(:adapter => :bunny, :serializer => :message_pack) do |conn|
4
+ consumer = conn.new_consumer(
5
+ :queue => {
6
+ :name => "print_time_now"
7
+ },
8
+ :exchange => {
9
+ :name => "time",
10
+ :routing_key => "time.#"
11
+ },
12
+ :subscribe => {
13
+ :block => true
14
+ }
15
+ )
16
+
17
+ consumer.subscribe do |delivery_info, metadata, payload|
18
+ puts "Received message: #{payload}"
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "../lib/message_queue"
2
+
3
+ MessageQueue.with_connection(:adapter => :bunny, :serializer => :message_pack) do |conn|
4
+ publisher = conn.new_publisher(
5
+ :exchange => {
6
+ :name => "time",
7
+ :type => :topic
8
+ },
9
+ :message => {
10
+ :routing_key => "time.now"
11
+ }
12
+ )
13
+
14
+ publisher.publish Time.now.to_s
15
+ end
data/lib/message_queue.rb CHANGED
@@ -1,5 +1,81 @@
1
1
  require "message_queue/version"
2
+ require "message_queue/adapter"
3
+ require "message_queue/serializer"
2
4
 
3
5
  module MessageQueue
4
- # Your code goes here...
6
+ extend self
7
+
8
+ ADAPTERS = [:bunny]
9
+ SERIALIZERS = [:plain, :message_pack]
10
+
11
+ # Public: Initialize a connection to a message queue.
12
+ #
13
+ # options - The Hash options used to initialize a connection
14
+ # :adapter - The Symbol adapter, currently only :bunny is supported.
15
+ # Detailed options see individual adapter implementation.
16
+ # :serializer - The Symbol serializer for serialization.
17
+ #
18
+ # Returns the connection for the specified message queue.
19
+ # Raises a RuntimeError if an adapter can't be found.
20
+ def new_connection(options = {})
21
+ adapter = load_adapter(options[:adapter])
22
+ raise "Missing adapter #{options[:adapter]}" unless adapter
23
+
24
+ serializer = load_serializer(options[:serializer])
25
+ raise "Missing serializer #{options[:serializer]}" unless serializer
26
+
27
+ adapter.new_connection(serializer, options)
28
+ end
29
+
30
+ # Public: Initialize a connection to a message queue, connect and execute code in a block.
31
+ #
32
+ # options - The Hash options used to initialize a connection
33
+ # :adapter - The Symbol adapter, currently only :bunny is supported.
34
+ # Detailed options see individual adapter implementation.
35
+ # :serializer - The Symbol serializer for serialization.
36
+ # block - The code to execute. The connection object with be passed in.
37
+ #
38
+ # Returns nothing
39
+ # Raises a RuntimeError if an adapter can't be found.
40
+ def with_connection(options = {}, &block)
41
+ connection = new_connection(options)
42
+ connection.with_connection(&block)
43
+ end
44
+
45
+ # Internal: Load an adapter by name
46
+ #
47
+ # Returns the adapter or nil if it can't find it
48
+ def load_adapter(name)
49
+ ADAPTERS.each do |a|
50
+ if a.to_s == name.to_s
51
+ require_relative "message_queue/adapters/#{name}"
52
+ klass_name = klass_name_for(name)
53
+ return MessageQueue::Adapters.const_get(klass_name)
54
+ end
55
+ end
56
+
57
+ nil
58
+ end
59
+
60
+ # Internal: Load a serializer by name
61
+ #
62
+ # Returns the serializer or nil if it can't find it
63
+ def load_serializer(name)
64
+ SERIALIZERS.each do |s|
65
+ if s.to_s == name.to_s
66
+ require_relative "message_queue/serializers/#{name}"
67
+ klass_name = klass_name_for(name)
68
+ return MessageQueue::Serializers.const_get(klass_name)
69
+ end
70
+ end
71
+
72
+ nil
73
+ end
74
+
75
+ # Internal: Return the class name for name
76
+ #
77
+ # Returns the class name for specified string
78
+ def klass_name_for(name)
79
+ name.to_s.split("_").map(&:capitalize) * ""
80
+ end
5
81
  end
@@ -0,0 +1,15 @@
1
+ require "singleton"
2
+
3
+ module MessageQueue
4
+ module Adapters
5
+ class Adapter
6
+ include Singleton
7
+
8
+ class << self
9
+ def new_connection(serializer, options = {})
10
+ instance.new_connection(serializer, options)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,21 @@
1
+ require "bunny"
2
+
3
+ module MessageQueue
4
+ module Adapters
5
+ class Bunny < Adapter
6
+ # Public: Initialize a RabbitMQ connection.
7
+ #
8
+ # options - The Hash options used to initialize a connection.
9
+ # :uri - The String URI described in http://rubybunny.info/articles/connecting.html.
10
+ #
11
+ # Returns MessageQueue::Adapters::Bunny::Connection if the options are valid.
12
+ # Raises ArgumentError when connection URI schema is not amqp or amqps, or the path contains multiple segments.
13
+ def new_connection(serializer, options = {})
14
+ settings = options[:uri] ? AMQ::Settings.parse_amqp_url(options[:uri]).merge(options) : options
15
+ Connection.new(serializer, settings)
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ require "message_queue/adapters/bunny/connection"
@@ -0,0 +1,64 @@
1
+ class MessageQueue::Adapters::Bunny::Connection
2
+ attr_reader :serializer, :settings, :connection
3
+
4
+ # Public: Initialize a new Bunny connection.
5
+ #
6
+ # serializer - The Serializer for dumping and loading payload.
7
+ #
8
+ # settings - The Hash settings used to connect with Bunny.
9
+ # Details in http://rubybunny.info/articles/connecting.html.
10
+ #
11
+ # Returns a Connection wrapper for Bunny.
12
+ def initialize(serializer, settings)
13
+ @serializer = serializer
14
+ @settings = settings
15
+ end
16
+
17
+ # Public: Connect to RabbitMQ
18
+ #
19
+ # Returns the Bunny instance
20
+ def connect
21
+ @connection ||= begin
22
+ bunny = ::Bunny.new(settings)
23
+ bunny.start
24
+ bunny
25
+ end
26
+ end
27
+
28
+ # Public: Disconnect from RabbitMQ
29
+ #
30
+ # Returns nothing
31
+ def disconnect
32
+ if @connection
33
+ @connection.close if @connection.open?
34
+ @connection = nil
35
+ end
36
+ end
37
+
38
+ # Public: Connect to RabbitMQ, execute the block and disconnect
39
+ #
40
+ # Returns nothing
41
+ def with_connection(&block)
42
+ begin
43
+ connect
44
+ block.call(self)
45
+ ensure
46
+ disconnect
47
+ end
48
+ end
49
+
50
+ def new_publisher(options)
51
+ raise "No connection to RabbitMQ" unless connection
52
+
53
+ Publisher.new(self, options)
54
+ end
55
+
56
+ def new_consumer(options)
57
+ raise "No connection to RabbitMQ" unless connection
58
+
59
+ Consumer.new(self, options)
60
+ end
61
+ end
62
+
63
+ require "message_queue/adapters/bunny/publisher"
64
+ require "message_queue/adapters/bunny/consumer"
@@ -0,0 +1,61 @@
1
+ class MessageQueue::Adapters::Bunny::Connection::Consumer
2
+ attr_reader :connection
3
+ attr_reader :queue_options, :queue_name
4
+ attr_reader :exchange_options, :exchange_name, :exchange_routing_key
5
+ attr_reader :subscribe_options
6
+
7
+ # Public: Initialize a new Bunny consumer.
8
+ #
9
+ # connection - The Bunny Connection.
10
+ # options - The Hash options used to initialize the exchange
11
+ # of a consumer:
12
+ # :queue -
13
+ # :name - The String queue name.
14
+ # :durable - The Boolean queue durability.
15
+ # :exchange -
16
+ # :name - The String exchange name.
17
+ # :routing_key - The String exchange routing key.
18
+ # :subscribe -
19
+ # :ack - The Boolean indicate if it acks.
20
+ # :block - The Boolean indicate if it blocks.
21
+ # Detailed options see
22
+ # https://github.com/ruby-amqp/bunny/blob/master/lib/bunny/queue.rb
23
+ # and
24
+ # https://github.com/ruby-amqp/bunny/blob/master/lib/bunny/exchange.rb.
25
+ #
26
+ # Returns a Consumer.
27
+ def initialize(connection, options = {})
28
+ @connection = connection
29
+
30
+ options = options.dup
31
+
32
+ @queue_options = options.fetch(:queue)
33
+ @queue_name = queue_options.delete(:name) || (raise "Missing queue name")
34
+
35
+ @exchange_options = options.fetch(:exchange)
36
+ @exchange_name = exchange_options.delete(:name) || (raise "Missing exchange name")
37
+ @exchange_routing_key = exchange_options.delete(:routing_key) || queue_name
38
+
39
+ @subscribe_options = options.fetch(:subscribe, {})
40
+ end
41
+
42
+ def subscribe(options = {}, &block)
43
+ @subscription = queue.subscribe(subscribe_options.merge(options)) do |delivery_info, metadata, payload|
44
+ block.call(delivery_info, metadata, connection.serializer.load(payload))
45
+ end
46
+ end
47
+
48
+ def unsubscribe
49
+ @subscription.cancel if @subscription
50
+ end
51
+
52
+ def queue
53
+ @queue ||= channel.queue(queue_name, queue_options).bind(exchange_name, :routing_key => exchange_routing_key)
54
+ end
55
+
56
+ private
57
+
58
+ def channel
59
+ connection.connection.create_channel
60
+ end
61
+ end
@@ -0,0 +1,40 @@
1
+ class MessageQueue::Adapters::Bunny::Connection::Publisher
2
+ attr_reader :connection, :exchange
3
+ attr_reader :exchange_options, :exchange_name, :exchange_type
4
+ attr_reader :message_options
5
+
6
+ # Public: Initialize a new Bunny publisher.
7
+ #
8
+ # connection - The Bunny Connection.
9
+ # options - The Hash options used to initialize the exchange
10
+ # of a publisher:
11
+ # :exchange -
12
+ # :name - The String exchange name.
13
+ # :type - The Symbol exchange type.
14
+ # :durable - The Boolean exchange durability.
15
+ # :message -
16
+ # :routing_key - The String message routing key.
17
+ # :persistent - The Boolean indicate if the
18
+ # message persisted to disk .
19
+ # Detailed options see
20
+ # https://github.com/ruby-amqp/bunny/blob/master/lib/bunny/exchange.rb.
21
+ #
22
+ # Returns a Publisher.
23
+ def initialize(connection, options = {})
24
+ @connection = connection
25
+
26
+ options = options.dup
27
+
28
+ @exchange_options = options.fetch(:exchange)
29
+ @exchange_name = exchange_options.delete(:name) || (raise "Missing exchange name")
30
+ @exchange_type = exchange_options.delete(:type) || (raise "Missing exchange type")
31
+
32
+ @message_options = options.fetch(:message)
33
+
34
+ @exchange = connection.connection.default_channel.send(exchange_type, exchange_name, exchange_options)
35
+ end
36
+
37
+ def publish(payload, options = {})
38
+ exchange.publish(connection.serializer.dump(payload), message_options.merge(options))
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ require "singleton"
2
+
3
+ module MessageQueue
4
+ module Serializers
5
+ class Serializer
6
+ include Singleton
7
+
8
+ class << self
9
+ def load(string, options = {})
10
+ instance.load(string, options)
11
+ end
12
+
13
+ def dump(object, options = {})
14
+ instance.dump(object, options)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ require "msgpack"
2
+
3
+ module MessageQueue
4
+ module Serializers
5
+ class MessagePack < Serializer
6
+ def load(string, options = {})
7
+ ::MessagePack.unpack(string)
8
+ end
9
+
10
+ def dump(object, options = {})
11
+ ::MessagePack.pack(object)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module MessageQueue
2
+ module Serializers
3
+ class Plain < Serializer
4
+ def load(string, options = {})
5
+ string
6
+ end
7
+
8
+ def dump(object, options = {})
9
+ object
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module MessageQueue
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -8,9 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.version = MessageQueue::VERSION
9
9
  spec.authors = ["Jingwen Owen Ou"]
10
10
  spec.email = ["jingweno@gmail.com"]
11
- spec.description = %q{A command interface to multiple message queues libraries.}
12
- spec.summary = %q{A command interface to multiple message queues libraries.}
13
- spec.homepage = ""
11
+ spec.description = %q{A common interface to multiple message queues libraries.}
12
+ spec.summary = %q{A common interface to multiple message queues libraries.}
13
+ spec.homepage = "https://github.com/jingweno/message_queue"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -18,6 +18,5 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
21
  spec.add_development_dependency "rake"
23
22
  end
@@ -0,0 +1,82 @@
1
+ require_relative "../test_helper"
2
+ require_relative "../../lib/message_queue/serializers/plain"
3
+ require_relative "../../lib/message_queue/adapters/bunny"
4
+
5
+ class BunnyTest < Test::Unit::TestCase
6
+ def test_new_connection
7
+ connection = MessageQueue::Adapters::Bunny.new_connection(
8
+ MessageQueue::Serializers::Plain,
9
+ :uri => "amqp://user:pass@host/vhost",
10
+ :tls_certificates => ["path"])
11
+ assert_equal "amqp", connection.settings[:scheme]
12
+ assert_equal ["path"], connection.settings[:tls_certificates]
13
+
14
+ connection = MessageQueue::Adapters::Bunny.new_connection MessageQueue::Serializers::Plain
15
+ bunny = connection.connect
16
+ assert bunny.open?
17
+
18
+ connection.disconnect
19
+ assert bunny.closed?
20
+ end
21
+
22
+ def test_new_publisher
23
+ connection = MessageQueue::Adapters::Bunny.new_connection MessageQueue::Serializers::Plain
24
+ connection.with_connection do |conn|
25
+ publisher = conn.new_publisher(
26
+ :exchange => {
27
+ :name => "test",
28
+ :type => :direct
29
+ },
30
+ :message => {
31
+ :routing_key => "test"
32
+ }
33
+ )
34
+
35
+ assert_equal "test", publisher.exchange_name
36
+ assert_equal :direct, publisher.exchange_type
37
+ assert_equal "test", publisher.message_options[:routing_key]
38
+
39
+ msg = Time.now.to_s
40
+ publisher.publish msg
41
+
42
+ ch = connection.connection.create_channel
43
+ queue = ch.queue("test")
44
+ _, _, m = queue.pop
45
+
46
+ assert_equal msg, m
47
+ end
48
+ end
49
+
50
+ def test_new_consumer
51
+ connection = MessageQueue::Adapters::Bunny.new_connection MessageQueue::Serializers::Plain
52
+ connection.with_connection do |conn|
53
+ consumer = conn.new_consumer(
54
+ :queue => {
55
+ :name => "test"
56
+ },
57
+ :exchange => {
58
+ :name => "test"
59
+ }
60
+ )
61
+
62
+ assert_equal "test", consumer.queue_name
63
+ assert_equal "test", consumer.exchange_name
64
+
65
+ publisher = conn.new_publisher(
66
+ :exchange => {
67
+ :name => "test",
68
+ :type => :direct
69
+ },
70
+ :message => {
71
+ :routing_key => "test"
72
+ }
73
+ )
74
+
75
+ msg = Time.now.to_s
76
+ publisher.publish msg
77
+
78
+ _, _, m = consumer.queue.pop
79
+ assert_equal msg, m
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,30 @@
1
+ require_relative "test_helper"
2
+
3
+ class MessageQueueTest < Test::Unit::TestCase
4
+ def test_load_adapter
5
+ adapter = MessageQueue.load_adapter(:bunny)
6
+ assert_equal "MessageQueue::Adapters::Bunny", adapter.name
7
+
8
+ adapter = MessageQueue.load_adapter(:foo)
9
+ assert_nil adapter
10
+ end
11
+
12
+ def test_load_serializer
13
+ serializer = MessageQueue.load_serializer(:message_pack)
14
+ assert_equal "MessageQueue::Serializers::MessagePack", serializer.name
15
+
16
+ serializer = MessageQueue.load_serializer(:foo)
17
+ assert_nil serializer
18
+ end
19
+
20
+ def test_new_connection
21
+ assert_raises RuntimeError do
22
+ MessageQueue.new_connection(:adapter => :foo)
23
+ end
24
+
25
+ connection = MessageQueue.new_connection(:adapter => :bunny,
26
+ :serializer => :message_pack,
27
+ :uri => "amqp://user:pass@host/vhost")
28
+ assert_equal "MessageQueue::Adapters::Bunny::Connection", connection.class.to_s
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ require_relative "../test_helper"
2
+ require_relative "../../lib/message_queue/serializers/message_pack"
3
+
4
+ class MessagePackTest < Test::Unit::TestCase
5
+ def test_dump_and_load
6
+ dump = MessageQueue::Serializers::MessagePack.dump "foo" => "bar"
7
+ loaded = MessageQueue::Serializers::MessagePack.load dump
8
+ assert_equal "bar", loaded["foo"]
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require_relative "../test_helper"
2
+ require_relative "../../lib/message_queue/serializers/plain"
3
+
4
+ class PlainTest < Test::Unit::TestCase
5
+ def test_dump_and_load
6
+ dump = MessageQueue::Serializers::Plain.dump "foo" => "bar"
7
+ loaded = MessageQueue::Serializers::Plain.load dump
8
+ assert_equal "bar", loaded["foo"]
9
+ end
10
+ end
@@ -0,0 +1,2 @@
1
+ adapter: bunny
2
+ url: amqp://user:pass@host/vhost
@@ -0,0 +1,2 @@
1
+ require "test/unit"
2
+ require_relative "../lib/message_queue"
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: message_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jingwen Owen Ou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-23 00:00:00.000000000 Z
11
+ date: 2013-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +24,7 @@ dependencies:
38
24
  - - '>='
39
25
  - !ruby/object:Gem::Version
40
26
  version: '0'
41
- description: A command interface to multiple message queues libraries.
27
+ description: A common interface to multiple message queues libraries.
42
28
  email:
43
29
  - jingweno@gmail.com
44
30
  executables: []
@@ -50,10 +36,26 @@ files:
50
36
  - LICENSE.txt
51
37
  - README.md
52
38
  - Rakefile
39
+ - examples/consumer.rb
40
+ - examples/publisher.rb
53
41
  - lib/message_queue.rb
42
+ - lib/message_queue/adapter.rb
43
+ - lib/message_queue/adapters/bunny.rb
44
+ - lib/message_queue/adapters/bunny/connection.rb
45
+ - lib/message_queue/adapters/bunny/consumer.rb
46
+ - lib/message_queue/adapters/bunny/publisher.rb
47
+ - lib/message_queue/serializer.rb
48
+ - lib/message_queue/serializers/message_pack.rb
49
+ - lib/message_queue/serializers/plain.rb
54
50
  - lib/message_queue/version.rb
55
51
  - message_queue.gemspec
56
- homepage: ''
52
+ - test/adapters/bunny_test.rb
53
+ - test/message_queue_test.rb
54
+ - test/serializers/message_pack_test.rb
55
+ - test/serializers/plain_test.rb
56
+ - test/support/message_queue.yml
57
+ - test/test_helper.rb
58
+ homepage: https://github.com/jingweno/message_queue
57
59
  licenses:
58
60
  - MIT
59
61
  metadata: {}
@@ -76,5 +78,11 @@ rubyforge_project:
76
78
  rubygems_version: 2.0.3
77
79
  signing_key:
78
80
  specification_version: 4
79
- summary: A command interface to multiple message queues libraries.
80
- test_files: []
81
+ summary: A common interface to multiple message queues libraries.
82
+ test_files:
83
+ - test/adapters/bunny_test.rb
84
+ - test/message_queue_test.rb
85
+ - test/serializers/message_pack_test.rb
86
+ - test/serializers/plain_test.rb
87
+ - test/support/message_queue.yml
88
+ - test/test_helper.rb