qup 1.1.0
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/.autotest +41 -0
- data/.gemtest +1 -0
- data/ADAPTER_API.rdoc +97 -0
- data/HISTORY.rdoc +9 -0
- data/Manifest.txt +52 -0
- data/README.rdoc +156 -0
- data/Rakefile +246 -0
- data/lib/qup.rb +48 -0
- data/lib/qup/adapter.rb +57 -0
- data/lib/qup/adapter/kestrel.rb +56 -0
- data/lib/qup/adapter/kestrel/destination.rb +54 -0
- data/lib/qup/adapter/kestrel/queue.rb +101 -0
- data/lib/qup/adapter/kestrel/topic.rb +68 -0
- data/lib/qup/adapter/maildir.rb +57 -0
- data/lib/qup/adapter/maildir/queue.rb +123 -0
- data/lib/qup/adapter/maildir/topic.rb +85 -0
- data/lib/qup/adapter/redis.rb +55 -0
- data/lib/qup/adapter/redis/connection.rb +32 -0
- data/lib/qup/adapter/redis/queue.rb +97 -0
- data/lib/qup/adapter/redis/topic.rb +76 -0
- data/lib/qup/consumer.rb +42 -0
- data/lib/qup/message.rb +18 -0
- data/lib/qup/producer.rb +28 -0
- data/lib/qup/publisher.rb +30 -0
- data/lib/qup/queue_api.rb +124 -0
- data/lib/qup/session.rb +111 -0
- data/lib/qup/subscriber.rb +28 -0
- data/lib/qup/topic_api.rb +92 -0
- data/spec/qup/adapter/kestrel/queue_spec.rb +9 -0
- data/spec/qup/adapter/kestrel/topic_spec.rb +9 -0
- data/spec/qup/adapter/kestrel_context.rb +8 -0
- data/spec/qup/adapter/kestrel_spec.rb +8 -0
- data/spec/qup/adapter/maildir/queue_spec.rb +9 -0
- data/spec/qup/adapter/maildir/topic_spec.rb +9 -0
- data/spec/qup/adapter/maildir_context.rb +10 -0
- data/spec/qup/adapter/maildir_spec.rb +8 -0
- data/spec/qup/adapter/redis/queue_spec.rb +9 -0
- data/spec/qup/adapter/redis/topic_spec.rb +9 -0
- data/spec/qup/adapter/redis_context.rb +6 -0
- data/spec/qup/adapter/redis_spec.rb +8 -0
- data/spec/qup/adapter_spec.rb +28 -0
- data/spec/qup/consumer_spec.rb +40 -0
- data/spec/qup/message_spec.rb +13 -0
- data/spec/qup/producer_spec.rb +18 -0
- data/spec/qup/queue_api_spec.rb +21 -0
- data/spec/qup/session_spec.rb +81 -0
- data/spec/qup/shared_adapter_examples.rb +29 -0
- data/spec/qup/shared_queue_examples.rb +71 -0
- data/spec/qup/shared_topic_examples.rb +57 -0
- data/spec/qup/topic_api_spec.rb +21 -0
- data/spec/qup_spec.rb +37 -0
- data/spec/spec_helper.rb +26 -0
- metadata +281 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Qup::TopicAPITest
|
4
|
+
include Qup::TopicAPI
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "Not Implementing the Topic API" do
|
8
|
+
let( :api ) { Qup::TopicAPITest.new }
|
9
|
+
|
10
|
+
%w[ name destroy publisher subscriber_count ].each do |method|
|
11
|
+
it "##{method} kaboom!" do
|
12
|
+
lambda { api.send( method ) }.should raise_error( NotImplementedError, /please implement '#{method}'/ )
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
%w[ publish subscriber ].each do |method|
|
17
|
+
it "##{method} kaboom!" do
|
18
|
+
lambda { api.send( method, nil ) }.should raise_error( NotImplementedError, /please implement '#{method}'/ )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/spec/qup_spec.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require "qup"
|
2
|
+
|
3
|
+
describe Qup do
|
4
|
+
|
5
|
+
let( :path ) { temp_dir( "qup" ) }
|
6
|
+
let( :uri ) { "maildir://#{path}" }
|
7
|
+
|
8
|
+
it "should have a version" do
|
9
|
+
Qup::VERSION.should =~ ( %r[\A\d+\.\d+\.\d+\Z] )
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#open' do
|
13
|
+
it 'returns a new session' do
|
14
|
+
s = Qup.open( uri )
|
15
|
+
s.closed?.should be_false
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'yields a new session' do
|
19
|
+
Qup.open( uri ) do |s|
|
20
|
+
s.closed?.should be_false
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'closes a session at the end of the block' do
|
25
|
+
save_s = nil
|
26
|
+
Qup.open( uri ) do |s|
|
27
|
+
s.closed?.should be_false
|
28
|
+
save_s = s
|
29
|
+
end
|
30
|
+
save_s.closed?.should be_true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
it "opens a new session" do
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "rspec/autorun"
|
2
|
+
require 'qup'
|
3
|
+
|
4
|
+
require 'tmpdir'
|
5
|
+
def temp_dir( token, unique_id = Process.pid )
|
6
|
+
dirname = File.join( Dir.tmpdir, "#{token}-#{unique_id}")
|
7
|
+
FileUtils.mkdir_p( dirname ) unless File.directory?( dirname )
|
8
|
+
# on osx the directory is different when you are in it than what it is when it
|
9
|
+
# is created
|
10
|
+
dirname = Dir.chdir( dirname ) { Dir.pwd }
|
11
|
+
return dirname
|
12
|
+
end
|
13
|
+
|
14
|
+
RSpec.configure do |conf|
|
15
|
+
Qup::KNOWN_ADAPTERS.each do |adapter, gemname|
|
16
|
+
begin
|
17
|
+
require "qup/adapter/#{adapter}"
|
18
|
+
rescue LoadError
|
19
|
+
warn "NOTICE:"
|
20
|
+
warn "NOTICE: The tests for the '#{adapter}' will be skipped as the '#{gemname}' is not installed"
|
21
|
+
warn "NOTICE:"
|
22
|
+
sym = adapter.to_sym
|
23
|
+
conf.filter_run_excluding sym => true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,281 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 19
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 1.1.0
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jeremy Hinegardner
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-03-12 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: maildir
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 15
|
29
|
+
segments:
|
30
|
+
- 2
|
31
|
+
- 0
|
32
|
+
- 0
|
33
|
+
version: 2.0.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: kestrel-client
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 1
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 7
|
48
|
+
- 1
|
49
|
+
version: 0.7.1
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: redis
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 2
|
63
|
+
- 2
|
64
|
+
- 2
|
65
|
+
version: 2.2.2
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: SystemTimer
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 25
|
77
|
+
segments:
|
78
|
+
- 1
|
79
|
+
- 2
|
80
|
+
- 3
|
81
|
+
version: 1.2.3
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: rake
|
86
|
+
prerelease: false
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ~>
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 11
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
- 9
|
96
|
+
- 2
|
97
|
+
- 2
|
98
|
+
version: 0.9.2.2
|
99
|
+
type: :development
|
100
|
+
version_requirements: *id005
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: rcov
|
103
|
+
prerelease: false
|
104
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
hash: 23
|
110
|
+
segments:
|
111
|
+
- 1
|
112
|
+
- 0
|
113
|
+
- 0
|
114
|
+
version: 1.0.0
|
115
|
+
type: :development
|
116
|
+
version_requirements: *id006
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rspec
|
119
|
+
prerelease: false
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
hash: 47
|
126
|
+
segments:
|
127
|
+
- 2
|
128
|
+
- 8
|
129
|
+
- 0
|
130
|
+
version: 2.8.0
|
131
|
+
type: :development
|
132
|
+
version_requirements: *id007
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: rdoc
|
135
|
+
prerelease: false
|
136
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
hash: 31
|
142
|
+
segments:
|
143
|
+
- 3
|
144
|
+
- 12
|
145
|
+
version: "3.12"
|
146
|
+
type: :development
|
147
|
+
version_requirements: *id008
|
148
|
+
description: |-
|
149
|
+
Qup is a generalized API for Message Queue and Publish/Subscribe messaging
|
150
|
+
patterns with the ability to plug in an appropriate messaging infrastructure
|
151
|
+
based upon your needs.
|
152
|
+
|
153
|
+
Qup ships with support for {Kestrel}[https://github.com/robey/kestrel] and a
|
154
|
+
filesystem infrastructure based on {Maildir}[https://rubygems.org/gems/maildir].
|
155
|
+
Additional Adapters will be developed as needs arise. {Please submit an
|
156
|
+
Issue}[https://github.com/copiousfreetime/qup/issues] to have a new Adapter
|
157
|
+
created. Pull requests gladly accepted.
|
158
|
+
email: jeremy@copiousfreetime.org
|
159
|
+
executables: []
|
160
|
+
|
161
|
+
extensions: []
|
162
|
+
|
163
|
+
extra_rdoc_files:
|
164
|
+
- ADAPTER_API.rdoc
|
165
|
+
- HISTORY.rdoc
|
166
|
+
- Manifest.txt
|
167
|
+
- README.rdoc
|
168
|
+
files:
|
169
|
+
- .autotest
|
170
|
+
- .gemtest
|
171
|
+
- ADAPTER_API.rdoc
|
172
|
+
- HISTORY.rdoc
|
173
|
+
- Manifest.txt
|
174
|
+
- README.rdoc
|
175
|
+
- Rakefile
|
176
|
+
- lib/qup.rb
|
177
|
+
- lib/qup/adapter.rb
|
178
|
+
- lib/qup/adapter/kestrel.rb
|
179
|
+
- lib/qup/adapter/kestrel/destination.rb
|
180
|
+
- lib/qup/adapter/kestrel/queue.rb
|
181
|
+
- lib/qup/adapter/kestrel/topic.rb
|
182
|
+
- lib/qup/adapter/maildir.rb
|
183
|
+
- lib/qup/adapter/maildir/queue.rb
|
184
|
+
- lib/qup/adapter/maildir/topic.rb
|
185
|
+
- lib/qup/adapter/redis.rb
|
186
|
+
- lib/qup/adapter/redis/connection.rb
|
187
|
+
- lib/qup/adapter/redis/queue.rb
|
188
|
+
- lib/qup/adapter/redis/topic.rb
|
189
|
+
- lib/qup/consumer.rb
|
190
|
+
- lib/qup/message.rb
|
191
|
+
- lib/qup/producer.rb
|
192
|
+
- lib/qup/publisher.rb
|
193
|
+
- lib/qup/queue_api.rb
|
194
|
+
- lib/qup/session.rb
|
195
|
+
- lib/qup/subscriber.rb
|
196
|
+
- lib/qup/topic_api.rb
|
197
|
+
- spec/qup/adapter/kestrel/queue_spec.rb
|
198
|
+
- spec/qup/adapter/kestrel/topic_spec.rb
|
199
|
+
- spec/qup/adapter/kestrel_context.rb
|
200
|
+
- spec/qup/adapter/kestrel_spec.rb
|
201
|
+
- spec/qup/adapter/maildir/queue_spec.rb
|
202
|
+
- spec/qup/adapter/maildir/topic_spec.rb
|
203
|
+
- spec/qup/adapter/maildir_context.rb
|
204
|
+
- spec/qup/adapter/maildir_spec.rb
|
205
|
+
- spec/qup/adapter/redis/queue_spec.rb
|
206
|
+
- spec/qup/adapter/redis/topic_spec.rb
|
207
|
+
- spec/qup/adapter/redis_context.rb
|
208
|
+
- spec/qup/adapter/redis_spec.rb
|
209
|
+
- spec/qup/adapter_spec.rb
|
210
|
+
- spec/qup/consumer_spec.rb
|
211
|
+
- spec/qup/message_spec.rb
|
212
|
+
- spec/qup/producer_spec.rb
|
213
|
+
- spec/qup/queue_api_spec.rb
|
214
|
+
- spec/qup/session_spec.rb
|
215
|
+
- spec/qup/shared_adapter_examples.rb
|
216
|
+
- spec/qup/shared_queue_examples.rb
|
217
|
+
- spec/qup/shared_topic_examples.rb
|
218
|
+
- spec/qup/topic_api_spec.rb
|
219
|
+
- spec/qup_spec.rb
|
220
|
+
- spec/spec_helper.rb
|
221
|
+
homepage: http://github.com/copiousfreetime/qup
|
222
|
+
licenses: []
|
223
|
+
|
224
|
+
post_install_message:
|
225
|
+
rdoc_options:
|
226
|
+
- --main
|
227
|
+
- README.rdoc
|
228
|
+
- --markup
|
229
|
+
- tomdoc
|
230
|
+
require_paths:
|
231
|
+
- lib
|
232
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ">="
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
hash: 3
|
238
|
+
segments:
|
239
|
+
- 0
|
240
|
+
version: "0"
|
241
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
242
|
+
none: false
|
243
|
+
requirements:
|
244
|
+
- - ">="
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
hash: 3
|
247
|
+
segments:
|
248
|
+
- 0
|
249
|
+
version: "0"
|
250
|
+
requirements: []
|
251
|
+
|
252
|
+
rubyforge_project:
|
253
|
+
rubygems_version: 1.8.16
|
254
|
+
signing_key:
|
255
|
+
specification_version: 3
|
256
|
+
summary: Qup is a generalized API for Message Queue and Publish/Subscribe messaging patterns with the ability to plug in an appropriate messaging infrastructure based upon your needs.
|
257
|
+
test_files:
|
258
|
+
- spec/qup/adapter/kestrel/queue_spec.rb
|
259
|
+
- spec/qup/adapter/kestrel/topic_spec.rb
|
260
|
+
- spec/qup/adapter/kestrel_context.rb
|
261
|
+
- spec/qup/adapter/kestrel_spec.rb
|
262
|
+
- spec/qup/adapter/maildir/queue_spec.rb
|
263
|
+
- spec/qup/adapter/maildir/topic_spec.rb
|
264
|
+
- spec/qup/adapter/maildir_context.rb
|
265
|
+
- spec/qup/adapter/maildir_spec.rb
|
266
|
+
- spec/qup/adapter/redis/queue_spec.rb
|
267
|
+
- spec/qup/adapter/redis/topic_spec.rb
|
268
|
+
- spec/qup/adapter/redis_context.rb
|
269
|
+
- spec/qup/adapter/redis_spec.rb
|
270
|
+
- spec/qup/adapter_spec.rb
|
271
|
+
- spec/qup/consumer_spec.rb
|
272
|
+
- spec/qup/message_spec.rb
|
273
|
+
- spec/qup/producer_spec.rb
|
274
|
+
- spec/qup/queue_api_spec.rb
|
275
|
+
- spec/qup/session_spec.rb
|
276
|
+
- spec/qup/shared_adapter_examples.rb
|
277
|
+
- spec/qup/shared_queue_examples.rb
|
278
|
+
- spec/qup/shared_topic_examples.rb
|
279
|
+
- spec/qup/topic_api_spec.rb
|
280
|
+
- spec/qup_spec.rb
|
281
|
+
- spec/spec_helper.rb
|