danielsdeleo-moqueue 0.1.1 → 0.1.2

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/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!