rosetta_queue 0.4.0
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.
- data/History.txt +38 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +11 -0
- data/Rakefile +39 -0
- data/VERSION.yml +4 -0
- data/cucumber.yml +1 -0
- data/examples/sample_amqp_consumer.rb +45 -0
- data/examples/sample_amqp_fanout_consumer.rb +52 -0
- data/examples/sample_amqp_fanout_producer.rb +18 -0
- data/examples/sample_amqp_producer.rb +16 -0
- data/features/filtering.feature +31 -0
- data/features/messaging.feature +48 -0
- data/features/step_definitions/common_messaging_steps.rb +82 -0
- data/features/step_definitions/filtering_steps.rb +17 -0
- data/features/step_definitions/point_to_point_steps.rb +22 -0
- data/features/step_definitions/publish_subscribe_steps.rb +25 -0
- data/features/support/env.rb +25 -0
- data/features/support/sample_consumers.rb +29 -0
- data/lib/rosetta_queue.rb +23 -0
- data/lib/rosetta_queue/adapter.rb +39 -0
- data/lib/rosetta_queue/adapters/amqp.rb +48 -0
- data/lib/rosetta_queue/adapters/amqp_evented.rb +132 -0
- data/lib/rosetta_queue/adapters/amqp_synch.rb +123 -0
- data/lib/rosetta_queue/adapters/base.rb +27 -0
- data/lib/rosetta_queue/adapters/beanstalk.rb +56 -0
- data/lib/rosetta_queue/adapters/fake.rb +26 -0
- data/lib/rosetta_queue/adapters/null.rb +57 -0
- data/lib/rosetta_queue/adapters/stomp.rb +88 -0
- data/lib/rosetta_queue/base.rb +15 -0
- data/lib/rosetta_queue/consumer.rb +30 -0
- data/lib/rosetta_queue/consumer_managers/base.rb +24 -0
- data/lib/rosetta_queue/consumer_managers/evented.rb +43 -0
- data/lib/rosetta_queue/consumer_managers/threaded.rb +94 -0
- data/lib/rosetta_queue/core_ext/string.rb +22 -0
- data/lib/rosetta_queue/core_ext/time.rb +20 -0
- data/lib/rosetta_queue/destinations.rb +33 -0
- data/lib/rosetta_queue/exception_handler.rb +105 -0
- data/lib/rosetta_queue/exceptions.rb +10 -0
- data/lib/rosetta_queue/filters.rb +58 -0
- data/lib/rosetta_queue/logger.rb +27 -0
- data/lib/rosetta_queue/message_handler.rb +52 -0
- data/lib/rosetta_queue/producer.rb +21 -0
- data/lib/rosetta_queue/spec_helpers.rb +5 -0
- data/lib/rosetta_queue/spec_helpers/hash.rb +21 -0
- data/lib/rosetta_queue/spec_helpers/helpers.rb +47 -0
- data/lib/rosetta_queue/spec_helpers/publishing_matchers.rb +144 -0
- data/spec/rosetta_queue/adapter_spec.rb +101 -0
- data/spec/rosetta_queue/adapters/amqp_synchronous_spec.rb +277 -0
- data/spec/rosetta_queue/adapters/beanstalk_spec.rb +47 -0
- data/spec/rosetta_queue/adapters/fake_spec.rb +72 -0
- data/spec/rosetta_queue/adapters/null_spec.rb +31 -0
- data/spec/rosetta_queue/adapters/shared_adapter_behavior.rb +38 -0
- data/spec/rosetta_queue/adapters/shared_fanout_behavior.rb +20 -0
- data/spec/rosetta_queue/adapters/stomp_spec.rb +126 -0
- data/spec/rosetta_queue/consumer_managers/evented_spec.rb +56 -0
- data/spec/rosetta_queue/consumer_managers/shared_manager_behavior.rb +26 -0
- data/spec/rosetta_queue/consumer_managers/threaded_spec.rb +51 -0
- data/spec/rosetta_queue/consumer_spec.rb +99 -0
- data/spec/rosetta_queue/core_ext/string_spec.rb +15 -0
- data/spec/rosetta_queue/destinations_spec.rb +34 -0
- data/spec/rosetta_queue/exception_handler_spec.rb +106 -0
- data/spec/rosetta_queue/filters_spec.rb +57 -0
- data/spec/rosetta_queue/message_handler_spec.rb +47 -0
- data/spec/rosetta_queue/producer_spec.rb +77 -0
- data/spec/rosetta_queue/shared_messaging_behavior.rb +21 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +47 -0
- metadata +142 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
describe "#camelize" do
|
5
|
+
it "should have code examples"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "#classify" do
|
9
|
+
it "should have code examples"
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#underscore" do
|
13
|
+
it "should have code examples"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RosettaQueue
|
4
|
+
|
5
|
+
describe Destinations do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
Destinations.clear
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:each) do
|
12
|
+
Destinations.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should map destination to hash" do
|
16
|
+
|
17
|
+
Destinations.define do |queue|
|
18
|
+
queue.map :test_queue, "/queue/test_queue"
|
19
|
+
end
|
20
|
+
|
21
|
+
Destinations.lookup(:test_queue).should == "/queue/test_queue"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "#queue_names should return an array of the actuual queue names" do
|
25
|
+
Destinations.define do |queue|
|
26
|
+
queue.map :foo, "/queue/foo"
|
27
|
+
queue.map :bar, "/queue/bar"
|
28
|
+
end
|
29
|
+
|
30
|
+
Destinations.queue_names.should include("/queue/foo")
|
31
|
+
Destinations.queue_names.should include("/queue/bar")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RosettaQueue
|
4
|
+
|
5
|
+
describe ExceptionHandler do
|
6
|
+
|
7
|
+
after(:each) do
|
8
|
+
ExceptionHandler.reset_handlers
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
describe "::handle" do
|
13
|
+
it "runs the given block returning the block's return value" do
|
14
|
+
ExceptionHandler::handle do
|
15
|
+
"foo"
|
16
|
+
end.should == "foo"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "delegates raised exceptions to each related registered handler" do
|
20
|
+
# given
|
21
|
+
ExceptionHandler::register(:consuming, registered_handler = mock('exception handling'))
|
22
|
+
ExceptionHandler::register(:consuming, registered_handler2 = mock('exception handling'))
|
23
|
+
exception = StandardError.new
|
24
|
+
# expect
|
25
|
+
registered_handler.should_receive(:handle).with(exception, anything)
|
26
|
+
registered_handler2.should_receive(:handle).with(exception, anything)
|
27
|
+
# when
|
28
|
+
ExceptionHandler::handle(:consuming) do
|
29
|
+
raise exception
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "does not delegate raised exceptions to unrelated handlers" do
|
34
|
+
# given
|
35
|
+
ExceptionHandler::register(:consuming, consuming_handler = mock('consumner handling'))
|
36
|
+
ExceptionHandler::register(:publishing, publishing_handler = mock('publishing handling'))
|
37
|
+
exception = StandardError.new
|
38
|
+
# expect
|
39
|
+
consuming_handler.should_receive(:handle).with(exception, anything)
|
40
|
+
publishing_handler.should_not_receive(:handle)
|
41
|
+
# when
|
42
|
+
ExceptionHandler::handle(:consuming) do
|
43
|
+
raise exception
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "delegates all types of messaging exceptions to handlers registered under ':all'" do
|
48
|
+
# given
|
49
|
+
ExceptionHandler::register(:all, messaging_handler = mock('global message exception handling'))
|
50
|
+
exception = StandardError.new
|
51
|
+
# expect
|
52
|
+
messaging_handler.should_receive(:handle).with(exception, anything).twice
|
53
|
+
# when
|
54
|
+
ExceptionHandler::handle(:consuming) { raise exception }
|
55
|
+
ExceptionHandler::handle(:publishing) { raise exception }
|
56
|
+
end
|
57
|
+
|
58
|
+
it "passes any additional information (in form of a hash) to the registered handlers" do
|
59
|
+
# given
|
60
|
+
ExceptionHandler::register(:all, messaging_handler = mock('global message exception handling'))
|
61
|
+
info_hash = {:message => "this caused failure", :foo => "bar"}
|
62
|
+
# expect
|
63
|
+
messaging_handler.should_receive(:handle).with(anything, info_hash)
|
64
|
+
# when
|
65
|
+
ExceptionHandler::handle(:consuming, info_hash) { raise "FAIL" }
|
66
|
+
end
|
67
|
+
|
68
|
+
it "accepts a lambda for info and will pass it's evaluation along to the registered handlers" do
|
69
|
+
# given
|
70
|
+
ExceptionHandler::register(:all, messaging_handler = mock('global message exception handling'))
|
71
|
+
info_hash = {:message => "this caused failure", :foo => "bar"}
|
72
|
+
# expect
|
73
|
+
messaging_handler.should_receive(:handle).with(anything, info_hash)
|
74
|
+
# when
|
75
|
+
ExceptionHandler::handle(:consuming, lambda { info_hash }) { raise "FAIL" }
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
it "reraises the error when no handlers have been registed for the given action" do
|
81
|
+
ExceptionHandler::register(:consuming, consuming_handler = mock('consumner handling'))
|
82
|
+
running do
|
83
|
+
ExceptionHandler::handle(:publishing, {}) { raise "Foo" }
|
84
|
+
end.should raise_error(RuntimeError)
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "::register" do
|
91
|
+
# see the examples for ::handle as well- since they are related.
|
92
|
+
|
93
|
+
it "takes an exception handling block in place of a class" do
|
94
|
+
# given
|
95
|
+
ExceptionHandler::register(:all) do |exception, info|
|
96
|
+
RosettaQueue.logger.error "whoops"
|
97
|
+
end
|
98
|
+
# expect
|
99
|
+
RosettaQueue.logger.should_receive(:error).with("whoops")
|
100
|
+
# when
|
101
|
+
ExceptionHandler::handle(:consuming) { raise "FAIL" }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RosettaQueue
|
4
|
+
|
5
|
+
describe Filters do
|
6
|
+
|
7
|
+
after(:each) do
|
8
|
+
Filters.reset
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#process_receiving" do
|
12
|
+
it "should process the passed in message with the defined receiving filter" do
|
13
|
+
Filters.define do |f|
|
14
|
+
f.receiving {|message| "Foo #{message}"}
|
15
|
+
end
|
16
|
+
|
17
|
+
Filters.process_receiving("Bar").should == "Foo Bar"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return the same message when no filter is defined" do
|
21
|
+
Filters.process_receiving("Bar").should == "Bar"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
['sending', 'receiving'].each do |action|
|
26
|
+
describe "#safe_process_#{action}" do
|
27
|
+
it "returns the orginal message if an exception occurs while filtering" do
|
28
|
+
Filters.define do |f|
|
29
|
+
f.send(action) { |message| raise "foo" }
|
30
|
+
end
|
31
|
+
|
32
|
+
Filters.send("safe_process_#{action}", "Bar").should == "Bar"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
describe "#process_sending" do
|
40
|
+
it "should process the passed in message with the defined sending filter" do
|
41
|
+
Filters.define do |f|
|
42
|
+
f.sending {|message| "Foo #{message}"}
|
43
|
+
end
|
44
|
+
|
45
|
+
Filters.process_sending("Bar").should == "Foo Bar"
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return the same message when no filter is defined" do
|
49
|
+
Filters.process_sending("Bar").should == "Bar"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RosettaQueue
|
4
|
+
|
5
|
+
class SimplerHandler
|
6
|
+
include MessageHandler
|
7
|
+
subscribes_to :test_queue
|
8
|
+
options :my => 'options'
|
9
|
+
|
10
|
+
def on_message(filtered_message)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe MessageHandler do
|
15
|
+
before(:each) do
|
16
|
+
Filters.stub!(:safe_process_receiving => 'safely processed message')
|
17
|
+
@message_handler = SimplerHandler.new
|
18
|
+
Destinations.stub!(:lookup).and_return("/queue/test_queue")
|
19
|
+
ExceptionHandler.stub!(:handle).and_yield
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#handle_message" do
|
23
|
+
it "calls the ExceptionHandler for :publishing" do
|
24
|
+
ExceptionHandler.should_receive(:handle).with(:publishing, anything)
|
25
|
+
@message_handler.handle_message("foo")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "filters the message" do
|
29
|
+
Filters.should_receive(:process_receiving).with("hello")
|
30
|
+
@message_handler.handle_message("hello")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "provides additional message information to the ExceptionHandler" do
|
34
|
+
ExceptionHandler.should_receive(:handle).with do |_, hash_proc|
|
35
|
+
hash_proc.call.should == {
|
36
|
+
:message => "safely processed message",
|
37
|
+
:action => :consuming,
|
38
|
+
:destination => :test_queue,
|
39
|
+
:options => {:my => 'options'}}
|
40
|
+
end
|
41
|
+
@message_handler.handle_message("message")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
module RosettaQueue
|
4
|
+
|
5
|
+
class TestProducer < Producer
|
6
|
+
|
7
|
+
publishes_to :test_queue
|
8
|
+
options :persistent => false
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Producer do
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
@adapter = mock("adapter", :send_message => nil)
|
16
|
+
RosettaQueue::Adapter.stub!(:instance).and_return(@adapter)
|
17
|
+
@gateway = TestProducer.new
|
18
|
+
|
19
|
+
Destinations.stub!(:lookup).and_return("/queue/test_queue")
|
20
|
+
end
|
21
|
+
|
22
|
+
it_should_behave_like "a messaging gateway object"
|
23
|
+
attr_reader :adapter, :gateway
|
24
|
+
|
25
|
+
|
26
|
+
describe "#publish" do
|
27
|
+
|
28
|
+
before(:each) do
|
29
|
+
@adapter = mock("adpater", :send_message => nil)
|
30
|
+
RosettaQueue::Adapter.stub!(:instance).and_return(@adapter)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should publish messages to queue with the options defined in the class" do
|
34
|
+
# TO DO: REFACTOR #publish METHOD SO THAT YOU PASS IN MESSAGE HANDLER AS WITH CONSUMER
|
35
|
+
pending
|
36
|
+
# expect
|
37
|
+
@adapter.should_receive(:send_message).with("/queue/test_queue", "Hello World!", {:persistent => false})
|
38
|
+
# when
|
39
|
+
@gateway.publish("Hello World!")
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
describe ".publish" do
|
45
|
+
it "should send the message to the adpater along with the options" do
|
46
|
+
# expect
|
47
|
+
@adapter.should_receive(:send_message).with("/queue/test_queue", "Hello World!", {:persistent => true})
|
48
|
+
# when
|
49
|
+
Producer.publish(:test_queue, "Hello World!", {:persistent => true})
|
50
|
+
end
|
51
|
+
|
52
|
+
it "delgates exception handling to the ExceptionHandler for :publishing" do
|
53
|
+
ExceptionHandler.should_receive(:handle).with(:publishing, anything)
|
54
|
+
Producer.publish(:test_queue, "Hello World!", {:persistent => true})
|
55
|
+
end
|
56
|
+
|
57
|
+
it "wraps the publishing in an ExceptionHandler::handler block" do
|
58
|
+
@adapter.should_not_receive(:send_message)
|
59
|
+
ExceptionHandler.stub!(:handle).and_return("I was wrapped")
|
60
|
+
Producer.publish(:test_queue, "m").should == "I was wrapped"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "provides additional message information to the ExceptionHandler" do
|
64
|
+
ExceptionHandler.should_receive(:handle).with do |_, hash_proc|
|
65
|
+
hash_proc.call.should == {
|
66
|
+
:message => "message",
|
67
|
+
:action => :publishing,
|
68
|
+
:destination => :test_queue,
|
69
|
+
:options => {:persistent => true}}
|
70
|
+
end
|
71
|
+
Producer.publish(:test_queue, "message", {:persistent => true})
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module RosettaQueue
|
2
|
+
|
3
|
+
describe "a messaging gateway object", :shared => true do
|
4
|
+
|
5
|
+
it "#unsubscribe should be delegated to the adapter" do
|
6
|
+
pending
|
7
|
+
# expect
|
8
|
+
adapter.should_receive("unsubscribe")
|
9
|
+
# when
|
10
|
+
gateway.unsubscribe
|
11
|
+
end
|
12
|
+
|
13
|
+
it "#disconnect should be delegated to the adapter" do
|
14
|
+
# expect
|
15
|
+
adapter.should_receive("disconnect")
|
16
|
+
# when
|
17
|
+
gateway.disconnect
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
ENV["MESSAGING_ENV"] = "test"
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'spec'
|
5
|
+
require 'ruby-debug'
|
6
|
+
|
7
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
8
|
+
require 'rosetta_queue'
|
9
|
+
require 'rosetta_queue/adapters/null'
|
10
|
+
require 'rosetta_queue/adapters/fake'
|
11
|
+
require 'rosetta_queue/adapters/stomp'
|
12
|
+
require 'rosetta_queue/adapters/amqp'
|
13
|
+
require 'rosetta_queue/consumer_managers/base'
|
14
|
+
require 'rosetta_queue/consumer_managers/evented'
|
15
|
+
require 'rosetta_queue/consumer_managers/threaded'
|
16
|
+
require 'rosetta_queue/spec_helpers'
|
17
|
+
require 'rosetta_queue/consumer_managers/base'
|
18
|
+
require 'rosetta_queue/consumer_managers/evented'
|
19
|
+
require 'rosetta_queue/consumer_managers/threaded'
|
20
|
+
require File.dirname(__FILE__) + '/rosetta_queue/shared_messaging_behavior.rb'
|
21
|
+
|
22
|
+
class NullLogger
|
23
|
+
def info(*args); end
|
24
|
+
def debug(*args); end
|
25
|
+
def fatal(*args); end
|
26
|
+
def error(*args); end
|
27
|
+
def warn(*args); end
|
28
|
+
end
|
29
|
+
|
30
|
+
RosettaQueue.logger = NullLogger.new
|
31
|
+
|
32
|
+
alias :running :lambda
|
33
|
+
|
34
|
+
[:process, :receiving_with_handler, :receiving_once, :publishing, :disconnecting, :receiving_single_exchange, :receiving_exchange, :receiving].each do |action|
|
35
|
+
eval %Q{
|
36
|
+
def before_#{action}
|
37
|
+
yield
|
38
|
+
do_#{action}
|
39
|
+
end
|
40
|
+
alias during_#{action} before_#{action}
|
41
|
+
alias when_#{action} before_#{action}
|
42
|
+
def after_#{action}
|
43
|
+
do_#{action}
|
44
|
+
yield
|
45
|
+
end
|
46
|
+
}
|
47
|
+
end
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rosetta_queue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ben Mabey
|
8
|
+
- Chris Wyckoff
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2009-09-28 00:00:00 -06:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: Messaging gateway API with adapters for many messaging systems available in Ruby. Messaging systems can be easily switched out with a small configuration change. Code for testing on the object and application level is also provided.
|
18
|
+
email: cbwyckoff@gmail.com
|
19
|
+
executables: []
|
20
|
+
|
21
|
+
extensions: []
|
22
|
+
|
23
|
+
extra_rdoc_files:
|
24
|
+
- MIT-LICENSE.txt
|
25
|
+
- README.rdoc
|
26
|
+
files:
|
27
|
+
- History.txt
|
28
|
+
- MIT-LICENSE.txt
|
29
|
+
- README.rdoc
|
30
|
+
- Rakefile
|
31
|
+
- VERSION.yml
|
32
|
+
- cucumber.yml
|
33
|
+
- features/filtering.feature
|
34
|
+
- features/messaging.feature
|
35
|
+
- features/step_definitions/common_messaging_steps.rb
|
36
|
+
- features/step_definitions/filtering_steps.rb
|
37
|
+
- features/step_definitions/point_to_point_steps.rb
|
38
|
+
- features/step_definitions/publish_subscribe_steps.rb
|
39
|
+
- features/support/env.rb
|
40
|
+
- features/support/sample_consumers.rb
|
41
|
+
- lib/rosetta_queue.rb
|
42
|
+
- lib/rosetta_queue/adapter.rb
|
43
|
+
- lib/rosetta_queue/adapters/amqp.rb
|
44
|
+
- lib/rosetta_queue/adapters/amqp_evented.rb
|
45
|
+
- lib/rosetta_queue/adapters/amqp_synch.rb
|
46
|
+
- lib/rosetta_queue/adapters/base.rb
|
47
|
+
- lib/rosetta_queue/adapters/beanstalk.rb
|
48
|
+
- lib/rosetta_queue/adapters/fake.rb
|
49
|
+
- lib/rosetta_queue/adapters/null.rb
|
50
|
+
- lib/rosetta_queue/adapters/stomp.rb
|
51
|
+
- lib/rosetta_queue/base.rb
|
52
|
+
- lib/rosetta_queue/consumer.rb
|
53
|
+
- lib/rosetta_queue/consumer_managers/base.rb
|
54
|
+
- lib/rosetta_queue/consumer_managers/evented.rb
|
55
|
+
- lib/rosetta_queue/consumer_managers/threaded.rb
|
56
|
+
- lib/rosetta_queue/core_ext/string.rb
|
57
|
+
- lib/rosetta_queue/core_ext/time.rb
|
58
|
+
- lib/rosetta_queue/destinations.rb
|
59
|
+
- lib/rosetta_queue/exception_handler.rb
|
60
|
+
- lib/rosetta_queue/exceptions.rb
|
61
|
+
- lib/rosetta_queue/filters.rb
|
62
|
+
- lib/rosetta_queue/logger.rb
|
63
|
+
- lib/rosetta_queue/message_handler.rb
|
64
|
+
- lib/rosetta_queue/producer.rb
|
65
|
+
- lib/rosetta_queue/spec_helpers.rb
|
66
|
+
- lib/rosetta_queue/spec_helpers/hash.rb
|
67
|
+
- lib/rosetta_queue/spec_helpers/helpers.rb
|
68
|
+
- lib/rosetta_queue/spec_helpers/publishing_matchers.rb
|
69
|
+
- spec/rosetta_queue/adapter_spec.rb
|
70
|
+
- spec/rosetta_queue/adapters/amqp_synchronous_spec.rb
|
71
|
+
- spec/rosetta_queue/adapters/beanstalk_spec.rb
|
72
|
+
- spec/rosetta_queue/adapters/fake_spec.rb
|
73
|
+
- spec/rosetta_queue/adapters/null_spec.rb
|
74
|
+
- spec/rosetta_queue/adapters/shared_adapter_behavior.rb
|
75
|
+
- spec/rosetta_queue/adapters/shared_fanout_behavior.rb
|
76
|
+
- spec/rosetta_queue/adapters/stomp_spec.rb
|
77
|
+
- spec/rosetta_queue/consumer_managers/evented_spec.rb
|
78
|
+
- spec/rosetta_queue/consumer_managers/shared_manager_behavior.rb
|
79
|
+
- spec/rosetta_queue/consumer_managers/threaded_spec.rb
|
80
|
+
- spec/rosetta_queue/consumer_spec.rb
|
81
|
+
- spec/rosetta_queue/core_ext/string_spec.rb
|
82
|
+
- spec/rosetta_queue/destinations_spec.rb
|
83
|
+
- spec/rosetta_queue/exception_handler_spec.rb
|
84
|
+
- spec/rosetta_queue/filters_spec.rb
|
85
|
+
- spec/rosetta_queue/message_handler_spec.rb
|
86
|
+
- spec/rosetta_queue/producer_spec.rb
|
87
|
+
- spec/rosetta_queue/shared_messaging_behavior.rb
|
88
|
+
- spec/spec.opts
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
has_rdoc: true
|
91
|
+
homepage: http://github.com/cwyckoff/rosetta_queue
|
92
|
+
licenses: []
|
93
|
+
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options:
|
96
|
+
- --charset=UTF-8
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: "0"
|
104
|
+
version:
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: "0"
|
110
|
+
version:
|
111
|
+
requirements: []
|
112
|
+
|
113
|
+
rubyforge_project: rosetta-queue
|
114
|
+
rubygems_version: 1.3.3
|
115
|
+
signing_key:
|
116
|
+
specification_version: 3
|
117
|
+
summary: Messaging gateway API with adapters for many messaging systems available in Ruby.
|
118
|
+
test_files:
|
119
|
+
- spec/rosetta_queue/adapter_spec.rb
|
120
|
+
- spec/rosetta_queue/adapters/amqp_synchronous_spec.rb
|
121
|
+
- spec/rosetta_queue/adapters/beanstalk_spec.rb
|
122
|
+
- spec/rosetta_queue/adapters/fake_spec.rb
|
123
|
+
- spec/rosetta_queue/adapters/null_spec.rb
|
124
|
+
- spec/rosetta_queue/adapters/shared_adapter_behavior.rb
|
125
|
+
- spec/rosetta_queue/adapters/shared_fanout_behavior.rb
|
126
|
+
- spec/rosetta_queue/adapters/stomp_spec.rb
|
127
|
+
- spec/rosetta_queue/consumer_managers/evented_spec.rb
|
128
|
+
- spec/rosetta_queue/consumer_managers/shared_manager_behavior.rb
|
129
|
+
- spec/rosetta_queue/consumer_managers/threaded_spec.rb
|
130
|
+
- spec/rosetta_queue/consumer_spec.rb
|
131
|
+
- spec/rosetta_queue/core_ext/string_spec.rb
|
132
|
+
- spec/rosetta_queue/destinations_spec.rb
|
133
|
+
- spec/rosetta_queue/exception_handler_spec.rb
|
134
|
+
- spec/rosetta_queue/filters_spec.rb
|
135
|
+
- spec/rosetta_queue/message_handler_spec.rb
|
136
|
+
- spec/rosetta_queue/producer_spec.rb
|
137
|
+
- spec/rosetta_queue/shared_messaging_behavior.rb
|
138
|
+
- spec/spec_helper.rb
|
139
|
+
- examples/sample_amqp_consumer.rb
|
140
|
+
- examples/sample_amqp_fanout_consumer.rb
|
141
|
+
- examples/sample_amqp_fanout_producer.rb
|
142
|
+
- examples/sample_amqp_producer.rb
|