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.
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