klomp 1.0.0 → 1.0.1
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/ChangeLog.md +6 -0
- data/klomp.gemspec +1 -1
- data/lib/klomp.rb +12 -5
- data/lib/klomp/connection.rb +12 -3
- data/lib/klomp/frames.rb +1 -0
- data/spec/klomp/connection_spec.rb +20 -4
- data/spec/klomp_spec.rb +58 -9
- metadata +3 -3
data/ChangeLog.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
Klomp Changes
|
2
2
|
--------------------------------------------------------------------------------
|
3
3
|
|
4
|
+
1.0.1 (2012/10/5)
|
5
|
+
================================================================================
|
6
|
+
|
7
|
+
- Make publish, subscribe, and unsubscribe methods behave like Klomp 0.0.x where
|
8
|
+
the return value is the frame object(s) that was created by the operation.
|
9
|
+
|
4
10
|
1.0.0 (2012/10/3)
|
5
11
|
================================================================================
|
6
12
|
|
data/klomp.gemspec
CHANGED
data/lib/klomp.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class Klomp
|
2
|
-
VERSION = '1.0.
|
2
|
+
VERSION = '1.0.1'
|
3
3
|
|
4
4
|
class Error < StandardError; end
|
5
5
|
|
@@ -24,11 +24,17 @@ class Klomp
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def subscribe(queue, subscriber = nil, &block)
|
27
|
-
connections.
|
27
|
+
connections.map {|conn| conn.subscribe(queue, subscriber, &block) }
|
28
28
|
end
|
29
29
|
|
30
30
|
def unsubscribe(queue)
|
31
|
-
|
31
|
+
if Array === queue
|
32
|
+
raise ArgumentError,
|
33
|
+
"wrong size array for #{connections.size} (#{queue.size})" unless connections.size == queue.size
|
34
|
+
connections.zip(queue).map {|conn,arg| conn.unsubscribe arg rescue nil }
|
35
|
+
else
|
36
|
+
connections.map {|conn| conn.unsubscribe(queue) rescue nil }
|
37
|
+
end
|
32
38
|
end
|
33
39
|
|
34
40
|
def connected?
|
@@ -36,8 +42,9 @@ class Klomp
|
|
36
42
|
end
|
37
43
|
|
38
44
|
def disconnect
|
39
|
-
connections.
|
40
|
-
|
45
|
+
connections.map {|conn| conn.disconnect }.tap do
|
46
|
+
@connections = []
|
47
|
+
end
|
41
48
|
end
|
42
49
|
end
|
43
50
|
|
data/lib/klomp/connection.rb
CHANGED
@@ -40,12 +40,18 @@ class Klomp
|
|
40
40
|
raise Klomp::Error, "subscriber does not respond to #call" if subscriber && !subscriber.respond_to?(:call)
|
41
41
|
previous = subscriptions[queue]
|
42
42
|
subscriptions[queue] = subscriber || block
|
43
|
-
|
43
|
+
frame = Frames::Subscribe.new(queue)
|
44
|
+
if previous
|
45
|
+
frame.previous_subscriber = previous
|
46
|
+
else
|
47
|
+
write frame
|
48
|
+
end
|
44
49
|
start_subscriber_thread
|
45
|
-
|
50
|
+
frame
|
46
51
|
end
|
47
52
|
|
48
53
|
def unsubscribe(queue)
|
54
|
+
queue = queue.headers['destination'] if Frames::Subscribe === queue
|
49
55
|
write Frames::Unsubscribe.new(queue) if subscriptions.delete queue
|
50
56
|
end
|
51
57
|
|
@@ -55,9 +61,11 @@ class Klomp
|
|
55
61
|
def disconnect
|
56
62
|
close!
|
57
63
|
stop_subscriber_thread
|
58
|
-
|
64
|
+
frame = Frames::Disconnect.new
|
65
|
+
write frame rescue nil
|
59
66
|
@socket.close rescue nil
|
60
67
|
@socket = nil
|
68
|
+
frame
|
61
69
|
end
|
62
70
|
|
63
71
|
def reconnect
|
@@ -88,6 +96,7 @@ class Klomp
|
|
88
96
|
|
89
97
|
@socket.write frame.to_s
|
90
98
|
log_frame frame if logger
|
99
|
+
frame
|
91
100
|
rescue Error
|
92
101
|
raise
|
93
102
|
rescue
|
data/lib/klomp/frames.rb
CHANGED
@@ -69,10 +69,12 @@ describe Klomp::Connection do
|
|
69
69
|
|
70
70
|
Given(:connection) { Klomp::Connection.new server, options }
|
71
71
|
|
72
|
-
When { connection.publish "/queue/greeting", "hello" }
|
72
|
+
When(:result) { connection.publish "/queue/greeting", "hello" }
|
73
73
|
|
74
74
|
Then { socket.should have_received(:write).with(frame(:greeting)) }
|
75
75
|
|
76
|
+
Then { result.should be_instance_of(Klomp::Frames::Send) }
|
77
|
+
|
76
78
|
context "logs when logger level is debug" do
|
77
79
|
|
78
80
|
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(debug?: true) } }
|
@@ -89,10 +91,12 @@ describe Klomp::Connection do
|
|
89
91
|
|
90
92
|
context "writes the subscribe message" do
|
91
93
|
|
92
|
-
When { connection.subscribe "/queue/greeting", subscriber }
|
94
|
+
When(:result) { connection.subscribe "/queue/greeting", subscriber }
|
93
95
|
|
94
96
|
Then { socket.should have_received(:write).with(frame(:subscribe)) }
|
95
97
|
|
98
|
+
Then { result.should be_instance_of(Klomp::Frames::Subscribe) }
|
99
|
+
|
96
100
|
context "and logs when logger level is debug" do
|
97
101
|
|
98
102
|
Given(:logger) { double("Logger").as_null_object.tap {|l| l.stub!(debug?: true) } }
|
@@ -201,26 +205,38 @@ describe Klomp::Connection do
|
|
201
205
|
context "unsubscribe" do
|
202
206
|
|
203
207
|
Given(:connection) { Klomp::Connection.new server, options }
|
208
|
+
Given(:arg) { "/queue/greeting" }
|
204
209
|
|
205
210
|
Given { connection.subscriptions["/queue/greeting"] = double "subscribers" }
|
206
211
|
|
207
|
-
When { connection.unsubscribe
|
212
|
+
When(:result) { connection.unsubscribe arg }
|
208
213
|
|
209
214
|
Then { socket.should have_received(:write).with(frame(:unsubscribe)) }
|
210
215
|
|
216
|
+
Then { result.should be_instance_of(Klomp::Frames::Unsubscribe) }
|
217
|
+
|
218
|
+
context "can accept Subscribe frame" do
|
219
|
+
|
220
|
+
Given(:arg) { Klomp::Frames::Subscribe.new "/queue/greeting" }
|
221
|
+
|
222
|
+
Then { socket.should have_received(:write).with(frame(:unsubscribe)) }
|
223
|
+
|
224
|
+
end
|
211
225
|
end
|
212
226
|
|
213
227
|
context "disconnect" do
|
214
228
|
|
215
229
|
Given!(:connection) { Klomp::Connection.new server, options }
|
216
230
|
|
217
|
-
When { connection.disconnect }
|
231
|
+
When(:result) { connection.disconnect }
|
218
232
|
|
219
233
|
Then do
|
220
234
|
socket.should have_received(:write).with(frame(:disconnect))
|
221
235
|
socket.should have_received(:close)
|
222
236
|
end
|
223
237
|
|
238
|
+
Then { result.should be_instance_of(Klomp::Frames::Disconnect) }
|
239
|
+
|
224
240
|
context "makes connection useless (raises error)" do
|
225
241
|
|
226
242
|
Then { expect { connection.publish "/queue/greeting", "hello" }.to raise_error(Klomp::Error) }
|
data/spec/klomp_spec.rb
CHANGED
@@ -43,22 +43,26 @@ describe Klomp do
|
|
43
43
|
|
44
44
|
context "publish" do
|
45
45
|
|
46
|
+
Given(:frame) { double "send frame" }
|
47
|
+
|
46
48
|
context "calls publish on one of the connections" do
|
47
49
|
|
48
50
|
Given do
|
49
51
|
connections.values.each do |conn|
|
50
52
|
conn.stub!(:connected? => false)
|
51
|
-
conn.stub!(:publish).and_return { conn.stub!(:connected? => true) }
|
53
|
+
conn.stub!(:publish).and_return { conn.stub!(:connected? => true); frame }
|
52
54
|
end
|
53
55
|
end
|
54
56
|
|
55
|
-
When { klomp.publish "/queue/greeting", "hello" }
|
57
|
+
When(:result) { klomp.publish "/queue/greeting", "hello" }
|
56
58
|
|
57
59
|
Then { connections.values.select {|conn| conn.connected? }.length.should == 1 }
|
58
60
|
|
59
61
|
Then { connections.values.detect {|conn| conn.connected? }.
|
60
62
|
should have_received(:publish).with("/queue/greeting", "hello", {}) }
|
61
63
|
|
64
|
+
Then { result.should == frame }
|
65
|
+
|
62
66
|
end
|
63
67
|
|
64
68
|
context "calls publish on another connection if the first one fails" do
|
@@ -70,6 +74,7 @@ describe Klomp do
|
|
70
74
|
conn.stub!(:publish).and_return do
|
71
75
|
if first_exception
|
72
76
|
conn.stub!(:connected? => true)
|
77
|
+
frame
|
73
78
|
else
|
74
79
|
first_exception = true
|
75
80
|
raise Klomp::Error.new
|
@@ -78,13 +83,15 @@ describe Klomp do
|
|
78
83
|
end
|
79
84
|
end
|
80
85
|
|
81
|
-
When { klomp.publish "/queue/greeting", "hello" }
|
86
|
+
When(:result) { klomp.publish "/queue/greeting", "hello" }
|
82
87
|
|
83
88
|
Then { connections.values.select {|conn| conn.connected? }.length.should == 1 }
|
84
89
|
|
85
90
|
Then { connections.values.detect {|conn| conn.connected? }.
|
86
91
|
should have_received(:publish).with("/queue/greeting", "hello", {}) }
|
87
92
|
|
93
|
+
Then { result.should == frame }
|
94
|
+
|
88
95
|
end
|
89
96
|
|
90
97
|
context "raises an exception if all connections failed" do
|
@@ -106,12 +113,18 @@ describe Klomp do
|
|
106
113
|
|
107
114
|
context "calls subscribe on all of the servers" do
|
108
115
|
|
109
|
-
Given { connections.values.each {|conn| conn.stub!(:
|
116
|
+
Given { connections.values.each {|conn| conn.stub!(subscribe: 42) } }
|
110
117
|
|
111
|
-
When { klomp.subscribe("/queue/greeting") { true } }
|
118
|
+
When(:result) { klomp.subscribe("/queue/greeting") { true } }
|
112
119
|
|
113
120
|
Then { connections.values.each {|conn| conn.should have_received(:subscribe).with("/queue/greeting", nil) } }
|
114
121
|
|
122
|
+
context "and returns the results of all Connection#subscribe as an array" do
|
123
|
+
|
124
|
+
Then { result.should == Array.new(connections.size, 42) }
|
125
|
+
|
126
|
+
end
|
127
|
+
|
115
128
|
end
|
116
129
|
|
117
130
|
context "fails if any subscribe calls fail" do
|
@@ -130,12 +143,18 @@ describe Klomp do
|
|
130
143
|
|
131
144
|
context "calls unsubscribe on all the servers" do
|
132
145
|
|
133
|
-
Given { connections.values.each {|conn| conn.stub!(:
|
146
|
+
Given { connections.values.each {|conn| conn.stub!(unsubscribe: 42) } }
|
134
147
|
|
135
|
-
When { klomp.unsubscribe("/queue/greeting") }
|
148
|
+
When(:result) { klomp.unsubscribe("/queue/greeting") }
|
136
149
|
|
137
150
|
Then { connections.values.each {|conn| conn.should have_received(:unsubscribe).with("/queue/greeting") } }
|
138
151
|
|
152
|
+
context "and returns the results of all Connection#unsubscribe as an array" do
|
153
|
+
|
154
|
+
Then { result.should == Array.new(connections.size, 42) }
|
155
|
+
|
156
|
+
end
|
157
|
+
|
139
158
|
end
|
140
159
|
|
141
160
|
context "calls unsubscribe on all the servers even if the unsubscribe errs" do
|
@@ -148,18 +167,48 @@ describe Klomp do
|
|
148
167
|
|
149
168
|
end
|
150
169
|
|
170
|
+
context "with an array" do
|
171
|
+
|
172
|
+
context "of length matching the number of connections" do
|
173
|
+
|
174
|
+
Given(:arg) { Array.new(connections.size, 42) }
|
175
|
+
|
176
|
+
Given { connections.values.each {|conn| conn.stub!(:unsubscribe) } }
|
177
|
+
|
178
|
+
When { klomp.unsubscribe arg }
|
179
|
+
|
180
|
+
Then { connections.values.each {|conn| conn.should have_received(:unsubscribe).with(42) } }
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
context "of mismatched length" do
|
185
|
+
|
186
|
+
When(:expect_unsubscribe) { expect { klomp.unsubscribe([]) } }
|
187
|
+
|
188
|
+
Then { expect_unsubscribe.to raise_error(ArgumentError) }
|
189
|
+
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
151
194
|
end
|
152
195
|
|
153
196
|
context "disconnect" do
|
154
197
|
|
155
198
|
context "disconnects all the servers" do
|
156
199
|
|
157
|
-
Given { connections.values.each {|conn| conn.stub!(:
|
200
|
+
Given { connections.values.each {|conn| conn.stub!(disconnect: 42) } }
|
158
201
|
|
159
|
-
When { klomp.disconnect }
|
202
|
+
When(:result) { klomp.disconnect }
|
160
203
|
|
161
204
|
Then { connections.values.each {|conn| conn.should have_received(:disconnect) } }
|
162
205
|
|
206
|
+
context "and returns the results of all Connection#disconnect as an array" do
|
207
|
+
|
208
|
+
Then { result.should == Array.new(connections.size, 42) }
|
209
|
+
|
210
|
+
end
|
211
|
+
|
163
212
|
end
|
164
213
|
|
165
214
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klomp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -224,7 +224,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
224
224
|
version: '0'
|
225
225
|
segments:
|
226
226
|
- 0
|
227
|
-
hash: -
|
227
|
+
hash: -2110109472818919447
|
228
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
229
|
none: false
|
230
230
|
requirements:
|