danielsdeleo-moqueue 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 1
4
+ :patch: 2
@@ -32,7 +32,10 @@ module Moqueue
32
32
  end
33
33
 
34
34
  def acked_messages
35
- @acked_messages ||= []
35
+ attached_queues.map do |q|
36
+ q = q.first if q.kind_of?(Array)
37
+ q.acked_messages
38
+ end.flatten
36
39
  end
37
40
 
38
41
  def attach_queue(queue, opts={})
@@ -46,7 +49,7 @@ module Moqueue
46
49
  def publish(message, opts={})
47
50
  require_routing_key(opts) if topic
48
51
  matching_queues(opts).each do |q|
49
- ack_message(q.receive(message, prepare_header_opts(opts)))
52
+ q.receive(message, prepare_header_opts(opts))
50
53
  end
51
54
  end
52
55
 
@@ -56,10 +59,6 @@ module Moqueue
56
59
 
57
60
  private
58
61
 
59
- def ack_message(message)
60
- acked_messages << message if message
61
- end
62
-
63
62
  def routing_keys_match?(binding_key, message_key)
64
63
  BindingKey.new(binding_key).matches?(message_key)
65
64
  end
@@ -111,4 +110,4 @@ module Moqueue
111
110
  end
112
111
  end
113
112
 
114
- end
113
+ end
@@ -35,8 +35,7 @@ module Moqueue
35
35
  if callback = message_handler_callback
36
36
  headers = MockHeaders.new(header_opts)
37
37
  callback.call(*(callback.arity == 1 ? [message] : [headers, message]))
38
- received_messages << message
39
- @ack_msgs && headers.received_ack? ? message : nil
38
+ received_messages_and_headers << {:message => message, :headers => headers}
40
39
  else
41
40
  receive_message_later(message, header_opts)
42
41
  end
@@ -56,10 +55,10 @@ module Moqueue
56
55
 
57
56
  def publish(message, opts = {})
58
57
  if message_handler_callback
59
- real_publish(message)
58
+ receive(message)
60
59
  else
61
60
  deferred_publishing_fibers << Fiber.new do
62
- real_publish(message)
61
+ receive(message)
63
62
  end
64
63
  end
65
64
  end
@@ -68,13 +67,19 @@ module Moqueue
68
67
  exchange.attach_queue(self, key)
69
68
  self
70
69
  end
70
+
71
+ def received_messages_and_headers
72
+ @received_messages_and_headers ||= []
73
+ end
71
74
 
72
75
  def received_messages
73
- @received_messages ||= []
76
+ received_messages_and_headers.map{|r| r[:message] }
74
77
  end
75
78
 
76
79
  def acked_messages
77
- @acked_messages ||= []
80
+ received_messages_and_headers.map do |r|
81
+ r[:message] if @ack_msgs && r[:headers].received_ack?
82
+ end
78
83
  end
79
84
 
80
85
  def run_callback(*args)
@@ -116,11 +121,6 @@ module Moqueue
116
121
  end
117
122
  end
118
123
 
119
- def real_publish(message)
120
- response = receive(message)
121
- acked_messages << response if response
122
- end
123
-
124
124
  end
125
125
 
126
- end
126
+ end
data/moqueue.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{moqueue}
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Daniel DeLeo"]
9
- s.date = %q{2009-07-24}
9
+ s.date = %q{2009-07-29}
10
10
  s.description = %q{Mocktacular Companion to AMQP Library. Happy TATFTing!}
11
11
  s.email = %q{dan@kallistec.com}
12
12
  s.extra_rdoc_files = ["README.rdoc"]
@@ -13,7 +13,7 @@ require File.dirname(__FILE__) + '/example_helper'
13
13
  describe Moqueue, "when running the ack example" do
14
14
  include ExampleHelper
15
15
 
16
- def run_ack_example
16
+ def run_ack_example(&perform_ack)
17
17
  AMQP.start(:host => 'localhost') do
18
18
  MQ.queue('awesome').publish('Totally rad 1')
19
19
  MQ.queue('awesome').publish('Totally rad 2')
@@ -32,7 +32,7 @@ describe Moqueue, "when running the ack example" do
32
32
  #puts "#{m} (ignored, redelivered later)"
33
33
  else
34
34
  #puts "received message: " + m
35
- h.ack
35
+ perform_ack.call(h)
36
36
  end
37
37
  end
38
38
  end
@@ -50,11 +50,44 @@ describe Moqueue, "when running the ack example" do
50
50
 
51
51
  it "should get the correct result without errors" do
52
52
  Timeout::timeout(2) do
53
- run_ack_example
53
+ run_ack_example {|h| h.ack }
54
54
  end
55
55
  q = MQ.queue('awesome')
56
+ q.should have(3).acked_messages
56
57
  q.received_ack_for_message?('Totally rad 1').should be_true
57
58
  q.received_ack_for_message?('Totally rad 2').should be_true
58
59
  q.received_ack_for_message?('Totally rad 3').should be_true
59
60
  end
60
- end
61
+
62
+ it "should be able to ack in an EM.next_tick" do
63
+ Timeout::timeout(2) do
64
+ run_ack_example do |h|
65
+ EM.next_tick { h.ack }
66
+ end
67
+ end
68
+ q = MQ.queue('awesome')
69
+ q.should have(3).acked_messages
70
+ q.received_ack_for_message?('Totally rad 1').should be_true
71
+ q.received_ack_for_message?('Totally rad 2').should be_true
72
+ q.received_ack_for_message?('Totally rad 3').should be_true
73
+ end
74
+
75
+ it "should be able to ack in an EM.defer callback" do
76
+ Timeout::timeout(2) do
77
+ run_ack_example do |h|
78
+ EM.defer(proc {
79
+ 1337
80
+ },
81
+ proc { |result|
82
+ result.should == 1337
83
+ h.ack
84
+ })
85
+ end
86
+ end
87
+ q = MQ.queue('awesome')
88
+ q.should have(3).acked_messages
89
+ q.received_ack_for_message?('Totally rad 1').should be_true
90
+ q.received_ack_for_message?('Totally rad 2').should be_true
91
+ q.received_ack_for_message?('Totally rad 3').should be_true
92
+ end
93
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danielsdeleo-moqueue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel DeLeo
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-24 00:00:00 -07:00
12
+ date: 2009-07-29 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -58,6 +58,7 @@ files:
58
58
  - spec/unit/overloads_spec.rb
59
59
  has_rdoc: false
60
60
  homepage: http://github.com/danielsdeleo/moqueue
61
+ licenses:
61
62
  post_install_message:
62
63
  rdoc_options:
63
64
  - --inline-source
@@ -79,7 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  requirements: []
80
81
 
81
82
  rubyforge_project:
82
- rubygems_version: 1.2.0
83
+ rubygems_version: 1.3.5
83
84
  signing_key:
84
85
  specification_version: 3
85
86
  summary: Mocktacular Companion to AMQP Library. Happy TATFTing!