euston-rabbitmq 1.1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  source :rubygems
2
2
  gemspec
3
3
 
4
- gem 'safely', :git => 'https://github.com/leemhenson/safely.git', :branch => 'override_strategies'
4
+ gem 'hot_bunnies', :git => 'https://github.com/ruby-amqp/hot_bunnies.git'
5
+ gem 'safely', :git => 'https://github.com/leemhenson/safely.git', :branch => 'override_strategies'
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'euston-rabbitmq'
3
- s.version = '1.1.0'
3
+ s.version = '1.2.1'
4
4
  s.platform = RUBY_PLATFORM.to_s == 'java' ? 'java' : Gem::Platform::RUBY
5
5
  s.authors = ['Lee Henson', 'Guy Boertje']
6
6
  s.email = ['lee.m.henson@gmail.com', 'guyboertje@gmail.com']
@@ -21,8 +21,8 @@ Gem::Specification.new do |s|
21
21
  lib/euston-rabbitmq/euston/handler_binder.rb
22
22
  lib/euston-rabbitmq/euston/queues.rb
23
23
  lib/euston-rabbitmq/euston/retrying_subscription.rb
24
- lib/euston-rabbitmq/rabbitmq_client/queue.rb
25
- lib/euston-rabbitmq/rabbitmq_client/reactive_message.rb
24
+ lib/euston-rabbitmq/hot_bunnies/queue.rb
25
+ lib/euston-rabbitmq/hot_bunnies/reactive_message.rb
26
26
  lib/euston-rabbitmq/reflection/constant_loader.rb
27
27
  lib/euston-rabbitmq/reflection/handler_finder.rb
28
28
  lib/euston-rabbitmq/reflection/handler_reference.rb
@@ -44,13 +44,13 @@ Gem::Specification.new do |s|
44
44
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
45
45
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
46
46
 
47
- s.add_dependency 'activesupport', '~> 3.0.10'
48
- s.add_dependency 'euston', '~> 1.1.0'
49
- s.add_dependency 'euston-eventstore', '~> 1.1.0'
47
+ s.add_dependency 'activesupport', '>= 3.0.10'
48
+ s.add_dependency 'euston', '~> 1.2.0'
49
+ s.add_dependency 'euston-eventstore', '~> 1.2.0'
50
50
  s.add_dependency 'hash-keys', '~> 1.0.0'
51
51
  s.add_dependency 'hollywood', '~> 1.0.0'
52
- s.add_dependency 'i18n', '~> 0.5.0'
53
- s.add_dependency 'jessica', '~> 1.0.0' if RUBY_PLATFORM.to_s == 'java'
52
+ s.add_dependency 'i18n', '>= 0.5.0'
53
+ s.add_dependency 'hot_bunnies', '~> 1.3.0.pre1' if RUBY_PLATFORM.to_s == 'java'
54
54
  s.add_dependency 'safely', '~> 0.3.0'
55
55
 
56
56
  s.add_development_dependency 'awesome_print', '~> 0.4.0'
@@ -4,7 +4,7 @@ require 'active_support/ordered_hash'
4
4
  require 'hash-keys'
5
5
  require 'hollywood'
6
6
  require 'i18n'
7
- require 'jessica' if RUBY_PLATFORM == 'java'
7
+ require 'hot_bunnies' if RUBY_PLATFORM == 'java'
8
8
  require 'safely'
9
9
 
10
10
  require 'euston'
@@ -14,8 +14,8 @@ require 'euston-rabbitmq/reflection/constant_loader'
14
14
  require 'euston-rabbitmq/reflection/handler_finder'
15
15
  require 'euston-rabbitmq/reflection/handler_reference'
16
16
 
17
- require 'euston-rabbitmq/rabbitmq_client/reactive_message'
18
- require 'euston-rabbitmq/rabbitmq_client/queue'
17
+ require 'euston-rabbitmq/hot_bunnies/reactive_message'
18
+ require 'euston-rabbitmq/hot_bunnies/queue'
19
19
 
20
20
  require 'euston-rabbitmq/euston/errors'
21
21
  require 'euston-rabbitmq/euston/exchanges'
@@ -1,23 +1,33 @@
1
1
  module Euston
