amqp-hermes 1.0.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/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ gem "amqp", "~> 0.9"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "faker", "~> 1"
11
+ gem "rdoc", "~> 3.12"
12
+ gem "bundler", "~> 1.0.0"
13
+ gem "jeweler", "~> 1.8.3"
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,45 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ amq-client (0.9.2)
5
+ amq-protocol (>= 0.9.0)
6
+ eventmachine
7
+ amq-protocol (0.9.0)
8
+ amqp (0.9.4)
9
+ amq-client (~> 0.9.2)
10
+ amq-protocol (>= 0.9.0)
11
+ eventmachine
12
+ diff-lcs (1.1.3)
13
+ eventmachine (0.12.10)
14
+ faker (1.0.1)
15
+ i18n (~> 0.4)
16
+ git (1.2.5)
17
+ i18n (0.6.0)
18
+ jeweler (1.8.3)
19
+ bundler (~> 1.0)
20
+ git (>= 1.2.5)
21
+ rake
22
+ rdoc
23
+ json (1.6.5)
24
+ rake (0.9.2.2)
25
+ rdoc (3.12)
26
+ json (~> 1.4)
27
+ rspec (2.8.0)
28
+ rspec-core (~> 2.8.0)
29
+ rspec-expectations (~> 2.8.0)
30
+ rspec-mocks (~> 2.8.0)
31
+ rspec-core (2.8.0)
32
+ rspec-expectations (2.8.0)
33
+ diff-lcs (~> 1.1.2)
34
+ rspec-mocks (2.8.0)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ amqp (~> 0.9)
41
+ bundler (~> 1.0.0)
42
+ faker (~> 1)
43
+ jeweler (~> 1.8.3)
44
+ rdoc (~> 3.12)
45
+ rspec (~> 2.8.0)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Wyngle, http://wyngle.com/
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,75 @@
1
+ = amqp-hermes
2
+
3
+ A wrapper around ruby-amqp to make pub/sub live more easy.
4
+
5
+ == Synopsis
6
+
7
+ === Sending a message
8
+
9
+ # plain and simple
10
+ tr = AMQP::Hermes::Transmitter.new("test.queue.testing")
11
+ tr.transmit "payload"
12
+
13
+ # or as json
14
+ tr.transmit { :foo => "bar", :quex => "stuff" }.to_json
15
+
16
+ # with AMQP options
17
+ tr.transmit "payload", :persistent => true
18
+
19
+ # on a different queue
20
+ tr.transmit "payload", :routing_key => "test.queue.real"
21
+
22
+
23
+ === Receiving a message with the simple build in handler
24
+
25
+ re = AMQP::Hermes::Receiver.new("test.queue") # will listen on routing_key
26
+ # test.queue.* be default
27
+ while !re.messages.any?
28
+ sleep 0.1
29
+ end
30
+
31
+ puts re.messages.first.payload
32
+
33
+ === Receiving with a custom handler
34
+
35
+ class MyCustomHandler
36
+ def receive(message)
37
+ if message.headers.routing_key =~ /test/
38
+ $stderr.puts "Just a test, nothing to worry about"
39
+ $stderr.puts message.payload
40
+
41
+ else
42
+ # ... do something incredible
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+ re = AMQP::Hermes::Receiver.new("test.queue",
49
+ :handler => MyCustomHandler.new
50
+ )
51
+
52
+ while(true);
53
+ # the receiver is at the ball now
54
+ end
55
+
56
+ == Contributing to amqp-hermes
57
+
58
+ * Check out the latest master to make sure the feature hasn't been implemented
59
+ or the bug hasn't been fixed yet.
60
+ * Check out the issue tracker to make sure someone already hasn't requested it
61
+ and/or contributed it.
62
+ * Fork the project.
63
+ * Start a feature/bugfix branch.
64
+ * Commit and push until you are happy with your contribution.
65
+ * Make sure to add tests for it. This is important so I don't break it in a
66
+ future version unintentionally.
67
+ * Please try not to mess with the Rakefile, version, or history. If you want
68
+ to have your own version, or is otherwise necessary, that is fine, but
69
+ please isolate to its own commit so I can cherry-pick around it.
70
+
71
+ == Copyright
72
+
73
+ Copyright (c) 2012 Wyngle, http://wyngle.com/. See LICENSE.txt for
74
+ further details.
75
+
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "amqp-hermes"
18
+ gem.homepage = "http://github.com/wyngle/amqp-hermes"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Hermes; Messenger of the gods}
21
+ gem.description = %Q{Wrapper around ruby-amqp to make pub/sub easier}
22
+ gem.email = "hartog.de.mik@gmail.com"
23
+ gem.authors = ["Hartog C. de Mik"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rdoc/task'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "amqp-hermes #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,27 @@
1
+ require 'amqp'
2
+
3
+ require "amqp-hermes/version"
4
+ require 'amqp-hermes/connectivity'
5
+ require 'amqp-hermes/transmitter'
6
+ require 'amqp-hermes/receiver'
7
+ require 'amqp-hermes/message'
8
+
9
+ module AMQP
10
+ module Hermes
11
+ def self.wait_for(something, test, max=50)
12
+ res = something.send(test)
13
+ unless [ true, false ].include?(res)
14
+ raise "Can only wait for true or false"
15
+ end
16
+ return 0 if res == true
17
+
18
+ wait_count = 0
19
+ while !something.send(test)
20
+ raise "Waited long enough" if ( wait_count += 1 ) > max
21
+ sleep 0.1
22
+ end
23
+
24
+ return wait_count
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
1
+ module AMQP
2
+ module Hermes
3
+ module Connectivity
4
+ def connection
5
+ @connection || open_connection
6
+ end
7
+
8
+ def open_connection
9
+ return @connection if self.open?
10
+
11
+ # start a ractor if non running
12
+ unless EventMachine.reactor_running?
13
+ Thread.new do
14
+ EventMachine.run
15
+ end
16
+
17
+ AMQP::Hermes.wait_for(EventMachine, :reactor_running?)
18
+ end
19
+
20
+ @connection = AMQP.connect
21
+ end
22
+
23
+ def open?
24
+ EventMachine.reactor_running? && !@connection.nil?
25
+ end
26
+
27
+ def channel
28
+ @channel || open_channel
29
+ end
30
+
31
+ def open_channel
32
+ @channel = AMQP::Channel.new(self.connection)
33
+ end
34
+
35
+ def close
36
+ return if !open?
37
+
38
+ @connection.close
39
+
40
+ AMQP.stop do
41
+ EventMachine.stop
42
+ end
43
+
44
+ @connection = nil
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,12 @@
1
+ module AMQP
2
+ module Hermes
3
+ class Message
4
+ attr_reader :headers, :payload
5
+
6
+ def initialize(headers, payload)
7
+ @headers = headers
8
+ @payload = payload
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,68 @@
1
+ module AMQP
2
+ module Hermes
3
+ class Receiver
4
+ include AMQP::Hermes::Connectivity
5
+
6
+ attr_reader :messages, :queue, :exchange, :routing_key
7
+ attr_accessor :_listening
8
+
9
+ def initialize(queue, topic="pub/sub", options={})
10
+ raise "You *MUST* specify a queue" if queue.nil? or queue.empty?
11
+ @queue = queue
12
+
13
+ if topic.is_a? Hash
14
+ options = topic.dup
15
+ topic = options.delete(:topic) || "pub/sub"
16
+ end
17
+
18
+ @routing_key = options.delete(:routing_key)
19
+ @routing_key ||= "#{queue}.*"
20
+
21
+ if @routing_key !~ Regexp.new(queue)
22
+ @routing_key = "#{queue}.routing_key"
23
+ end
24
+
25
+ @handler = options.delete(:handler) || self
26
+
27
+ options[:auto_delete] ||= true
28
+ @exchange = channel.topic(topic, options)
29
+
30
+ @messages = []
31
+ @_listening = false
32
+
33
+ self.open_connection
34
+ self.listen
35
+ end
36
+
37
+ def listen
38
+ Thread.new(self, @handler) do |receiver, handler|
39
+ receiver._listening = true
40
+
41
+ receiver.channel.queue(receiver.queue).bind(
42
+ receiver.exchange, :routing_key => receiver.routing_key
43
+ ).subscribe do |headers, payload|
44
+ handler.receive(AMQP::Hermes::Message.new(headers, payload))
45
+ end
46
+ end
47
+ end
48
+
49
+ def listening?
50
+ @_listening == true ? true : false
51
+ end
52
+
53
+ # implement the handler interface
54
+ def receive(message)
55
+ return nil if !message.kind_of?(AMQP::Hermes::Message)
56
+ @messages << message
57
+ end
58
+
59
+ def clear
60
+ @messages = []
61
+ end
62
+
63
+ def inspect
64
+ %Q{#<Hermes::Receiver @queue="#{@queue}" @routing_key="#{@routing_key}" @exchange="#{@exchange}" open=#{self.open?} listening=#{self.listening?}>}
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,37 @@
1
+ module AMQP
2
+ module Hermes
3
+ class Transmitter
4
+ include AMQP::Hermes::Connectivity
5
+
6
+ attr_reader :queue
7
+ def initialize(queue=nil, topic="pub/sub", options={})
8
+ @queue = queue
9
+
10
+ options[:auto_delete] ||= true
11
+ @exchange = channel.topic(topic, options)
12
+ @transmitting = false
13
+ end
14
+
15
+ def transmit(payload, options={})
16
+ @transmitting = true
17
+
18
+ options.merge!(
19
+ :routing_key => @queue
20
+ ) unless options.has_key?(:routing_key)
21
+
22
+ @exchange.publish( payload, options ) do
23
+ @transmitting = false
24
+ end
25
+ end
26
+
27
+ def done_transmitting?
28
+ @transmitting == true ? false : true
29
+ end
30
+
31
+ def close
32
+ AMQP::Hermes.wait_for(self, :done_transmitting?)
33
+ super
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module Hermes
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe AMQP::Hermes::Connectivity do
4
+ before :each do
5
+ @subject = Class.new
6
+ @subject.extend(AMQP::Hermes::Connectivity)
7
+ end
8
+
9
+ after :each do
10
+ @subject.close
11
+ end
12
+
13
+ it "should have an open connection" do
14
+ @subject.connection.should_not be_nil
15
+ @subject.should be_open
16
+ @subject.connection.should be_kind_of(AMQP::Session)
17
+ end
18
+
19
+ it "should have an open channel" do
20
+ @subject.channel.should_not be_nil
21
+ @subject.channel.should be_kind_of(AMQP::Channel)
22
+ end
23
+
24
+ it "should close" do
25
+ @subject.open_connection
26
+ @subject.should be_open
27
+
28
+ @subject.close
29
+
30
+ @subject.should_not be_open
31
+ end
32
+ end
33
+
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ class CustomHandler
4
+ def received?
5
+ @received == true ? true : false
6
+ end
7
+ def receive(message)
8
+ @received = true
9
+ end
10
+ end
11
+
12
+ describe CustomHandler do
13
+ it "should be a working alternate handler" do
14
+ handler = CustomHandler.new
15
+ handler.should_not be_received
16
+
17
+ handler.receive(AMQP::Hermes::Message.new("crud", "crud"))
18
+ handler.should be_received
19
+ end
20
+ end
21
+
22
+ describe AMQP::Hermes::Receiver do
23
+ before :each do
24
+ @receiver = AMQP::Hermes::Receiver.new("test.queue")
25
+ AMQP::Hermes.wait_for(@receiver, :listening?)
26
+ @receiver.clear
27
+ end
28
+
29
+ after :each do
30
+ @receiver.close
31
+ end
32
+
33
+ it "should include connectivity" do
34
+ @receiver.should be_kind_of(AMQP::Hermes::Connectivity)
35
+ end
36
+
37
+ it "should set a default routing key" do
38
+ @receiver.routing_key.should == "test.queue.*"
39
+ end
40
+
41
+ it "should set a default handler" do
42
+ @receiver.instance_variable_get(:@handler).should == @receiver
43
+ end
44
+
45
+ it "should open an exchange" do
46
+ @receiver.exchange.should_not be_nil
47
+ @receiver.exchange.should be_kind_of(AMQP::Exchange)
48
+ end
49
+
50
+ it "should be listening" do
51
+ @receiver.should be_listening
52
+ end
53
+
54
+ it "should implement a handler interface" do
55
+ @receiver.messages.should be_empty
56
+ transmitter = AMQP::Hermes::Transmitter.new("test.queue.test")
57
+ transmitter.transmit "crud"
58
+
59
+ AMQP::Hermes.wait_for(@receiver.messages, :any?)
60
+ @receiver.messages.should be_any
61
+ end
62
+
63
+ it "should accept an alternate handler" do
64
+ handler = CustomHandler.new
65
+
66
+ @receiver.close
67
+ @receiver = AMQP::Hermes::Receiver.new("test.queue", :handler => handler)
68
+
69
+ @receiver.instance_variable_get(:@handler).should == handler
70
+
71
+ AMQP::Hermes.wait_for(@receiver, :listening?)
72
+
73
+ transmitter = AMQP::Hermes::Transmitter.new("test.queue.test")
74
+ transmitter.transmit "crud"
75
+
76
+ AMQP::Hermes.wait_for(handler, :received?)
77
+ end
78
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe AMQP::Hermes::Transmitter do
4
+ before :each do
5
+ @transmitter = AMQP::Hermes::Transmitter.new("test.queue.test")
6
+ @receiver = AMQP::Hermes::Receiver.new("test.queue")
7
+
8
+ AMQP::Hermes.wait_for(@receiver, :listening?)
9
+ @receiver.clear
10
+ end
11
+
12
+ after :each do
13
+ @receiver.close
14
+ @transmitter.close
15
+ end
16
+
17
+ it "should include connectivity" do
18
+ @transmitter.should be_kind_of(AMQP::Hermes::Connectivity)
19
+ end
20
+
21
+ it "should hold a default queue" do
22
+ @transmitter.queue.should == "test.queue.test"
23
+ end
24
+
25
+ it "should transmitt messages on the default queue" do
26
+ message = Faker::Lorem.sentence
27
+ @transmitter.transmit message
28
+
29
+ AMQP::Hermes.wait_for(@receiver.messages, :any?)
30
+
31
+ @receiver.messages.collect(&:payload).should include(message)
32
+ end
33
+
34
+ it "should transmitt messages on a given queue" do
35
+ message = Faker::Lorem.sentence
36
+ @transmitter.transmit(message, :routing_key => "test.queue.given")
37
+
38
+ AMQP::Hermes.wait_for(@receiver.messages, :any?)
39
+
40
+ @receiver.messages.collect(&:payload).should include(message)
41
+ @receiver.messages.collect(&:headers).collect(&:routing_key).should include("test.queue.given")
42
+ end
43
+
44
+ it "should accept AMQP options" do
45
+ message = Faker::Lorem.sentence
46
+ @transmitter.transmit(message, :mandatory => true, :persistent => true)
47
+
48
+ AMQP::Hermes.wait_for(@receiver.messages, :any?)
49
+
50
+ @receiver.messages.collect(&:payload).should include(message)
51
+ end
52
+
53
+ it "should let know it's done transmitting" do
54
+ message = Faker::Lorem.paragraph
55
+ @transmitter.transmit(message, :mandatory => true, :persistent => true)
56
+ @transmitter.should_not be_done_transmitting
57
+ end
58
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'amqp-hermes'
5
+ require 'faker'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amqp-hermes
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: ruby
7
+ authors:
8
+ - Hartog C. de Mik
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-03-01 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: amqp
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: "0.9"
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.8.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: faker
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: "1"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: rdoc
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: "3.12"
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: bundler
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.0.0
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: jeweler
72
+ requirement: &id006 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.3
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *id006
81
+ description: Wrapper around ruby-amqp to make pub/sub easier
82
+ email: hartog.de.mik@gmail.com
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files:
88
+ - LICENSE.txt
89
+ - README.rdoc
90
+ files:
91
+ - .document
92
+ - .rspec
93
+ - Gemfile
94
+ - Gemfile.lock
95
+ - LICENSE.txt
96
+ - README.rdoc
97
+ - Rakefile
98
+ - VERSION
99
+ - lib/amqp-hermes.rb
100
+ - lib/amqp-hermes/connectivity.rb
101
+ - lib/amqp-hermes/message.rb
102
+ - lib/amqp-hermes/receiver.rb
103
+ - lib/amqp-hermes/transmitter.rb
104
+ - lib/amqp-hermes/version.rb
105
+ - spec/amqp-hermes/connectivity_spec.rb
106
+ - spec/amqp-hermes/receiver_spec.rb
107
+ - spec/amqp-hermes/transmitter_spec.rb
108
+ - spec/spec_helper.rb
109
+ homepage: http://github.com/wyngle/amqp-hermes
110
+ licenses:
111
+ - MIT
112
+ post_install_message:
113
+ rdoc_options: []
114
+
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ hash: -1570954477034988232
123
+ segments:
124
+ - 0
125
+ version: "0"
126
+ required_rubygems_version: !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ requirements: []
133
+
134
+ rubyforge_project:
135
+ rubygems_version: 1.8.16
136
+ signing_key:
137
+ specification_version: 3
138
+ summary: Hermes; Messenger of the gods
139
+ test_files: []
140
+