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 +1 -1
- data/lib/moqueue/mock_exchange.rb +6 -7
- data/lib/moqueue/mock_queue.rb +12 -12
- data/moqueue.gemspec +2 -2
- data/spec/examples/ack_spec.rb +37 -4
- metadata +4 -3
data/VERSION.yml
CHANGED
@@ -32,7 +32,10 @@ module Moqueue
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def acked_messages
|
35
|
-
|
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
|
-
|
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
|
data/lib/moqueue/mock_queue.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
58
|
+
receive(message)
|
60
59
|
else
|
61
60
|
deferred_publishing_fibers << Fiber.new do
|
62
|
-
|
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
|
-
|
76
|
+
received_messages_and_headers.map{|r| r[:message] }
|
74
77
|
end
|
75
78
|
|
76
79
|
def acked_messages
|
77
|
-
|
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.
|
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-
|
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"]
|
data/spec/examples/ack_spec.rb
CHANGED
@@ -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
|
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
|
-
|
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.
|
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-
|
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.
|
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!
|