2
2
  module RabbitMq
3
3
  class CommandHandlerBinder < HandlerBinder
4
+ include AggregateRootPrivateMethodNames
5
+
4
6
  private
5
7
 
6
- def ensure_bindings_exist_for_reference channel, reference
8
+ def ensure_bindings_exist_for_reference reference
7
9
  queue_name = :command_handlers
8
- queue = get_command_handler_queue channel, queue_name
10
+ queue = get_command_handler_queue @channel, queue_name
11
+
12
+ if reference.handler.included_modules.include? AggregateRoot
13
+ routing_keys = reference.handler.instance_methods.map { |m| self.class.consumes_regex.match m }.compact.map { |m| m[1] }
14
+ else
15
+ routing_keys = ["#{reference.name.to_s.underscore}"]
16
+ end
9
17
 
10
- routing_key = "commands.#{reference.name.to_s.underscore}"
18
+ exchange = get_exchange @channel, :commands
11
19
 
12
- @log.debug "Ensuring routing key exists for queue #{queue_name}: #{routing_key}"
20
+ routing_keys.each do |routing_key|
21
+ routing_key = "commands.#{routing_key}"
13
22
 
14
- exchange = get_exchange channel, :commands
15
- queue.bind exchange, :routing_key => routing_key
23
+ @log.debug "Ensuring routing key exists for queue #{queue_name}: #{routing_key}"
24
+ queue.bind exchange, :routing_key => routing_key
25
+ end
16
26
  end
17
27
 
18
28
  def get_command_handler_queue channel, queue_name
19
29
  @log.debug "Ensuring command handler queue exists: #{queue_name}" if @command_handler_queue.nil?
20
- @command_handler_queue ||= get_queue channel, queue_name
30
+ @command_handler_queue ||= get_queue @channel, queue_name
21
31
  end
22
32
  end
23
33
  end
@@ -3,12 +3,12 @@ module Euston
3
3
  class EventHandlerBinder < HandlerBinder
4
4
  private
5
5
 
6
- def ensure_bindings_exist_for_reference channel, reference
6
+ def ensure_bindings_exist_for_reference reference
7
7
  queue_name = reference.name.to_s.underscore
8
8
 
9
9
  @log.debug "Ensuring event handler queue exists: #{queue_name}"
10
10
 
11
- queue = get_queue channel, queue_name
11
+ queue = get_queue @channel, queue_name
12
12
 
13
13
  prefix = '__event_handler__'
14
14
 
@@ -17,7 +17,7 @@ module Euston
17
17
  methods = methods.map { |method| method.to_s[prefix.length, method.to_s.length - prefix.length] }
18
18
  methods = methods.map { |method| method.split('__').first }
19
19
 
20
- exchange = get_exchange channel, :events
20
+ exchange = get_exchange @channel, :events
21
21
 
22
22
  methods.uniq.each do |method|
23
23
  routing_key = "events.#{method}"
@@ -10,7 +10,7 @@ module Euston
10
10
  end
11
11
 
12
12
  def get_exchange channel, name, opts = {}
13
- channel.topic name.to_s, default_exchange_options.merge(opts)
13
+ channel.exchange name.to_s, default_exchange_options.merge(:type => :topic).merge(opts)
14
14
  end
15
15
  end
16
16
  end
@@ -4,21 +4,15 @@ module Euston
4
4
  include Euston::RabbitMq::Queues
5
5
  include Euston::RabbitMq::Exchanges
6
6
 
7
- def initialize references, logger = Euston::NullLogger.instance
7
+ def initialize channel, references, logger = Euston::NullLogger.instance
8
+ @channel = channel
8
9
  @references = references
9
10
  @log = logger
10
11
  end
11
12
 
12
13
  def ensure_bindings_exist
13
- begin
14
- channel = AMQP::Channel.new
15
- channel.prefetch 1
16
-
17
- @references.each do |reference|
18
- ensure_bindings_exist_for_reference channel, reference
19
- end
20
- ensure
21
- channel.disconnect unless channel.nil?
14
+ @references.each do |reference|
15
+ ensure_bindings_exist_for_reference reference
22
16
  end
23
17
  end
24
18
  end
@@ -12,13 +12,13 @@ module Euston
12
12
  end
