rosetta_queue 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/History.txt +38 -0
  2. data/MIT-LICENSE.txt +19 -0
  3. data/README.rdoc +11 -0
  4. data/Rakefile +39 -0
  5. data/VERSION.yml +4 -0
  6. data/cucumber.yml +1 -0
  7. data/examples/sample_amqp_consumer.rb +45 -0
  8. data/examples/sample_amqp_fanout_consumer.rb +52 -0
  9. data/examples/sample_amqp_fanout_producer.rb +18 -0
  10. data/examples/sample_amqp_producer.rb +16 -0
  11. data/features/filtering.feature +31 -0
  12. data/features/messaging.feature +48 -0
  13. data/features/step_definitions/common_messaging_steps.rb +82 -0
  14. data/features/step_definitions/filtering_steps.rb +17 -0
  15. data/features/step_definitions/point_to_point_steps.rb +22 -0
  16. data/features/step_definitions/publish_subscribe_steps.rb +25 -0
  17. data/features/support/env.rb +25 -0
  18. data/features/support/sample_consumers.rb +29 -0
  19. data/lib/rosetta_queue.rb +23 -0
  20. data/lib/rosetta_queue/adapter.rb +39 -0
  21. data/lib/rosetta_queue/adapters/amqp.rb +48 -0
  22. data/lib/rosetta_queue/adapters/amqp_evented.rb +132 -0
  23. data/lib/rosetta_queue/adapters/amqp_synch.rb +123 -0
  24. data/lib/rosetta_queue/adapters/base.rb +27 -0
  25. data/lib/rosetta_queue/adapters/beanstalk.rb +56 -0
  26. data/lib/rosetta_queue/adapters/fake.rb +26 -0
  27. data/lib/rosetta_queue/adapters/null.rb +57 -0
  28. data/lib/rosetta_queue/adapters/stomp.rb +88 -0
  29. data/lib/rosetta_queue/base.rb +15 -0
  30. data/lib/rosetta_queue/consumer.rb +30 -0
  31. data/lib/rosetta_queue/consumer_managers/base.rb +24 -0
  32. data/lib/rosetta_queue/consumer_managers/evented.rb +43 -0
  33. data/lib/rosetta_queue/consumer_managers/threaded.rb +94 -0
  34. data/lib/rosetta_queue/core_ext/string.rb +22 -0
  35. data/lib/rosetta_queue/core_ext/time.rb +20 -0
  36. data/lib/rosetta_queue/destinations.rb +33 -0
  37. data/lib/rosetta_queue/exception_handler.rb +105 -0
  38. data/lib/rosetta_queue/exceptions.rb +10 -0
  39. data/lib/rosetta_queue/filters.rb +58 -0
  40. data/lib/rosetta_queue/logger.rb +27 -0
  41. data/lib/rosetta_queue/message_handler.rb +52 -0
  42. data/lib/rosetta_queue/producer.rb +21 -0
  43. data/lib/rosetta_queue/spec_helpers.rb +5 -0
  44. data/lib/rosetta_queue/spec_helpers/hash.rb +21 -0
  45. data/lib/rosetta_queue/spec_helpers/helpers.rb +47 -0
  46. data/lib/rosetta_queue/spec_helpers/publishing_matchers.rb +144 -0
  47. data/spec/rosetta_queue/adapter_spec.rb +101 -0
  48. data/spec/rosetta_queue/adapters/amqp_synchronous_spec.rb +277 -0
  49. data/spec/rosetta_queue/adapters/beanstalk_spec.rb +47 -0
  50. data/spec/rosetta_queue/adapters/fake_spec.rb +72 -0
  51. data/spec/rosetta_queue/adapters/null_spec.rb +31 -0
  52. data/spec/rosetta_queue/adapters/shared_adapter_behavior.rb +38 -0
  53. data/spec/rosetta_queue/adapters/shared_fanout_behavior.rb +20 -0
  54. data/spec/rosetta_queue/adapters/stomp_spec.rb +126 -0
  55. data/spec/rosetta_queue/consumer_managers/evented_spec.rb +56 -0
  56. data/spec/rosetta_queue/consumer_managers/shared_manager_behavior.rb +26 -0
  57. data/spec/rosetta_queue/consumer_managers/threaded_spec.rb +51 -0
  58. data/spec/rosetta_queue/consumer_spec.rb +99 -0
  59. data/spec/rosetta_queue/core_ext/string_spec.rb +15 -0
  60. data/spec/rosetta_queue/destinations_spec.rb +34 -0
  61. data/spec/rosetta_queue/exception_handler_spec.rb +106 -0
  62. data/spec/rosetta_queue/filters_spec.rb +57 -0
  63. data/spec/rosetta_queue/message_handler_spec.rb +47 -0
  64. data/spec/rosetta_queue/producer_spec.rb +77 -0
  65. data/spec/rosetta_queue/shared_messaging_behavior.rb +21 -0
  66. data/spec/spec.opts +4 -0
  67. data/spec/spec_helper.rb +47 -0
  68. 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
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --loadby
3
+ mtime
4
+ --reverse
@@ -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