beetle 0.3.0.rc.14 → 0.3.0.rc.16
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/features/step_definitions/redis_auto_failover_steps.rb +1 -1
- data/lib/beetle/handler.rb +4 -1
- data/lib/beetle/redis_configuration_client.rb +3 -0
- data/lib/beetle/redis_configuration_server.rb +14 -9
- data/lib/beetle/version.rb +1 -1
- data/test/beetle/handler_test.rb +8 -1
- data/test/beetle/redis_configuration_server_test.rb +3 -15
- metadata +147 -160
@@ -5,7 +5,7 @@ end
|
|
5
5
|
|
6
6
|
Given /^a redis server "([^\"]*)" exists as slave of "([^\"]*)"$/ do |redis_name, redis_master_name|
|
7
7
|
TestDaemons::Redis[redis_name].start
|
8
|
-
|
8
|
+
step "redis server \"#{redis_name}\" is slave of \"#{redis_master_name}\""
|
9
9
|
end
|
10
10
|
|
11
11
|
Given /^redis server "([^\"]*)" is master$/ do |redis_name|
|
data/lib/beetle/handler.rb
CHANGED
@@ -29,6 +29,7 @@ module Beetle
|
|
29
29
|
@processor = processor
|
30
30
|
@error_callback = opts[:errback]
|
31
31
|
@failure_callback = opts[:failback]
|
32
|
+
@__handler_called__ = nil
|
32
33
|
end
|
33
34
|
|
34
35
|
# called when a message should be processed. if the message was caused by an RPC, the
|
@@ -43,6 +44,8 @@ module Beetle
|
|
43
44
|
else
|
44
45
|
process
|
45
46
|
end
|
47
|
+
ensure
|
48
|
+
@__handler_called__ = true
|
46
49
|
end
|
47
50
|
|
48
51
|
# called for message processing if no processor was specfied when the handler instance
|
@@ -75,7 +78,7 @@ module Beetle
|
|
75
78
|
|
76
79
|
# should not be overriden in subclasses
|
77
80
|
def processing_completed
|
78
|
-
completed
|
81
|
+
completed if @__handler_called__
|
79
82
|
rescue Exception
|
80
83
|
Beetle::reraise_expectation_errors!
|
81
84
|
end
|
@@ -117,16 +117,19 @@ module Beetle
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def pong!
|
120
|
+
logger.info "Sending pong message with id '#{id}' and token '#{@current_token}'"
|
120
121
|
beetle.publish(:pong, {"id" => id, "token" => @current_token}.to_json)
|
121
122
|
end
|
122
123
|
|
123
124
|
def client_started!
|
125
|
+
logger.info "Sending client_started message with id '#{id}'"
|
124
126
|
beetle.publish(:client_started, {"id" => id}.to_json)
|
125
127
|
end
|
126
128
|
|
127
129
|
def invalidate!
|
128
130
|
@current_master = nil
|
129
131
|
clear_redis_master_file
|
132
|
+
logger.info "Sending client_invalidated message with id '#{id}' and token '#{@current_token}'"
|
130
133
|
beetle.publish(:client_invalidated, {"id" => id, "token" => @current_token}.to_json)
|
131
134
|
end
|
132
135
|
|
@@ -86,7 +86,7 @@ module Beetle
|
|
86
86
|
return unless redeem_token(token)
|
87
87
|
@client_pong_ids_received << id
|
88
88
|
if all_client_pong_ids_received?
|
89
|
-
logger.
|
89
|
+
logger.info "All client pong messages received"
|
90
90
|
@available_timer.cancel if @available_timer
|
91
91
|
invalidate_current_master
|
92
92
|
end
|
@@ -96,10 +96,10 @@ module Beetle
|
|
96
96
|
def client_started(payload)
|
97
97
|
id = payload["id"]
|
98
98
|
if client_id_valid?(id)
|
99
|
-
logger.info
|
99
|
+
logger.info "Received client_started message from id '#{id}'"
|
100
100
|
else
|
101
101
|
msg = "Received client_started message from unknown id '#{id}'"
|
102
|
-
logger.error
|
102
|
+
logger.error msg
|
103
103
|
beetle.publish(:system_notification, {"message" => msg}.to_json)
|
104
104
|
end
|
105
105
|
end
|
@@ -152,7 +152,7 @@ module Beetle
|
|
152
152
|
def initiate_master_switch
|
153
153
|
redis.refresh
|
154
154
|
available, switch_in_progress = master_available?, paused?
|
155
|
-
logger.debug "
|
155
|
+
logger.debug "Initiating master switch: already in progress = #{switch_in_progress}"
|
156
156
|
unless available || switch_in_progress
|
157
157
|
master_unavailable!
|
158
158
|
end
|
@@ -205,7 +205,7 @@ module Beetle
|
|
205
205
|
else
|
206
206
|
write_redis_master_file(current_master.server) if @current_master = redis.auto_detect_master
|
207
207
|
end
|
208
|
-
current_master or raise NoRedisMaster.new("
|
208
|
+
current_master or raise NoRedisMaster.new("Failed to determine initial redis master")
|
209
209
|
end
|
210
210
|
|
211
211
|
def determine_new_master
|
@@ -215,7 +215,8 @@ module Beetle
|
|
215
215
|
def validate_pong_client_id(client_id)
|
216
216
|
unless known_client = client_id_valid?(client_id)
|
217
217
|
msg = "Received pong message from unknown id '#{client_id}'"
|
218
|
-
logger.error
|
218
|
+
logger.error msg
|
219
|
+
logger.info "Sending system_notification message with text: #{msg}"
|
219
220
|
beetle.publish(:system_notification, {"message" => msg}.to_json)
|
220
221
|
end
|
221
222
|
known_client
|
@@ -239,12 +240,14 @@ module Beetle
|
|
239
240
|
|
240
241
|
def check_all_clients_available
|
241
242
|
generate_new_token
|
243
|
+
logger.info "Sending ping message with token '#{@current_token}'"
|
242
244
|
beetle.publish(:ping, payload_with_current_token)
|
243
245
|
@available_timer = EM::Timer.new(config.redis_configuration_client_timeout) { cancel_invalidation }
|
244
246
|
end
|
245
247
|
|
246
248
|
def invalidate_current_master
|
247
249
|
generate_new_token
|
250
|
+
logger.info "Sending invalidate message with token '#{@current_token}'"
|
248
251
|
beetle.publish(:invalidate, payload_with_current_token)
|
249
252
|
@invalidate_timer = EM::Timer.new(config.redis_configuration_client_timeout) { cancel_invalidation }
|
250
253
|
end
|
@@ -275,7 +278,8 @@ module Beetle
|
|
275
278
|
def switch_master
|
276
279
|
if new_master = determine_new_master
|
277
280
|
msg = "Setting redis master to '#{new_master.server}' (was '#{current_master.server}')"
|
278
|
-
logger.warn
|
281
|
+
logger.warn msg
|
282
|
+
logger.info "Sending system_notification message with text: #{msg}"
|
279
283
|
beetle.publish(:system_notification, {"message" => msg}.to_json)
|
280
284
|
|
281
285
|
new_master.master!
|
@@ -283,7 +287,8 @@ module Beetle
|
|
283
287
|
@current_master = new_master
|
284
288
|
else
|
285
289
|
msg = "Redis master could not be switched, no slave available to become new master, promoting old master"
|
286
|
-
logger.error
|
290
|
+
logger.error msg
|
291
|
+
logger.info "Sending system_notification message with text: #{msg}"
|
287
292
|
beetle.publish(:system_notification, {"message" => msg}.to_json)
|
288
293
|
end
|
289
294
|
|
@@ -292,7 +297,7 @@ module Beetle
|
|
292
297
|
end
|
293
298
|
|
294
299
|
def publish_master(master)
|
295
|
-
logger.info "
|
300
|
+
logger.info "Sending reconfigure message with server '#{master.server}'"
|
296
301
|
beetle.publish(:reconfigure, payload_with_current_token({"server" => master.server}))
|
297
302
|
end
|
298
303
|
|
data/lib/beetle/version.rb
CHANGED
data/test/beetle/handler_test.rb
CHANGED
@@ -103,8 +103,15 @@ module Beetle
|
|
103
103
|
end
|
104
104
|
|
105
105
|
test "should silently rescue exceptions in the processing_completed call" do
|
106
|
-
handler = Handler.create(lambda {})
|
106
|
+
handler = Handler.create(lambda {|m|})
|
107
107
|
handler.expects(:completed).raises(Exception)
|
108
|
+
handler.call(mock("message"))
|
109
|
+
assert_nothing_raised {handler.processing_completed}
|
110
|
+
end
|
111
|
+
|
112
|
+
test "should not invoke completed method when the hander was never called" do
|
113
|
+
handler = Handler.create(lambda {})
|
114
|
+
handler.expects(:completed).never
|
108
115
|
assert_nothing_raised {handler.processing_completed}
|
109
116
|
end
|
110
117
|
|
@@ -303,38 +303,26 @@ module Beetle
|
|
303
303
|
end
|
304
304
|
end
|
305
305
|
|
306
|
-
class
|
306
|
+
class RedisConfigurationServerSystemNotificationTest < Test::Unit::TestCase
|
307
307
|
def setup
|
308
308
|
Beetle.config.redis_configuration_client_ids = "rc-client-1,rc-client-2"
|
309
309
|
@server = RedisConfigurationServer.new
|
310
310
|
@server.stubs(:beetle).returns(stub(:publish))
|
311
|
-
@server.stubs(:logger).returns(stub)
|
312
311
|
EventMachine.stubs(:add_timer).yields
|
313
312
|
end
|
314
313
|
|
315
|
-
test "should
|
314
|
+
test "should send a system notification when receiving pong message from unknown client" do
|
316
315
|
payload = {"id" => "unknown-client", "token" => @server.current_token}
|
317
316
|
msg = "Received pong message from unknown id 'unknown-client'"
|
318
317
|
@server.beetle.expects(:publish).with(:system_notification, ({:message => msg}).to_json)
|
319
|
-
@server.logger.expects(:error).with(msg)
|
320
318
|
@server.pong(payload)
|
321
319
|
end
|
322
320
|
|
323
|
-
test "should
|
321
|
+
test "should send a system notification when receiving client_started message from unknown client" do
|
324
322
|
payload = {"id" => "unknown-client"}
|
325
323
|
msg = "Received client_started message from unknown id 'unknown-client'"
|
326
324
|
@server.beetle.expects(:publish).with(:system_notification, ({:message => msg}).to_json)
|
327
|
-
@server.logger.expects(:error).with(msg)
|
328
325
|
@server.client_started(payload)
|
329
326
|
end
|
330
|
-
|
331
|
-
test "should log an info about received client_started client_started messages" do
|
332
|
-
payload = {"id" => "known-client"}
|
333
|
-
msg = "Received client_started message from id 'known-client'"
|
334
|
-
@server.logger.expects(:info).with(msg)
|
335
|
-
@server.expects(:client_id_valid?).with('known-client').returns(true)
|
336
|
-
@server.client_started(payload)
|
337
|
-
end
|
338
|
-
|
339
327
|
end
|
340
328
|
end
|
metadata
CHANGED
@@ -1,17 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0.rc.16
|
5
5
|
prerelease: 6
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 0
|
10
|
-
- rc
|
11
|
-
- 14
|
12
|
-
version: 0.3.0.rc.14
|
13
6
|
platform: ruby
|
14
|
-
authors:
|
7
|
+
authors:
|
15
8
|
- Stefan Kaes
|
16
9
|
- Pascal Friederich
|
17
10
|
- Ali Jelveh
|
@@ -20,183 +13,181 @@ authors:
|
|
20
13
|
autorequire:
|
21
14
|
bindir: bin
|
22
15
|
cert_chain: []
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
- !ruby/object:Gem::Dependency
|
16
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
17
|
+
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
27
19
|
name: uuid4r
|
28
|
-
|
29
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
30
21
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
hash: 31
|
35
|
-
segments:
|
36
|
-
- 0
|
37
|
-
- 1
|
38
|
-
- 2
|
22
|
+
requirements:
|
23
|
+
- - ! '>='
|
24
|
+
- !ruby/object:Gem::Version
|
39
25
|
version: 0.1.2
|
40
26
|
type: :runtime
|
41
|
-
version_requirements: *id001
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: bunny
|
44
27
|
prerelease: false
|
45
|
-
|
28
|
+
version_requirements: !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.2
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: bunny
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
46
37
|
none: false
|
47
|
-
requirements:
|
48
|
-
- -
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
hash: 17
|
51
|
-
segments:
|
52
|
-
- 0
|
53
|
-
- 7
|
54
|
-
- 9
|
38
|
+
requirements:
|
39
|
+
- - '='
|
40
|
+
- !ruby/object:Gem::Version
|
55
41
|
version: 0.7.9
|
56
42
|
type: :runtime
|
57
|
-
version_requirements: *id002
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: redis
|
60
43
|
prerelease: false
|
61
|
-
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
62
45
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
46
|
+
requirements:
|
47
|
+
- - '='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.7.9
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: redis
|
52
|
+
requirement: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - '='
|
56
|
+
- !ruby/object:Gem::Version
|
71
57
|
version: 3.0.1
|
72
58
|
type: :runtime
|
73
|
-
version_requirements: *id003
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: hiredis
|
76
59
|
prerelease: false
|
77
|
-
|
60
|
+
version_requirements: !ruby/object:Gem::Requirement
|
78
61
|
none: false
|
79
|
-
requirements:
|
80
|
-
- -
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
62
|
+
requirements:
|
63
|
+
- - '='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 3.0.1
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: hiredis
|
68
|
+
requirement: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - '='
|
72
|
+
- !ruby/object:Gem::Version
|
87
73
|
version: 0.4.5
|
88
74
|
type: :runtime
|
89
|
-
version_requirements: *id004
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: amq-client
|
92
75
|
prerelease: false
|
93
|
-
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - '='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.4.5
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: amq-client
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
94
85
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
hash: 61
|
99
|
-
segments:
|
100
|
-
- 0
|
101
|
-
- 9
|
102
|
-
- 3
|
86
|
+
requirements:
|
87
|
+
- - '='
|
88
|
+
- !ruby/object:Gem::Version
|
103
89
|
version: 0.9.3
|
104
90
|
type: :runtime
|
105
|
-
version_requirements: *id005
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
|
-
name: amq-protocol
|
108
91
|
prerelease: false
|
109
|
-
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - '='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 0.9.3
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: amq-protocol
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
110
101
|
none: false
|
111
|
-
requirements:
|
112
|
-
- -
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
hash: 61
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
- 9
|
118
|
-
- 3
|
102
|
+
requirements:
|
103
|
+
- - '='
|
104
|
+
- !ruby/object:Gem::Version
|
119
105
|
version: 0.9.3
|
120
106
|
type: :runtime
|
121
|
-
version_requirements: *id006
|
122
|
-
- !ruby/object:Gem::Dependency
|
123
|
-
name: amqp
|
124
107
|
prerelease: false
|
125
|
-
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - '='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 0.9.3
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: amqp
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
126
117
|
none: false
|
127
|
-
requirements:
|
128
|
-
- -
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
hash: 55
|
131
|
-
segments:
|
132
|
-
- 0
|
133
|
-
- 9
|
134
|
-
- 6
|
118
|
+
requirements:
|
119
|
+
- - '='
|
120
|
+
- !ruby/object:Gem::Version
|
135
121
|
version: 0.9.6
|
136
122
|
type: :runtime
|
137
|
-
version_requirements: *id007
|
138
|
-
- !ruby/object:Gem::Dependency
|
139
|
-
name: activesupport
|
140
123
|
prerelease: false
|
141
|
-
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
125
|
none: false
|
143
|
-
requirements:
|
144
|
-
- -
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
126
|
+
requirements:
|
127
|
+
- - '='
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 0.9.6
|
130
|
+
- !ruby/object:Gem::Dependency
|
131
|
+
name: activesupport
|
132
|
+
requirement: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ! '>='
|
136
|
+
- !ruby/object:Gem::Version
|
151
137
|
version: 2.3.4
|
152
138
|
type: :runtime
|
153
|
-
version_requirements: *id008
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: eventmachine_httpserver
|
156
139
|
prerelease: false
|
157
|
-
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
158
141
|
none: false
|
159
|
-
requirements:
|
160
|
-
- -
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 2.3.4
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: eventmachine_httpserver
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
167
153
|
version: 0.2.1
|
168
154
|
type: :runtime
|
169
|
-
version_requirements: *id009
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
|
-
name: daemons
|
172
155
|
prerelease: false
|
173
|
-
|
156
|
+
version_requirements: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ! '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 0.2.1
|
162
|
+
- !ruby/object:Gem::Dependency
|
163
|
+
name: daemons
|
164
|
+
requirement: !ruby/object:Gem::Requirement
|
174
165
|
none: false
|
175
|
-
requirements:
|
176
|
-
- -
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
hash: 3
|
179
|
-
segments:
|
180
|
-
- 1
|
181
|
-
- 0
|
182
|
-
- 10
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
183
169
|
version: 1.0.10
|
184
170
|
type: :runtime
|
185
|
-
|
171
|
+
prerelease: false
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
none: false
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: 1.0.10
|
186
178
|
description: A highly available, reliable messaging infrastructure
|
187
179
|
email: opensource@xing.com
|
188
|
-
executables:
|
180
|
+
executables:
|
189
181
|
- beetle
|
190
182
|
extensions: []
|
191
|
-
|
192
|
-
extra_rdoc_files:
|
183
|
+
extra_rdoc_files:
|
193
184
|
- examples/README.rdoc
|
194
185
|
- features/README.rdoc
|
195
186
|
- README.rdoc
|
196
187
|
- REDIS_AUTO_FAILOVER.rdoc
|
197
188
|
- RELEASE_NOTES.rdoc
|
198
189
|
- MIT-LICENSE
|
199
|
-
files:
|
190
|
+
files:
|
200
191
|
- examples/attempts.rb
|
201
192
|
- examples/handler_class.rb
|
202
193
|
- examples/handling_exceptions.rb
|
@@ -269,40 +260,36 @@ files:
|
|
269
260
|
- bin/beetle
|
270
261
|
homepage: http://xing.github.com/beetle/
|
271
262
|
licenses: []
|
272
|
-
|
273
|
-
|
274
|
-
|
263
|
+
post_install_message: ! " *********************************************************************************************\n\n
|
264
|
+
\ Please install the SystemTimer gem if you're running a ruby version < 1.9:\n
|
265
|
+
\ `gem install SystemTimer -v '=1.2.1'`\n See: http://ph7spot.com/musings/system-timer\n\n
|
266
|
+
\ *********************************************************************************************\n"
|
267
|
+
rdoc_options:
|
275
268
|
- --charset=UTF-8
|
276
|
-
require_paths:
|
269
|
+
require_paths:
|
277
270
|
- lib
|
278
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
271
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
279
272
|
none: false
|
280
|
-
requirements:
|
281
|
-
- -
|
282
|
-
- !ruby/object:Gem::Version
|
283
|
-
|
284
|
-
segments:
|
273
|
+
requirements:
|
274
|
+
- - ! '>='
|
275
|
+
- !ruby/object:Gem::Version
|
276
|
+
version: '0'
|
277
|
+
segments:
|
285
278
|
- 0
|
286
|
-
|
287
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
|
+
hash: -3446454574049422431
|
280
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
288
281
|
none: false
|
289
|
-
requirements:
|
290
|
-
- -
|
291
|
-
- !ruby/object:Gem::Version
|
292
|
-
hash: 21
|
293
|
-
segments:
|
294
|
-
- 1
|
295
|
-
- 3
|
296
|
-
- 7
|
282
|
+
requirements:
|
283
|
+
- - ! '>='
|
284
|
+
- !ruby/object:Gem::Version
|
297
285
|
version: 1.3.7
|
298
286
|
requirements: []
|
299
|
-
|
300
287
|
rubyforge_project:
|
301
288
|
rubygems_version: 1.8.24
|
302
289
|
signing_key:
|
303
290
|
specification_version: 3
|
304
291
|
summary: High Availability AMQP Messaging with Redundant Queues
|
305
|
-
test_files:
|
292
|
+
test_files:
|
306
293
|
- test/beetle/amqp_gem_behavior_test.rb
|
307
294
|
- test/beetle/base_test.rb
|
308
295
|
- test/beetle/beetle_test.rb
|