13
13
 
14
14
  def subscribe
15
- queue.when(:message_decode_failed => method(:log_decode_failure),
16
- :message_failed => method(:handle_failure),
17
- :message_received => method(:call_handler))
18
-
19
15
  queue.safe_subscribe
20
16
  end
21
17
 
18
+ def get
19
+ queue.safe_get
20
+ end
21
+
22
22
  private
23
23
 
24
24
  def call_handler message
@@ -38,7 +38,7 @@ module Euston
38
38
  :body =>
39
39
  {
40
40
  :message => failed_message,
41
- :routing_key => reactive_message.method.routing_key,
41
+ :routing_key => reactive_message.headers.routing_key,
42
42
  :error => error.message,
43
43
  :backtrace => error.backtrace
44
44
  }
@@ -46,51 +46,56 @@ module Euston
46
46
  end
47
47
 
48
48
  def handle_failure message, error, reactive_message
49
+ return reactive_message.reject if error.is_a? Euston::EventStore::ConcurrencyError
50
+
49
51
  failures = message[:failures] || 0
50
52
  failures = failures + 1
51
53
  message[:failures] = failures
52
54
 
53
55
  begin
54
- if failures == 3
56
+ if failures == 5
55
57
  debug_message = "Message failed, out of retries"
56
58
 
57
59
  message.delete :failures
58
60
  message = create_message_failed_message error, message, reactive_message
59
61
 
60
- options = { :key => 'events.message_failed' }
62
+ options = { :routing_key => 'events.message_failed' }
61
63
  exchange = :events
62
64
  else
63
65
  debug_message = "Message failed, retrying"
64
-
65
- options = { :key => reactive_message.method.routing_key }
66
- exchange = reactive_message.method.routing_key.split('.').first.to_sym
66
+ options = { :routing_key => reactive_message.headers.routing_key }
67
+ exchange = reactive_message.headers.routing_key.split('.').first.to_sym
67
68
  end
68
69
 
69
70
  options = default_publish_options.merge options
70
71
  exchange = get_exchange @channel, exchange
71
72
  message = ActiveSupport::JSON.encode message
72
-
73
- @log.debug "#{debug_message}: #{message}"
74
-
75
73
  exchange.publish message, options
76
74
 
77
75
  reactive_message.ack
78
76
  rescue StandardError => e
79
- reactive_message.reject :requeue => true
77
+ reactive_message.reject
80
78
  raise e
81
79
  end
82
80
  end
83
81
 
84
82
  def log_decode_failure message, error
85
83
  text = "A handler queue subscription failed. [Error] #{error.message} [Payload] #{message}"
86
- error = Euston::RabbitMq::MessageDecodeFailedError.new text
87
- error.set_backtrace error.backtrace
84
+ wrapper = Euston::RabbitMq::MessageDecodeFailedError.new text
85
+ wrapper.set_backtrace error.backtrace
88
86
 
89
- raise error
87
+ raise wrapper
90
88
  end
91
89
 
92
90
  def queue
93
- @queue ||= get_queue @channel, @queue_name
91
+ if @queue.nil?
92
+ @queue = get_queue @channel, @queue_name
93
+ @queue.when(:message_decode_failed => method(:log_decode_failure),
94
+ :message_failed => method(:handle_failure),
95
+ :message_received => method(:call_handler))
96
+ end
97
+
98
+ @queue
94
99
  end
95
100
  end
96
101
  end
@@ -1,19 +1,22 @@
1
- class RabbitMQClient
1
+ module HotBunnies
2
2
  class Queue
3
3
  include Hollywood
4
4
 
5
5
  attr_writer :timeout
6
6
 
7
+ def consumer auto_ack = false
8
+ consumer = QueueingConsumer.new @channel
9
+ @channel.basic_consume @name, auto_ack, consumer
10
+ consumer
11
+ end
12
+
7
13
  def delivery_timeout
8
14
  @timeout ||= 500
9
15
  end
10
16
 
11
- def safe_subscribe
12
- _consumer = self.consumer
13
-
14
- until Thread.current[:stop] do
15
- safe_subscribe_with_timeout(_consumer, self.delivery_timeout)
16
- end
17
+ def safe_get
18
+ message = get :ack => true
19
+ safe_handle_message ReactiveMessage.new(@channel, *message) unless message.nil?
17
20
  end
