beetle 0.3.0.rc.11 → 0.3.0.rc.14

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.
@@ -85,7 +85,7 @@ For development, you'll need
85
85
  {Ali Jelveh}[http://github.com/dudemeister] and
86
86
  {Sebastian Roebke}[http://github.com/boosty].
87
87
 
88
- You cand find out more about our work on our {dev blog}[http://devblog.xing.com].
88
+ You can find out more about our work on our {dev blog}[http://devblog.xing.com].
89
89
 
90
90
  Copyright (c) 2010 {XING AG}[http://www.xing.com/]
91
91
 
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
- require 'rcov/rcovtask'
4
3
  require 'bundler/gem_tasks'
5
4
 
6
5
  # rake 0.9.2 hack to supress deprecation warnings caused by cucumber
@@ -11,25 +10,35 @@ require 'cucumber/rake/task'
11
10
  $:.unshift 'lib'
12
11
  require 'beetle'
13
12
 
14
- namespace :test do
15
- namespace :coverage do
16
- desc "Delete aggregate coverage data."
17
- task(:clean) { rm_f "coverage.data" }
18
- end
13
+ if RUBY_VERSION < "1.9"
14
+ require 'rcov/rcovtask'
15
+
16
+ namespace :test do
17
+ namespace :coverage do
18
+ desc "Delete aggregate coverage data."
19
+ task(:clean) { rm_f "coverage.data" }
20
+ end
19
21
 
20
- desc 'Aggregate code coverage'
21
- task :coverage => "test:coverage:clean"
22
+ desc 'Aggregate code coverage'
23
+ task :coverage => "test:coverage:clean"
22
24
 
23
- Rcov::RcovTask.new(:coverage) do |t|
24
- t.libs << "test"
25
- t.test_files = FileList["test/**/*_test.rb"]
26
- t.output_dir = "test/coverage"
27
- t.verbose = true
28
- t.rcov_opts << "--exclude '.*' --include-file 'lib/beetle/'"
25
+ Rcov::RcovTask.new(:coverage) do |t|
26
+ t.libs << "test"
27
+ t.test_files = FileList["test/**/*_test.rb"]
28
+ t.output_dir = "test/coverage"
29
+ t.verbose = true
30
+ t.rcov_opts << "--exclude '.*' --include-file 'lib/beetle/'"
31
+ end
32
+ task :coverage do
33
+ system 'open test/coverage/index.html'
34
+ end if RUBY_PLATFORM =~ /darwin/
35
+ end
36
+ else
37
+ namespace :test do
38
+ task :coverage => :test do
39
+ system 'open coverage/index.html'
40
+ end
29
41
  end
30
- task :coverage do
31
- system 'open test/coverage/index.html'
32
- end if RUBY_PLATFORM =~ /darwin/
33
42
  end
34
43
 
35
44
  namespace :beetle do
@@ -98,7 +107,7 @@ Rake::TestTask.new do |t|
98
107
  t.verbose = true
99
108
  end
100
109
 
101
- require 'rake/rdoctask'
110
+ require 'rdoc/task'
102
111
 
103
112
  Rake::RDocTask.new do |rdoc|
104
113
  rdoc.rdoc_dir = 'site/rdoc'
@@ -33,19 +33,14 @@ Gem::Specification.new do |s|
33
33
 
34
34
  s.specification_version = 3
35
35
  s.add_runtime_dependency("uuid4r", [">= 0.1.2"])
36
- s.add_runtime_dependency("bunny", ["= 0.7.8"])
37
- s.add_runtime_dependency("redis", ["= 2.2.2"])
38
- s.add_runtime_dependency("hiredis", ["= 0.4.4"])
39
- s.add_runtime_dependency("amq-client", ["= 0.8.7"])
40
- s.add_runtime_dependency("amq-protocol", ["= 0.8.4"])
41
- s.add_runtime_dependency("amqp", ["= 0.8.4"])
36
+ s.add_runtime_dependency("bunny", ["= 0.7.9"])
37
+ s.add_runtime_dependency("redis", ["= 3.0.1"])
38
+ s.add_runtime_dependency("hiredis", ["= 0.4.5"])
39
+ s.add_runtime_dependency("amq-client", ["= 0.9.3"])
40
+ s.add_runtime_dependency("amq-protocol", ["= 0.9.3"])
41
+ s.add_runtime_dependency("amqp", ["= 0.9.6"])
42
42
  s.add_runtime_dependency("activesupport", [">= 2.3.4"])
43
43
  s.add_runtime_dependency("eventmachine_httpserver", [">= 0.2.1"])
44
44
  s.add_runtime_dependency("daemons", [">= 1.0.10"])
45
- s.add_development_dependency("rake", [">= 0.8.7"])
46
- s.add_development_dependency("mocha", [">= 0"])
47
- s.add_development_dependency("rcov", [">= 0"])
48
- s.add_development_dependency("cucumber", [">= 0.7.2"])
49
- s.add_development_dependency("daemon_controller", [">= 0"])
50
45
  end
51
46
 
@@ -1,8 +1,6 @@
1
1
  # simple.rb
2
2
  # this example shows you a very basic message/handler setup
3
3
  #
4
- #
5
- #
6
4
  # ! check the examples/README.rdoc for information on starting your redis/rabbit !
7
5
  #
8
6
  # start it with ruby simple.rb
@@ -10,6 +10,7 @@ require 'socket'
10
10
  require 'beetle/version'
11
11
 
12
12
  module Beetle
13
+ #:nocov:
13
14
  Timer = if RUBY_VERSION < "1.9"
14
15
  begin
15
16
  require 'system_timer'
@@ -23,6 +24,7 @@ module Beetle
23
24
  require 'timeout'
24
25
  Timeout
25
26
  end
27
+ #:nocov:
26
28
 
27
29
  # abstract superclass for Beetle specific exceptions
28
30
  class Error < StandardError; end
@@ -40,7 +42,7 @@ module Beetle
40
42
  # AMQP options for exchange creation
41
43
  EXCHANGE_CREATION_KEYS = [:auto_delete, :durable, :internal, :nowait, :passive]
42
44
  # AMQP options for queue creation
43
- QUEUE_CREATION_KEYS = [:passive, :durable, :exclusive, :auto_delete, :no_wait]
45
+ QUEUE_CREATION_KEYS = [:passive, :durable, :exclusive, :auto_delete, :no_wait, :arguments]
44
46
  # AMQP options for queue bindings
45
47
  QUEUE_BINDING_KEYS = [:key, :no_wait]
46
48
  # AMQP options for message publishing
@@ -52,7 +54,11 @@ module Beetle
52
54
  def self.hostname
53
55
  name = Socket.gethostname
54
56
  parts = name.split('.')
55
- parts.size > 1 ? name : Socket.gethostbyname(parts.first).first
57
+ if parts.size > 1
58
+ name
59
+ else
60
+ Socket.gethostbyname(parts.first).first rescue name
61
+ end
56
62
  end
57
63
 
58
64
  # use ruby's autoload mechanism for loading beetle classes
@@ -76,7 +82,9 @@ module Beetle
76
82
  raise if $!.is_a?(Mocha::ExpectationError)
77
83
  end
78
84
  else
85
+ #:nocov:
79
86
  def self.reraise_expectation_errors! #:nodoc:
80
87
  end
88
+ #:nocov:
81
89
  end
82
90
  end
@@ -149,9 +149,10 @@ module Beetle
149
149
 
150
150
  # this is a convenience method to configure exchanges, queues, messages and handlers
151
151
  # with a common set of options. allows one to call all register methods without the
152
- # register_ prefix. returns self.
152
+ # register_ prefix. returns self. if the passed in block has no parameters, the block
153
+ # will be evaluated in the context of the client configurator.
153
154
  #
154
- # Example:
155
+ # Example: (block with config argument)
155
156
  # client = Beetle.client.new.configure :exchange => :foobar do |config|
156
157
  # config.queue :q1, :key => "foo"
157
158
  # config.queue :q2, :key => "bar"
@@ -160,8 +161,24 @@ module Beetle
160
161
  # config.handler :q1 { puts "got foo"}
161
162
  # config.handler :q2 { puts "got bar"}
162
163
  # end
163
- def configure(options={}) #:yields: config
164
- yield Configurator.new(self, options)
164
+ #
165
+ # Example: (block without config argument)
166
+ # client = Beetle.client.new.configure :exchange => :foobar do
167
+ # queue :q1, :key => "foo"
168
+ # queue :q2, :key => "bar"
169
+ # message :foo
170
+ # message :bar
171
+ # handler :q1 { puts "got foo"}
172
+ # handler :q2 { puts "got bar"}
173
+ # end
174
+ #
175
+ def configure(options={}, &block)
176
+ configurator = Configurator.new(self, options)
177
+ if block.arity == 1
178
+ yield configurator
179
+ else
180
+ configurator.instance_eval &block
181
+ end
165
182
  self
166
183
  end
167
184
 
@@ -223,18 +240,22 @@ module Beetle
223
240
  end
224
241
 
225
242
  # traces queues without consuming them. useful for debugging message flow.
226
- def trace(queue_names=self.queues.keys, &block)
243
+ def trace(queue_names=self.queues.keys, tracer=nil, &block)
227
244
  queues_to_trace = self.queues.slice(*queue_names)
228
245
  queues_to_trace.each do |name, opts|
229
246
  opts.merge! :durable => false, :auto_delete => true, :amqp_name => queue_name_for_tracing(opts[:amqp_name])
230
247
  end
231
- register_handler(queue_names) do |msg|
232
- puts "-----===== new message =====-----"
233
- puts "SERVER: #{msg.server}"
234
- puts "HEADER: #{msg.header.inspect}"
235
- puts "MSGID: #{msg.msg_id}"
236
- puts "DATA: #{msg.data}"
237
- end
248
+ tracer ||=
249
+ lambda do |msg|
250
+ puts "-----===== new message =====-----"
251
+ puts "SERVER: #{msg.server}"
252
+ puts "HEADER: #{msg.header.attributes[:headers].inspect}"
253
+ puts "EXCHANGE: #{msg.header.method.exchange}"
254
+ puts "KEY: #{msg.header.method.routing_key}"
255
+ puts "MSGID: #{msg.msg_id}"
256
+ puts "DATA: #{msg.data}"
257
+ end
258
+ register_handler(queue_names){|msg| tracer.call msg }
238
259
  listen_queues(queue_names, &block)
239
260
  end
240
261
 
@@ -199,7 +199,7 @@ module Beetle
199
199
  # have we already seen this message? if not, set the status to "incomplete" and store
200
200
  # the message exipration timestamp in the deduplication store.
201
201
  def key_exists?
202
- old_message = 0 == @store.msetnx(msg_id, :status =>"incomplete", :expires => @expires_at, :timeout => now + timeout)
202
+ old_message = !@store.msetnx(msg_id, :status =>"incomplete", :expires => @expires_at, :timeout => now + timeout)
203
203
  if old_message
204
204
  logger.debug "Beetle: received duplicate message: #{msg_id} on queue: #{@queue}"
205
205
  end
@@ -19,11 +19,6 @@ class Redis #:nodoc:
19
19
  slaveof(host, port)
20
20
  end
21
21
 
22
- # Redis 2 tries to establish a connection on inspect. this is evil!
23
- def inspect
24
- super
25
- end
26
-
27
22
  def info_with_rescue
28
23
  info
29
24
  rescue Exception
@@ -51,23 +46,4 @@ class Redis #:nodoc:
51
46
  info["role"] == "slave" && info["master_host"] == host && info["master_port"] == port.to_s
52
47
  end
53
48
 
54
- # redis 2.2.2 shutdown implementation does not disconnect from the redis server.
55
- # this leaves the connection in an inconsistent state and causes the next command to silently fail.
56
- # this in turn breaks our cucumber test scenarios.
57
- # fix this here, until a new version is released which fixes the problem.
58
-
59
- alias_method :broken_shutdown, :shutdown
60
-
61
- # Synchronously save the dataset to disk and then shut down the server.
62
- def shutdown
63
- synchronize do
64
- begin
65
- @client.call [:shutdown]
66
- rescue Errno::ECONNREFUSED
67
- ensure
68
- @client.disconnect
69
- end
70
- end
71
- end
72
-
73
49
  end
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "0.3.0.rc.11"
2
+ VERSION = "0.3.0.rc.14"
3
3
  end
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ module Beetle
4
+ class HostnameTest < Test::Unit::TestCase
5
+ test "should use Socket.gethostname if returned name name is fully qualified" do
6
+ Socket.expects(:gethostname).returns("a.b.com")
7
+ assert_equal "a.b.com", Beetle.hostname
8
+ end
9
+
10
+ test "should use Socket.gethosbyname if returned name name is not fully qualified" do
11
+ Socket.expects(:gethostname).returns("a")
12
+ Socket.expects(:gethostbyname).with("a").returns(["a.b.com"])
13
+ assert_equal "a.b.com", Beetle.hostname
14
+ end
15
+ end
16
+ end
@@ -151,6 +151,16 @@ module Beetle
151
151
  @client.configure(options) {|config| assert_equal 42, config}
152
152
  end
153
153
 
154
+ test "configure should eval a passed block without arguments in the context of the configurator" do
155
+ options = {:exchange => :foobar}
156
+ m = "mock"
157
+ m.expects(:foo).returns(42)
158
+ Client::Configurator.expects(:new).with(@client, options).returns(m)
159
+ value = nil
160
+ @client.configure(options) { value = foo }
161
+ assert_equal 42, value
162
+ end
163
+
154
164
  test "a configurator should forward all known registration methods to the client" do
155
165
  options = {:foo => :bar}
156
166
  config = Client::Configurator.new(@client, options)
@@ -353,7 +363,7 @@ module Beetle
353
363
  client = Client.new
354
364
  client.register_queue("test")
355
365
  sub = client.send(:subscriber)
356
- sub.expects(:register_handler).with(client.queues.keys, {}, nil).yields(stub_everything("message"))
366
+ sub.expects(:register_handler).with(client.queues.keys, {}, nil).yields(message_stub_for_tracing)
357
367
  sub.expects(:listen_queues)
358
368
  client.stubs(:puts)
359
369
  client.trace
@@ -369,11 +379,19 @@ module Beetle
369
379
  client.register_queue("test")
370
380
  client.register_queue("irrelevant")
371
381
  sub = client.send(:subscriber)
372
- sub.expects(:register_handler).with(["test"], {}, nil).yields(stub_everything("message"))
382
+ sub.expects(:register_handler).with(["test"], {}, nil).yields(message_stub_for_tracing)
373
383
  sub.expects(:listen_queues).with(["test"])
374
384
  client.stubs(:puts)
375
385
  client.trace(["test"])
376
386
  end
377
387
 
388
+ def message_stub_for_tracing
389
+ header_stub = stub_everything("header")
390
+ header_stub.stubs(:method).returns(stub_everything("method"))
391
+ header_stub.stubs(:attributes).returns(stub_everything("attributes"))
392
+ msg_stub = stub_everything("message")
393
+ msg_stub.stubs(:header).returns(header_stub)
394
+ msg_stub
395
+ end
378
396
  end
379
397
  end
@@ -13,6 +13,12 @@ module Beetle
13
13
  assert_equal new_value, config.gc_threshold
14
14
  end
15
15
 
16
+ test "should log an error if the specified file does not exist" do
17
+ config = Configuration.new
18
+ config.logger.expects(:error)
19
+ assert_raises(Errno::ENOENT){ config.config_file = "some/path/to/a/file" }
20
+ end
21
+
16
22
  test "should log to STDOUT if no log_file given" do
17
23
  config = Configuration.new
18
24
  Logger.expects(:new).with(STDOUT).returns(stub_everything)
@@ -13,11 +13,11 @@ module Beetle
13
13
  assert_equal 0, @r.del("hahahaha")
14
14
  end
15
15
 
16
- test "msetnx returns 0 or 1" do
17
- assert_equal 1, @r.msetnx("a", 1, "b", 2)
16
+ test "msetnx returns a boolean" do
17
+ assert_equal true, @r.msetnx("a", 1, "b", 2)
18
18
  assert_equal "1", @r.get("a")
19
19
  assert_equal "2", @r.get("b")
20
- assert_equal 0, @r.msetnx("a", 3, "b", 4)
20
+ assert_equal false, @r.msetnx("a", 3, "b", 4)
21
21
  assert_equal "1", @r.get("a")
22
22
  assert_equal "2", @r.get("b")
23
23
  end
@@ -224,12 +224,12 @@ module Beetle
224
224
  end
225
225
 
226
226
  test "binding a queue should create it using the config and bind it to the exchange with the name specified" do
227
- @client.register_queue("some_queue", :exchange => "some_exchange", :key => "haha.#")
227
+ @client.register_queue("some_queue", :exchange => "some_exchange", :key => "haha.#", :arguments => {"foo" => "fighter"})
228
228
  @pub.expects(:exchange).with("some_exchange").returns(:the_exchange)
229
229
  q = mock("queue")
230
230
  q.expects(:bind).with(:the_exchange, {:key => "haha.#"})
231
231
  m = mock("Bunny")
232
- m.expects(:queue).with("some_queue", :durable => true, :passive => false, :auto_delete => false, :exclusive => false).returns(q)
232
+ m.expects(:queue).with("some_queue", :durable => true, :passive => false, :auto_delete => false, :exclusive => false, :arguments => {"foo" => "fighter"}).returns(q)
233
233
  @pub.expects(:bunny).returns(m)
234
234
 
235
235
  @pub.send(:queue, "some_queue")
@@ -61,23 +61,14 @@ module Beetle
61
61
  end
62
62
  end
63
63
 
64
- class BrokenRedisShutdownTest < Test::Unit::TestCase
64
+ class RedisShutdownTest < Test::Unit::TestCase
65
65
  def setup
66
66
  @r = Redis.new(:host => "localhost", :port => 6390)
67
67
  end
68
68
 
69
- # if this test fails after upgrading redis, we can probably remove
70
- # our custom shutdown method from redis_ext.rb
71
- test "orginal redis shutdown implementation is broken" do
72
- @r.client.expects(:call_without_reply).with([:shutdown]).once
73
- @r.client.expects(:disconnect).never
74
- @r.broken_shutdown
75
- end
76
-
77
- test "patched redis shutdown implementation should call :shutdown and rescue Errno::ECONNREFUSED" do
78
- @r.client.expects(:call).with([:shutdown]).once.raises(Errno::ECONNREFUSED)
79
- @r.client.expects(:disconnect).once
80
- @r.shutdown
69
+ test "redis shutdown implementation should call :shutdown and return nil" do
70
+ @r.client.expects(:call).with([:shutdown]).once.raises(Redis::ConnectionError)
71
+ assert_nil @r.shutdown
81
72
  end
82
73
  end
83
74
 
@@ -128,12 +128,12 @@ module Beetle
128
128
  end
129
129
 
130
130
  test "binding a queue should create it using the config and bind it to the exchange with the name specified" do
131
- @client.register_queue("some_queue", "durable" => true, "exchange" => "some_exchange", "key" => "haha.#")
131
+ @client.register_queue("some_queue", "durable" => true, "exchange" => "some_exchange", "key" => "haha.#", "arguments" => {"schmu" => 5})
132
132
  @sub.expects(:exchange).with("some_exchange").returns(:the_exchange)
133
133
  q = mock("queue")
134
134
  q.expects(:bind).with(:the_exchange, {:key => "haha.#"})
135
135
  m = mock("MQ")
136
- m.expects(:queue).with("some_queue", :durable => true, :passive => false, :auto_delete => false, :exclusive => false).returns(q)
136
+ m.expects(:queue).with("some_queue", :durable => true, :passive => false, :auto_delete => false, :exclusive => false, :arguments => {"schmu" => 5}).returns(q)
137
137
  @sub.expects(:channel).returns(m)
138
138
 
139
139
  @sub.send(:queue, "some_queue")
@@ -1,4 +1,10 @@
1
1
  require 'rubygems'
2
+ if RUBY_VERSION >= "1.9"
3
+ require 'simplecov'
4
+ SimpleCov.start do
5
+ add_filter "/test/"
6
+ end
7
+ end
2
8
  require 'test/unit'
3
9
  require 'mocha'
4
10
  require 'active_support/testing/declarative'
@@ -7,14 +13,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../lib/beetle')
7
13
  require File.expand_path(File.dirname(__FILE__) + '/colorized_test_output')
8
14
 
9
15
  # we can remove this hack which is needed only for testing
10
- begin
11
- require 'qrack/errors'
12
- rescue LoadError
13
- module Qrack
14
- class BufferOverflowError < StandardError; end
15
- class InvalidTypeError < StandardError; end
16
- end
17
- end
16
+ require 'qrack/errors'
18
17
 
19
18
 
20
19
  class Test::Unit::TestCase
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424051
4
+ hash: -3659944352
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
9
  - 0
10
10
  - rc
11
- - 11
12
- version: 0.3.0.rc.11
11
+ - 14
12
+ version: 0.3.0.rc.14
13
13
  platform: ruby
14
14
  authors:
15
15
  - Stefan Kaes
@@ -21,7 +21,7 @@ autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
23
 
24
- date: 2011-12-27 00:00:00 Z
24
+ date: 2012-07-01 00:00:00 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: uuid4r
@@ -47,12 +47,12 @@ dependencies:
47
47
  requirements:
48
48
  - - "="
49
49
  - !ruby/object:Gem::Version
50
- hash: 19
50
+ hash: 17
51
51
  segments:
52
52
  - 0
53
53
  - 7
54
- - 8
55
- version: 0.7.8
54
+ - 9
55
+ version: 0.7.9
56
56
  type: :runtime
57
57
  version_requirements: *id002
58
58
  - !ruby/object:Gem::Dependency
@@ -63,12 +63,12 @@ dependencies:
63
63
  requirements:
64
64
  - - "="
65
65
  - !ruby/object:Gem::Version
66
- hash: 3
66
+ hash: 5
67
67
  segments:
68
- - 2
69
- - 2
70
- - 2
71
- version: 2.2.2
68
+ - 3
69
+ - 0
70
+ - 1
71
+ version: 3.0.1
72
72
  type: :runtime
73
73
  version_requirements: *id003
74
74
  - !ruby/object:Gem::Dependency
@@ -79,12 +79,12 @@ dependencies:
79
79
  requirements:
80
80
  - - "="
81
81
  - !ruby/object:Gem::Version
82
- hash: 7
82
+ hash: 5
83
83
  segments:
84
84
  - 0
85
85
  - 4
86
- - 4
87
- version: 0.4.4
86
+ - 5
87
+ version: 0.4.5
88
88
  type: :runtime
89
89
  version_requirements: *id004
90
90
  - !ruby/object:Gem::Dependency
@@ -95,12 +95,12 @@ dependencies:
95
95
  requirements:
96
96
  - - "="
97
97
  - !ruby/object:Gem::Version
98
- hash: 49
98
+ hash: 61
99
99
  segments:
100
100
  - 0
101
- - 8
102
- - 7
103
- version: 0.8.7
101
+ - 9
102
+ - 3
103
+ version: 0.9.3
104
104
  type: :runtime
105
105
  version_requirements: *id005
106
106
  - !ruby/object:Gem::Dependency
@@ -111,12 +111,12 @@ dependencies:
111
111
  requirements:
112
112
  - - "="
113
113
  - !ruby/object:Gem::Version
114
- hash: 55
114
+ hash: 61
115
115
  segments:
116
116
  - 0
117
- - 8
118
- - 4
119
- version: 0.8.4
117
+ - 9
118
+ - 3
119
+ version: 0.9.3
120
120
  type: :runtime
121
121
  version_requirements: *id006
122
122
  - !ruby/object:Gem::Dependency
@@ -130,9 +130,9 @@ dependencies:
130
130
  hash: 55
131
131
  segments:
132
132
  - 0
133
- - 8
134
- - 4
135
- version: 0.8.4
133
+ - 9
134
+ - 6
135
+ version: 0.9.6
136
136
  type: :runtime
137
137
  version_requirements: *id007
138
138
  - !ruby/object:Gem::Dependency
@@ -183,80 +183,6 @@ dependencies:
183
183
  version: 1.0.10
184
184
  type: :runtime
185
185
  version_requirements: *id010
186
- - !ruby/object:Gem::Dependency
187
- name: rake
188
- prerelease: false
189
- requirement: &id011 !ruby/object:Gem::Requirement
190
- none: false
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- hash: 49
195
- segments:
196
- - 0
197
- - 8
198
- - 7
199
- version: 0.8.7
200
- type: :development
201
- version_requirements: *id011
202
- - !ruby/object:Gem::Dependency
203
- name: mocha
204
- prerelease: false
205
- requirement: &id012 !ruby/object:Gem::Requirement
206
- none: false
207
- requirements:
208
- - - ">="
209
- - !ruby/object:Gem::Version
210
- hash: 3
211
- segments:
212
- - 0
213
- version: "0"
214
- type: :development
215
- version_requirements: *id012
216
- - !ruby/object:Gem::Dependency
217
- name: rcov
218
- prerelease: false
219
- requirement: &id013 !ruby/object:Gem::Requirement
220
- none: false
221
- requirements:
222
- - - ">="
223
- - !ruby/object:Gem::Version
224
- hash: 3
225
- segments:
226
- - 0
227
- version: "0"
228
- type: :development
229
- version_requirements: *id013
230
- - !ruby/object:Gem::Dependency
231
- name: cucumber
232
- prerelease: false
233
- requirement: &id014 !ruby/object:Gem::Requirement
234
- none: false
235
- requirements:
236
- - - ">="
237
- - !ruby/object:Gem::Version
238
- hash: 7
239
- segments:
240
- - 0
241
- - 7
242
- - 2
243
- version: 0.7.2
244
- type: :development
245
- version_requirements: *id014
246
- - !ruby/object:Gem::Dependency
247
- name: daemon_controller
248
- prerelease: false
249
- requirement: &id015 !ruby/object:Gem::Requirement
250
- none: false
251
- requirements:
252
- - - ">="
253
- - !ruby/object:Gem::Version
254
- hash: 3
255
- segments:
256
- - 0
257
- version: "0"
258
- type: :development
259
- version_requirements: *id015
260
186
  description: A highly available, reliable messaging infrastructure
261
187
  email: opensource@xing.com
262
188
  executables:
@@ -324,6 +250,7 @@ files:
324
250
  - MIT-LICENSE
325
251
  - test/beetle/amqp_gem_behavior_test.rb
326
252
  - test/beetle/base_test.rb
253
+ - test/beetle/beetle_test.rb
327
254
  - test/beetle/client_test.rb
328
255
  - test/beetle/configuration_test.rb
329
256
  - test/beetle/deduplication_store_test.rb
@@ -371,13 +298,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
371
298
  requirements: []
372
299
 
373
300
  rubyforge_project:
374
- rubygems_version: 1.8.10
301
+ rubygems_version: 1.8.24
375
302
  signing_key:
376
303
  specification_version: 3
377
304
  summary: High Availability AMQP Messaging with Redundant Queues
378
305
  test_files:
379
306
  - test/beetle/amqp_gem_behavior_test.rb
380
307
  - test/beetle/base_test.rb
308
+ - test/beetle/beetle_test.rb
381
309
  - test/beetle/client_test.rb
382
310
  - test/beetle/configuration_test.rb
383
311
  - test/beetle/deduplication_store_test.rb