18
21
 
19
22
  def safe_handle_message reactive_message
@@ -22,29 +25,33 @@ class RabbitMQClient
22
25
 
23
26
  begin
24
27
  callback :message_received, message
25
- reactive_message.ack!
28
+ reactive_message.ack
26
29
  rescue Euston::EventStore::ConcurrencyError
27
- reactive_message.reject! true #requeue
30
+ reactive_message.reject #requeue
28
31
  rescue => e
29
32
  callback :message_failed, message, e, reactive_message
30
- Safely.report! e
31
33
  end
32
34
  rescue => e
33
35
  callback :message_decode_failed, reactive_message.body, e
34
- reactive_message.ack!
36
+ reactive_message.ack
35
37
  Safely.report! e
36
38
  end
39
+
40
+ reactive_message.headers.ack unless reactive_message.reacted?
37
41
  end
38
42
 
39
- def consumer auto_ack = false
40
- consumer = QueueingConsumer.new @channel
41
- @channel.basic_consume @name, auto_ack, consumer
42
- consumer
43
+ def safe_subscribe
44
+ _consumer = self.consumer
45
+
46
+ until Thread.current[:stop] do
47
+ safe_subscribe_with_timeout _consumer, self.delivery_timeout
48
+ end
43
49
  end
44
50
 
45
51
  def safe_subscribe_with_timeout consumer, timeout = 500
46
52
  loop do
47
53
  delivery = nil
54
+
48
55
  begin
49
56
  delivery = consumer.next_delivery timeout
50
57
  rescue NativeException => e
@@ -54,10 +61,11 @@ class RabbitMQClient
54
61
 
55
62
  break if delivery.nil?
56
63
 
57
- reactive_message = ReactiveMessage.new @channel, delivery, String.from_java_bytes(delivery.get_body)
58
- safe_handle_message reactive_message
64
+ headers = Headers.new @channel, nil, delivery.envelope, delivery.properties
65
+ body = String.from_java_bytes(delivery.get_body)
59
66
 
60
- @channel.basic_ack(delivery.envelope.delivery_tag, false) if reactive_message.should_acknowledge?
67
+ reactive_message = ReactiveMessage.new @channel, headers, body
68
+ safe_handle_message reactive_message
61
69
  end
62
70
  end
63
71
 
@@ -0,0 +1,26 @@
1
+ module HotBunnies
2
+ class ReactiveMessage
3
+ attr_reader :headers, :body
4
+
5
+ def initialize channel, headers, body
6
+ @channel = channel
7
+ @headers = headers
8
+ @body = body
9
+ @reacted = false
10
+ end
11
+
12
+ def ack opts = {}
13
+ @headers.ack({ :multiple => false }.merge(opts))
14
+ @reacted = true
15
+ end
16
+
17
+ def reject opts = {}
18
+ @headers.reject({ :requeue => true }.merge(opts))
19
+ @reacted = true
20
+ end
21
+
22
+ def reacted?
23
+ @reacted
24
+ end
25
+ end
26
+ end
@@ -1,10 +1,11 @@
1
1
  module Euston
2
2
  module RabbitMq
3
3
  class HandlerFinder
4
- def initialize required_mixins = []
4
+ def initialize required_mixins = [], logger = Euston::NullLogger.instance
5
5
  @namespaces = []
6
6
  @constant_loader = ConstantLoader.new.when(:hit => method(:store_found_constant), :miss => method(:log_failed_lookup))
7
7
  @required_mixins = required_mixins
8
+ @log = logger
8
9
  end
9
10
 
10
11
  attr_reader :namespaces
@@ -32,7 +33,7 @@ module Euston
32
33
  end
33
34
 
34
35
  def log_failed_lookup string
35
- EUSTON_LOG.warn "Couldn't find handler namespace: #{string}" if Object.const_defined?('EUSTON_LOG')
36
+ @log.warn "Couldn't find handler namespace: #{string}"
36
37
  end
37
38
 
38
39
  def map_namespaces_to_references
@@ -41,7 +42,7 @@ module Euston
41
42
  @namespaces.each do |namespace|
42
43
  references.push *(namespace.constants.map do |constant|
43
44
  reference = HandlerReference.new namespace, namespace.const_get(constant), constant
44
- reference = nil unless @required_mixins.all? { |mixin| reference.handler.included_modules.include? mixin }
45
+ reference = nil unless @required_mixins.empty? || @required_mixins.any? { |mixin| reference.handler.included_modules.include? mixin }
45
46
  reference
46
47
  end.to_a - [nil])
47
48
  end
@@ -1,5 +1,5 @@
1
1
  module Euston
2
2
  module RabbitMq
3
- VERSION = "1.1.0"
3
+ VERSION = "1.2.1"
4
4
  end
5
5
  end
@@ -12,8 +12,8 @@ describe 'command handler binder', :rabbitmq do
12
12
 
13
13
  let(:handler) { CommandHandlerBinderTesting::AbcHandler }
14
14
  let(:handler_finder) { Euston::RabbitMq::HandlerFinder.new.tap { |f| f.namespaces.push 'CommandHandlerBinderTesting' } }
15
- let(:binder) { Euston::RabbitMq::CommandHandlerBinder.new handler_finder.find }
16
- let(:bindings) { @rabbitmqadmin.list_bindings AMQP_OPTS[:vhost] }
15
+ let(:binder) { Euston::RabbitMq::CommandHandlerBinder.new @channel, handler_finder.find }
16
+ let(:bindings) { @rabbitmqadmin.list_bindings @amqp_config[:vhost] }
17
17
 
18
18
  before { binder.ensure_bindings_exist }
19
19
 
@@ -22,8 +22,8 @@ describe 'event handler binder', :rabbitmq do
22
22
 
23
23
  let(:handler) { EventHandlerBinderTesting::XyzHandler }
24
24
  let(:handler_finder) { Euston::RabbitMq::HandlerFinder.new.tap { |f| f.namespaces.push 'EventHandlerBinderTesting' } }
25
- let(:binder) { Euston::RabbitMq::EventHandlerBinder.new handler_finder.find }
26
- let(:bindings) { @rabbitmqadmin.list_bindings AMQP_OPTS[:vhost] }
25
+ let(:binder) { Euston::RabbitMq::EventHandlerBinder.new @channel, handler_finder.find }
26
+ let(:bindings) { @rabbitmqadmin.list_bindings @amqp_config[:vhost] }
27
27
 
28
28
  before { binder.ensure_bindings_exist }
29
29
 
@@ -13,15 +13,5 @@ describe 'exchanges', :rabbitmq do
13
13
  subject { get_exchange @channel, :events }
14
14
  its(:name) { should == 'events' }
15
15
  end
16
-
17
- context 'obtaining the same exchange instance' do
18
- let(:name) { "exchange_#{Time.now.to_i}" }
19
- let(:instance_1) { get_exchange @channel, name }
20
- let(:instance_2) { get_exchange @channel, name }
21
-
22
- subject { instance_1 }
23
-
24
- it { should equal instance_2 }
25
- end
26
16
  end
27
17
  end
@@ -11,14 +11,5 @@ describe 'queues', :rabbitmq do
11
11
 
12
12
  its(:name) { should == name }
13
13
  end
14
-
15
- context 'obtaining the same queue instance' do
16
- let(:instance_1) { get_queue(@channel, name) }
17
- let(:instance_2) { get_queue(@channel, name) }
18
-
19
- subject { instance_1 }
20
-
21
- it { should equal instance_2 }
22
- end
23
14
  end
24
15
  end
@@ -15,13 +15,13 @@ describe 'retrying subscription', :rabbitmq do
15
15
  let(:message) { { :x => 123 } }
16
16
  let(:routing_key) { 'events.failing' }
17
17
  let(:error) { 'kablammo' }
18
+ let(:thread_channel) { @amqp_connection.create_channel }
18
19
 
19
20
  before do
20
21
  failing_handler_queue.bind events_exchange, :routing_key => routing_key
21
22
  failed_message_handler_queue.bind events_exchange, :routing_key => 'events.message_failed'
22
23
 
23
- @thread = Thread.new(failing_queue_name, fail_limit, outcomes) do |name, fail_limit, outcomes|
24
- channel = AMQP::Channel.new
24
+ @thread = Thread.new(thread_channel, failing_queue_name, fail_limit, outcomes) do |channel, name, fail_limit, outcomes|
25
25
  subscription = Euston::RabbitMq::RetryingSubscription.new channel, name
26
26
  subscription.when(:message_received => ->(body) { outcomes[:attempts_to_handle] += 1; raise error if outcomes[:attempts_to_handle] <= fail_limit })
27
27
  subscription.subscribe
@@ -31,7 +31,7 @@ describe 'retrying subscription', :rabbitmq do
31
31
  failing_message_handler_queue_harness.when(:message_received => ->(body) { outcomes[:failure] = body })
32
32
  failing_message_handler_queue_harness.startup
33
33
 
34
- events_exchange.publish ActiveSupport::JSON.encode(message), { :key => routing_key }
34
+ events_exchange.publish ActiveSupport::JSON.encode(message), { :routing_key => routing_key }
35
35
 
36
36
  sleep 0.25
37
37
  end
@@ -39,6 +39,7 @@ describe 'retrying subscription', :rabbitmq do
39
39
  after do
40
40
  failing_message_handler_queue_harness.shutdown
41
41
  @thread.kill
42
+ thread_channel.close
42
43
  end
43
44
 
44
45
  subject { outcomes }
@@ -24,7 +24,7 @@ describe 'queue', :rabbitmq do
24
24
  sleep 0.25
25
25
  end
26
26
 
27
- let(:exchange) { @channel.topic "test-#{Time.now.to_i - 1}", :durable => true, :nowait => false }
27
+ let(:exchange) { @channel.exchange "test-#{Time.now.to_i - 1}", :durable => true, :nowait => false, :type => :topic }
28
28
  let(:harness) { QueueSubscriptionThreadHarness.new queue }
29
29
 
30
30
  before do
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'ap'
2
+ require 'logger'
2
3
  require 'rabbitmqadmin-cli'
3
4
  require 'euston-rabbitmq'
4
5
 
@@ -14,21 +15,32 @@ if jruby?
14
15
  require File.expand_path('../support/queue_subscription_thread_harness', __FILE__)
15
16
  require File.expand_path('../support/filters', __FILE__)
16
17
 
17
- AMQP_OPTS = { :host => 'localhost',
18
- :pass => 'password',
19
- :user => 'euston-rabbitmq-test',
20
- :vhost => 'euston-rabbitmq-test' }
18
+ amqp_config = { :host => 'localhost',
19
+ :pass => 'password',
20
+ :user => 'euston-rabbitmq-test',
21
+ :vhost => 'euston-rabbitmq-test' }
21
22
 
22
23
  RSpec.configure do |config|
23
24
  config.treat_symbols_as_metadata_keys_with_true_values = true
24
25
 
25
- config.before(:each, :amqp) do
26
- initialize_amqp
26
+ config.before(:all, :rabbitmq) do
27
+ @amqp_config = amqp_config
27
28
  end
28
29
 
29
30
  config.before(:each, :rabbitmq) do
30
- initialize_rabbitmq
31
- initialize_amqp
31
+ initialize_rabbitmq amqp_config
32
+
33
+ @amqp_connection = HotBunnies.connect(:host => amqp_config[:host],
34
+ :virtual_host => amqp_config[:vhost],
35
+ :username => amqp_config[:user],
36
+ :password => amqp_config[:pass])
37
+
38
+ @channel = @amqp_connection.create_channel
39
+ end
40
+
41
+ config.after(:each, :rabbitmq) do
42
+ @channel.close
43
+ @amqp_connection.close
32
44
  end
33
45
  end
34
46
  end
@@ -1,10 +1,5 @@
1
- def initialize_amqp
2
- AMQP.settings.merge! AMQP_OPTS
3
- @channel = AMQP::Channel.new
4
- end
5
-
6
- def initialize_rabbitmq
1
+ def initialize_rabbitmq amqp_config
7
2
  @rabbitmqadmin = RabbitMqAdminCli.new
8
- @rabbitmqadmin.initialize_vhost AMQP_OPTS[:vhost]
9
- @rabbitmqadmin.initialize_user AMQP_OPTS[:vhost], AMQP_OPTS[:user], AMQP_OPTS[:pass]
3
+ @rabbitmqadmin.initialize_vhost amqp_config[:vhost]
4
+ @rabbitmqadmin.initialize_user amqp_config[:vhost], amqp_config[:user], amqp_config[:pass]
10
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: euston-rabbitmq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,44 +10,44 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-03 00:00:00.000000000 Z
13
+ date: 2011-10-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
17
- requirement: &84335980 !ruby/object:Gem::Requirement
17
+ requirement: &84701010 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ~>
20
+ - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: 3.0.10
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *84335980
25
+ version_requirements: *84701010
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: euston
28
- requirement: &84335140 !ruby/object:Gem::Requirement
28
+ requirement: &84700770 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: 1.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *84335140
36
+ version_requirements: *84700770
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: euston-eventstore
39
- requirement: &84334370 !ruby/object:Gem::Requirement
39
+ requirement: &84700540 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- version: 1.1.0
44
+ version: 1.2.0
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *84334370
47
+ version_requirements: *84700540
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: hash-keys
50
- requirement: &84333860 !ruby/object:Gem::Requirement
50
+ requirement: &84700310 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.0.0
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *84333860
58
+ version_requirements: *84700310
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: hollywood
61
- requirement: &84332670 !ruby/object:Gem::Requirement
61
+ requirement: &84700080 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,21 +66,21 @@ dependencies:
66
66
  version: 1.0.0
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *84332670
69
+ version_requirements: *84700080
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: i18n
72
- requirement: &84332210 !ruby/object:Gem::Requirement
72
+ requirement: &84699850 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ~>
75
+ - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: 0.5.0
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *84332210
80
+ version_requirements: *84699850
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: safely
83
- requirement: &84331730 !ruby/object:Gem::Requirement
83
+ requirement: &84699610 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 0.3.0
89
89
  type: :runtime
90
90
  prerelease: false
91
- version_requirements: *84331730
91
+ version_requirements: *84699610
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: awesome_print
94
- requirement: &84331020 !ruby/object:Gem::Requirement
94
+ requirement: &84699380 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 0.4.0
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *84331020
102
+ version_requirements: *84699380
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: fuubar
105
- requirement: &84125840 !ruby/object:Gem::Requirement
105
+ requirement: &84699150 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 0.0.0
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *84125840
113
+ version_requirements: *84699150
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: rabbitmqadmin-cli
116
- requirement: &84125000 !ruby/object:Gem::Requirement
116
+ requirement: &84698920 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 1.0.0
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *84125000
124
+ version_requirements: *84698920
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
- requirement: &84124570 !ruby/object:Gem::Requirement
127
+ requirement: &84698690 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,7 +132,7 @@ dependencies:
132
132
  version: 2.6.0
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *84124570
135
+ version_requirements: *84698690
136
136
  description: JRuby RabbitMq bindings
137
137
  email:
138
138
  - lee.m.henson@gmail.com
@@ -152,8 +152,8 @@ files:
152
152
  - lib/euston-rabbitmq/euston/handler_binder.rb
153
153
  - lib/euston-rabbitmq/euston/queues.rb
154
154
  - lib/euston-rabbitmq/euston/retrying_subscription.rb
155
- - lib/euston-rabbitmq/rabbitmq_client/queue.rb
156
- - lib/euston-rabbitmq/rabbitmq_client/reactive_message.rb
155
+ - lib/euston-rabbitmq/hot_bunnies/queue.rb
156
+ - lib/euston-rabbitmq/hot_bunnies/reactive_message.rb
157
157
  - lib/euston-rabbitmq/reflection/constant_loader.rb
158
158
  - lib/euston-rabbitmq/reflection/handler_finder.rb
159
159
  - lib/euston-rabbitmq/reflection/handler_reference.rb
@@ -1,15 +0,0 @@
1
- class RabbitMQClient
2
- class ReactiveMessage
3
- def reject opts = {}
4
- self.reject!(opts.fetch :requeue, true)
5
- end
6
-
7
- def ack multiple = false
8
- self.ack!
9
- end
10
-
11
- def method
12
- self.envelope
13
- end
14
- end
15
- end