mongrel2 0.52.1 → 0.52.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/ChangeLog +2717 -2676
- data/History.rdoc +10 -0
- data/lib/mongrel2.rb +2 -2
- data/lib/mongrel2/connection.rb +8 -4
- data/lib/mongrel2/handler.rb +7 -4
- data/lib/mongrel2/request.rb +6 -0
- data/spec/mongrel2/config/directory_spec.rb +7 -0
- data/spec/mongrel2/config/dsl_spec.rb +11 -1
- data/spec/mongrel2/config/handler_spec.rb +7 -1
- data/spec/mongrel2/config/log_spec.rb +3 -0
- data/spec/mongrel2/config/route_spec.rb +3 -0
- data/spec/mongrel2/config/server_spec.rb +10 -0
- data/spec/mongrel2/config_spec.rb +10 -0
- data/spec/mongrel2/connection_spec.rb +0 -3
- data/spec/mongrel2/control_spec.rb +10 -3
- data/spec/mongrel2/handler_spec.rb +4 -0
- data/spec/mongrel2/httprequest_spec.rb +16 -0
- data/spec/mongrel2/httpresponse_spec.rb +18 -0
- data/spec/mongrel2/request_spec.rb +21 -0
- data/spec/mongrel2/response_spec.rb +8 -0
- data/spec/mongrel2/table_spec.rb +1 -1
- data/spec/mongrel2/websocket_spec.rb +48 -0
- data/spec/mongrel2_spec.rb +2 -0
- metadata +38 -34
- metadata.gz.sig +2 -3
@@ -33,21 +33,25 @@ describe Mongrel2::Response do
|
|
33
33
|
expect( response.body.read ).to eq( 'the body' )
|
34
34
|
end
|
35
35
|
|
36
|
+
|
36
37
|
it "stringifies to its body contents" do
|
37
38
|
response = Mongrel2::Response.new( TEST_UUID, 8, 'the body' )
|
38
39
|
expect( response.to_s ).to eq( 'the body' )
|
39
40
|
end
|
40
41
|
|
42
|
+
|
41
43
|
it "can be streamed in chunks" do
|
42
44
|
response = Mongrel2::Response.new( TEST_UUID, 8, 'the body' )
|
43
45
|
expect {|b| response.each_chunk(&b) }.to yield_with_args( 'the body' )
|
44
46
|
end
|
45
47
|
|
48
|
+
|
46
49
|
it "can generate an enumerator for its body stream" do
|
47
50
|
response = Mongrel2::Response.new( TEST_UUID, 8, "the body" )
|
48
51
|
expect( response.each_chunk ).to be_a( Enumerator )
|
49
52
|
end
|
50
53
|
|
54
|
+
|
51
55
|
it "wraps stringifiable bodies set via the #body= accessor in a StringIO" do
|
52
56
|
response = Mongrel2::Response.new( TEST_UUID, 8 )
|
53
57
|
response.body = 'a stringioed body'
|
@@ -55,6 +59,7 @@ describe Mongrel2::Response do
|
|
55
59
|
expect( response.body.string ).to eq( 'a stringioed body' )
|
56
60
|
end
|
57
61
|
|
62
|
+
|
58
63
|
it "doesn't try to wrap non-stringfiable bodies in a StringIO" do
|
59
64
|
response = Mongrel2::Response.new( TEST_UUID, 8 )
|
60
65
|
testbody = Object.new
|
@@ -73,18 +78,21 @@ describe Mongrel2::Response do
|
|
73
78
|
expect( response.body.read ).to eq( '' )
|
74
79
|
end
|
75
80
|
|
81
|
+
|
76
82
|
it "supports the append operator to append objects to the body IO" do
|
77
83
|
response << 'some body stuff' << ' and some more body stuff'
|
78
84
|
response.body.rewind
|
79
85
|
expect( response.body.read ).to eq( 'some body stuff and some more body stuff' )
|
80
86
|
end
|
81
87
|
|
88
|
+
|
82
89
|
it "supports #puts for appending objects to the body IO separated by EOL" do
|
83
90
|
response.puts( "some body stuff\n", " and some more body stuff\n\n", :and_a_symbol )
|
84
91
|
response.body.rewind
|
85
92
|
expect( response.body.read ).to eq( "some body stuff\n and some more body stuff\n\nand_a_symbol\n" )
|
86
93
|
end
|
87
94
|
|
95
|
+
|
88
96
|
it "is not an extended reply" do
|
89
97
|
expect( response ).to_not be_extended_reply
|
90
98
|
end
|
data/spec/mongrel2/table_spec.rb
CHANGED
@@ -17,7 +17,6 @@ describe Mongrel2::Table do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
|
20
|
-
|
21
20
|
it "allows setting/fetching case-insensitively" do
|
22
21
|
|
23
22
|
@table['Accept'] = :accept
|
@@ -156,6 +155,7 @@ describe Mongrel2::Table do
|
|
156
155
|
it "can yield an Enumerator for its header iterator" do
|
157
156
|
expect( @table.each_header ).to be_a( Enumerator )
|
158
157
|
end
|
158
|
+
|
159
159
|
end
|
160
160
|
|
161
161
|
|
@@ -46,16 +46,19 @@ describe Mongrel2::WebSocket do
|
|
46
46
|
expect( Mongrel2::Request.request_types[:WEBSOCKET_HANDSHAKE] ).to eq( Mongrel2::WebSocket::ClientHandshake )
|
47
47
|
end
|
48
48
|
|
49
|
+
|
49
50
|
it "knows what subprotocols were requested" do
|
50
51
|
handshake = @factory.handshake( '/websock', 'echo', 'superecho' )
|
51
52
|
expect( handshake.protocols ).to eq( ['echo', 'superecho'] )
|
52
53
|
end
|
53
54
|
|
55
|
+
|
54
56
|
it "doesn't error if no subprotocols were requested" do
|
55
57
|
handshake = @factory.handshake( '/websock' )
|
56
58
|
expect( handshake.protocols ).to eq( [] )
|
57
59
|
end
|
58
60
|
|
61
|
+
|
59
62
|
it "can create a response WebSocket::ServerHandshake for itself" do
|
60
63
|
handshake = @factory.handshake( '/websock' )
|
61
64
|
result = handshake.response
|
@@ -73,6 +76,7 @@ describe Mongrel2::WebSocket do
|
|
73
76
|
expect( result.body.read ).to eq( '' )
|
74
77
|
end
|
75
78
|
|
79
|
+
|
76
80
|
it "can create a response WebSocket::ServerHandshake with a valid sub-protocol for itself" do
|
77
81
|
handshake = @factory.handshake( '/websock', 'echo', 'superecho' )
|
78
82
|
result = handshake.response( :superecho )
|
@@ -91,6 +95,7 @@ describe Mongrel2::WebSocket do
|
|
91
95
|
expect( result.body.read ).to eq( '' )
|
92
96
|
end
|
93
97
|
|
98
|
+
|
94
99
|
it "raises an exception if the specified protocol is not one of the client's advertised ones" do
|
95
100
|
handshake = @factory.handshake( '/websock', 'echo', 'superecho' )
|
96
101
|
|
@@ -99,6 +104,7 @@ describe Mongrel2::WebSocket do
|
|
99
104
|
}.to raise_error( Mongrel2::WebSocket::HandshakeError, /map_updates/i )
|
100
105
|
end
|
101
106
|
|
107
|
+
|
102
108
|
it "has a socket identifier" do
|
103
109
|
handshake = @factory.handshake( '/websock', 'echo', 'superecho' )
|
104
110
|
expect( handshake.socket_id ).to eq( "#{handshake.sender_id}:#{handshake.conn_id}" )
|
@@ -114,85 +120,103 @@ describe Mongrel2::WebSocket do
|
|
114
120
|
expect( Mongrel2::Request.request_types[:WEBSOCKET] ).to eq( Mongrel2::WebSocket::Frame )
|
115
121
|
end
|
116
122
|
|
123
|
+
|
117
124
|
it "knows that its FIN flag is not set if its FLAG header doesn't include that bit" do
|
118
125
|
frame = @factory.text( '/websock', 'Hello!' )
|
119
126
|
frame.flags ^= ( frame.flags & Mongrel2::WebSocket::FIN_FLAG )
|
120
127
|
expect( frame ).to_not be_fin()
|
121
128
|
end
|
122
129
|
|
130
|
+
|
123
131
|
it "knows that its FIN flag is set if its FLAG header includes that bit" do
|
124
132
|
frame = @factory.text( '/websock', 'Hello!', :fin )
|
125
133
|
expect( frame ).to be_fin()
|
126
134
|
end
|
127
135
|
|
136
|
+
|
128
137
|
it "can unset its FIN flag" do
|
129
138
|
frame = @factory.text( '/websock', 'Hello!', :fin )
|
130
139
|
frame.fin = false
|
131
140
|
expect( frame ).to_not be_fin()
|
132
141
|
end
|
133
142
|
|
143
|
+
|
134
144
|
it "can set its FIN flag" do
|
135
145
|
frame = @factory.text( '/websock', 'Hello!' )
|
136
146
|
frame.fin = true
|
137
147
|
expect( frame ).to be_fin()
|
138
148
|
end
|
139
149
|
|
150
|
+
|
140
151
|
it "knows that its opcode is continuation if its opcode is 0x0" do
|
141
152
|
expect( @factory.continuation( '/websock' ).opcode ).to eq( :continuation )
|
142
153
|
end
|
143
154
|
|
155
|
+
|
144
156
|
it "knows that is opcode is 'text' if its opcode is 0x1" do
|
145
157
|
expect( @factory.text( '/websock', 'Hello!' ).opcode ).to eq( :text )
|
146
158
|
end
|
147
159
|
|
160
|
+
|
148
161
|
it "knows that is opcode is 'binary' if its opcode is 0x2" do
|
149
162
|
expect( @factory.binary( '/websock', 'Hello!' ).opcode ).to eq( :binary )
|
150
163
|
end
|
151
164
|
|
165
|
+
|
152
166
|
it "knows that is opcode is 'close' if its opcode is 0x8" do
|
153
167
|
expect( @factory.close( '/websock' ).opcode ).to eq( :close )
|
154
168
|
end
|
155
169
|
|
170
|
+
|
156
171
|
it "knows that is opcode is 'ping' if its opcode is 0x9" do
|
157
172
|
expect( @factory.ping( '/websock' ).opcode ).to eq( :ping )
|
158
173
|
end
|
159
174
|
|
175
|
+
|
160
176
|
it "knows that is opcode is 'pong' if its opcode is 0xA" do
|
161
177
|
expect( @factory.pong( '/websock' ).opcode ).to eq( :pong )
|
162
178
|
end
|
163
179
|
|
180
|
+
|
164
181
|
it "knows that its opcode is one of the reserved ones if it's 0x3" do
|
165
182
|
expect( @factory.create( '/websocket', '', 0x3 ).opcode ).to eq( :reserved )
|
166
183
|
end
|
167
184
|
|
185
|
+
|
168
186
|
it "knows that its opcode is one of the reserved ones if it's 0x4" do
|
169
187
|
expect( @factory.create( '/websocket', '', 0x4 ).opcode ).to eq( :reserved )
|
170
188
|
end
|
171
189
|
|
190
|
+
|
172
191
|
it "knows that its opcode is one of the reserved ones if it's 0xB" do
|
173
192
|
expect( @factory.create( '/websocket', '', 0xB ).opcode ).to eq( :reserved )
|
174
193
|
end
|
175
194
|
|
195
|
+
|
176
196
|
it "knows that its opcode is one of the reserved ones if it's 0xD" do
|
177
197
|
expect( @factory.create( '/websocket', '', 0xD ).opcode ).to eq( :reserved )
|
178
198
|
end
|
179
199
|
|
200
|
+
|
180
201
|
it "knows that its opcode is one of the reserved ones if it's 0xF" do
|
181
202
|
expect( @factory.create( '/websocket', '', 0xF ).opcode ).to eq( :reserved )
|
182
203
|
end
|
183
204
|
|
205
|
+
|
184
206
|
it "allows its opcode to be set Symbolically" do
|
185
207
|
frame = @factory.text( '/websocket', 'data' )
|
186
208
|
frame.opcode = :binary
|
187
209
|
expect( frame.numeric_opcode ).to eq( OPCODE[:binary] )
|
188
210
|
end
|
189
211
|
|
212
|
+
|
190
213
|
it "allows its opcode to be set Numerically" do
|
191
214
|
frame = @factory.binary( '/websocket', 'data' )
|
192
215
|
frame.opcode = :text
|
193
216
|
expect( frame.numeric_opcode ).to eq( OPCODE[:text] )
|
194
217
|
end
|
195
218
|
|
219
|
+
|
196
220
|
it "allows its opcode to be set to one of the reserved opcodes Numerically" do
|
197
221
|
frame = @factory.binary( '/websocket', 'data' )
|
198
222
|
frame.opcode = 0xC
|
@@ -200,34 +224,42 @@ describe Mongrel2::WebSocket do
|
|
200
224
|
expect( frame.numeric_opcode ).to eq( 0xC )
|
201
225
|
end
|
202
226
|
|
227
|
+
|
203
228
|
it "knows that its RSV1 flag is set if its FLAG header includes that bit" do
|
204
229
|
expect( @factory.ping( '/websock', 'test', :rsv1 ) ).to be_rsv1()
|
205
230
|
end
|
206
231
|
|
232
|
+
|
207
233
|
it "knows that its RSV2 flag is set if its FLAG header includes that bit" do
|
208
234
|
expect( @factory.ping( '/websock', 'test', :rsv2 ) ).to be_rsv2()
|
209
235
|
end
|
210
236
|
|
237
|
+
|
211
238
|
it "knows that its RSV3 flag is set if its FLAG header includes that bit" do
|
212
239
|
expect( @factory.ping( '/websock', 'test', :rsv3 ) ).to be_rsv3()
|
213
240
|
end
|
214
241
|
|
242
|
+
|
215
243
|
it "knows that one of its RSV flags is set if its FLAG header includes RSV1" do
|
216
244
|
expect( @factory.ping( '/websock', 'test', :rsv1 ) ).to have_rsv_flags()
|
217
245
|
end
|
218
246
|
|
247
|
+
|
219
248
|
it "knows that one of its RSV flags is set if its FLAG header includes RSV2" do
|
220
249
|
expect( @factory.ping( '/websock', 'test', :rsv2 ) ).to have_rsv_flags()
|
221
250
|
end
|
222
251
|
|
252
|
+
|
223
253
|
it "knows that one of its RSV flags is set if its FLAG header includes RSV3" do
|
224
254
|
expect( @factory.ping( '/websock', 'test', :rsv3 ) ).to have_rsv_flags()
|
225
255
|
end
|
226
256
|
|
257
|
+
|
227
258
|
it "knows that no RSV flags are set if its FLAG header doesn't have any RSV bits" do
|
228
259
|
expect( @factory.ping( '/websock', 'test' ) ).to_not have_rsv_flags()
|
229
260
|
end
|
230
261
|
|
262
|
+
|
231
263
|
it "can create a response WebSocket::Frame for itself" do
|
232
264
|
frame = @factory.text( '/websock', "Hi, here's a message!", :fin )
|
233
265
|
|
@@ -242,6 +274,7 @@ describe Mongrel2::WebSocket do
|
|
242
274
|
expect( result.payload.read ).to eq( '' )
|
243
275
|
end
|
244
276
|
|
277
|
+
|
245
278
|
it "creates PONG responses with the same payload for PING frames" do
|
246
279
|
frame = @factory.ping( '/websock', "WOO" )
|
247
280
|
|
@@ -256,6 +289,7 @@ describe Mongrel2::WebSocket do
|
|
256
289
|
expect( result.payload.read ).to eq( 'WOO' )
|
257
290
|
end
|
258
291
|
|
292
|
+
|
259
293
|
it "allows header flags and/or opcode to be specified when creating a response" do
|
260
294
|
frame = @factory.text( '/websock', "some bad data" )
|
261
295
|
|
@@ -271,6 +305,7 @@ describe Mongrel2::WebSocket do
|
|
271
305
|
expect( result.payload.read ).to eq( '' )
|
272
306
|
end
|
273
307
|
|
308
|
+
|
274
309
|
it "allows reserved opcodes to be specified when creating a response" do
|
275
310
|
frame = @factory.text( '/websock', "some bad data" )
|
276
311
|
|
@@ -286,6 +321,7 @@ describe Mongrel2::WebSocket do
|
|
286
321
|
expect( result.payload.read ).to eq( '' )
|
287
322
|
end
|
288
323
|
|
324
|
+
|
289
325
|
it "can be streamed in chunks instead of read all at once" do
|
290
326
|
data = BINARY_DATA * 256
|
291
327
|
binary = @factory.binary( '/websock', data, :fin )
|
@@ -297,6 +333,7 @@ describe Mongrel2::WebSocket do
|
|
297
333
|
])
|
298
334
|
end
|
299
335
|
|
336
|
+
|
300
337
|
it "has a socket identifier" do
|
301
338
|
frame = @factory.text( '/websock', "data" )
|
302
339
|
expect( frame.socket_id ).to eq( "#{frame.sender_id}:#{frame.conn_id}" )
|
@@ -311,6 +348,7 @@ describe Mongrel2::WebSocket do
|
|
311
348
|
@frame = @factory.text( '/websock', '', :fin )
|
312
349
|
end
|
313
350
|
|
351
|
+
|
314
352
|
it "automatically transcodes its payload to UTF8" do
|
315
353
|
text = "Стрелке!".encode( Encoding::KOI8_U )
|
316
354
|
@frame << text
|
@@ -325,24 +363,29 @@ describe Mongrel2::WebSocket do
|
|
325
363
|
|
326
364
|
|
327
365
|
describe "a WebSocket binary frame" do
|
366
|
+
|
328
367
|
before( :each ) do
|
329
368
|
@frame = @factory.binary( '/websock', BINARY_DATA, :fin )
|
330
369
|
end
|
331
370
|
|
371
|
+
|
332
372
|
it "doesn't try to transcode non-UTF8 data" do
|
333
373
|
# 4-byte header
|
334
374
|
expect( @frame.bytes.to_a[ 4, 16 ] ).
|
335
375
|
to eq([ 0x07, 0xbd, 0xb3, 0xfe, 0x87, 0xeb, 0xa9, 0x0e, 0x6e, 0x32, 0x71,
|
336
376
|
0xce, 0x85, 0xaf, 0x29, 0x88 ])
|
337
377
|
end
|
378
|
+
|
338
379
|
end
|
339
380
|
|
340
381
|
|
341
382
|
describe "a WebSocket close frame" do
|
383
|
+
|
342
384
|
before( :each ) do
|
343
385
|
@frame = @factory.close( '/websock' )
|
344
386
|
end
|
345
387
|
|
388
|
+
|
346
389
|
it "has convenience methods for setting its payload via integer status code" do
|
347
390
|
@frame.set_status( CLOSE_BAD_DATA )
|
348
391
|
@frame.payload.rewind
|
@@ -354,6 +397,7 @@ describe Mongrel2::WebSocket do
|
|
354
397
|
|
355
398
|
|
356
399
|
describe "WebSocket control frames" do
|
400
|
+
|
357
401
|
before( :each ) do
|
358
402
|
@frame = @factory.close( '/websock', "1002 Protocol error" )
|
359
403
|
end
|
@@ -366,6 +410,7 @@ describe Mongrel2::WebSocket do
|
|
366
410
|
}.to raise_error( Mongrel2::WebSocket::FrameError, /cannot exceed 125 bytes/i )
|
367
411
|
end
|
368
412
|
|
413
|
+
|
369
414
|
it "raises an exception if it's fragmented" do
|
370
415
|
@frame.fin = false
|
371
416
|
expect {
|
@@ -384,6 +429,7 @@ describe Mongrel2::WebSocket do
|
|
384
429
|
expect( raw_response.encoding ).to eq( Encoding::BINARY )
|
385
430
|
end
|
386
431
|
|
432
|
+
|
387
433
|
it "generates both parts of a fragmented unmasked text message correctly" do
|
388
434
|
first = @factory.text( '/websock', 'Hel' )
|
389
435
|
last = @factory.continuation( '/websock', 'lo', :fin )
|
@@ -392,6 +438,7 @@ describe Mongrel2::WebSocket do
|
|
392
438
|
expect( last.bytes.to_a ).to eq( [ 0x80, 0x02, 0x6c, 0x6f ] )
|
393
439
|
end
|
394
440
|
|
441
|
+
|
395
442
|
# The RFC's example is a masked response, but we're never a client, so never
|
396
443
|
# generate masked payloads.
|
397
444
|
it "generates a unmasked Ping request and (un)masked Ping response correctly" do
|
@@ -411,6 +458,7 @@ describe Mongrel2::WebSocket do
|
|
411
458
|
expect( binary.to_s[4..-1] ).to eq( BINARY_DATA )
|
412
459
|
end
|
413
460
|
|
461
|
+
|
414
462
|
it "generates a 64KiB binary message in a single unmasked frame correctly" do
|
415
463
|
data = BINARY_DATA * 256
|
416
464
|
|
data/spec/mongrel2_spec.rb
CHANGED
@@ -11,6 +11,7 @@ require 'mongrel2'
|
|
11
11
|
describe Mongrel2 do
|
12
12
|
|
13
13
|
describe "version methods" do
|
14
|
+
|
14
15
|
it "returns a version string if asked" do
|
15
16
|
expect( Mongrel2.version_string ).to match( /\w+ [\d.]+/ )
|
16
17
|
end
|
@@ -19,6 +20,7 @@ describe Mongrel2 do
|
|
19
20
|
it "returns a version string with a build number if asked" do
|
20
21
|
expect( Mongrel2.version_string(true) ).to match( /\w+ [\d.]+ \(build [[:xdigit:]]+\)/ )
|
21
22
|
end
|
23
|
+
|
22
24
|
end
|
23
25
|
|
24
26
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongrel2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.52.
|
4
|
+
version: 0.52.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
@@ -10,32 +10,31 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
+
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
OMKv6pWsoS81vw5KAGBmfX8nht/Py90DQrbRvakATGI=
|
13
|
+
MIIENDCCApygAwIBAgIBATANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
14
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0xODExMjAxODI5NTlaFw0xOTExMjAxODI5
|
15
|
+
NTlaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
16
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
17
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
18
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
19
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
20
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
21
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
22
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
23
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
24
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYD
|
25
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DAcBgNVHREE
|
26
|
+
FTATgRFnZWRARmFlcmllTVVELm9yZzAcBgNVHRIEFTATgRFnZWRARmFlcmllTVVE
|
27
|
+
Lm9yZzANBgkqhkiG9w0BAQsFAAOCAYEAP9Ffkvg4e8CjIWi8SykQ8oJSS8jbmbgF
|
28
|
+
abke3vXWLG6V9kFiObuJd5wZRBluJANu7bEtjgc3fFaGVP2XxVdCpVjNbmMDg4Qp
|
29
|
+
ovvczP53X6pQP2RSZgxF6Lblvy8y11RziUTVRG/Z2aJHsElo6gI7vQznE/OSDrhC
|
30
|
+
gEhr8uaIUt7D+HZWRbU0+MkKPpL5uMqaFuJbqXEvSwPTuUuYkDfNfsjQO7ruWBac
|
31
|
+
bxHCrvpZ6Tijc0nrlyXi6gPOCLeaqhau2xFnlvKgELwsGYSoKBJyDwqtQ5kwrOlU
|
32
|
+
tkSyLrfZ+RZcH535Hyvif7ZxB0v5OxXXoec+N2vrUsEUMRDL9dg4/WFdN8hIOixF
|
33
|
+
3IPKpZ1ho0Ya5q7yhygtBK9/NBFHw+nbJjcltfPDBXleRe8u73gnQo8AZIhStYSP
|
34
|
+
v4qqqa27Bs468d6SoPxjSm8a2mM9HZ4OdWhq4tFsbTeXDVquCfi64OTEaTt2xQdR
|
35
|
+
JnC4lpJfCP6aCXa5h2XAQfPSH636cQap
|
37
36
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
37
|
+
date: 2019-04-24 00:00:00.000000000 Z
|
39
38
|
dependencies:
|
40
39
|
- !ruby/object:Gem::Dependency
|
41
40
|
name: cztop
|
@@ -197,14 +196,14 @@ dependencies:
|
|
197
196
|
requirements:
|
198
197
|
- - "~>"
|
199
198
|
- !ruby/object:Gem::Version
|
200
|
-
version: '0.
|
199
|
+
version: '0.10'
|
201
200
|
type: :development
|
202
201
|
prerelease: false
|
203
202
|
version_requirements: !ruby/object:Gem::Requirement
|
204
203
|
requirements:
|
205
204
|
- - "~>"
|
206
205
|
- !ruby/object:Gem::Version
|
207
|
-
version: '0.
|
206
|
+
version: '0.10'
|
208
207
|
- !ruby/object:Gem::Dependency
|
209
208
|
name: hoe-highline
|
210
209
|
requirement: !ruby/object:Gem::Requirement
|
@@ -279,30 +278,36 @@ dependencies:
|
|
279
278
|
name: rdoc
|
280
279
|
requirement: !ruby/object:Gem::Requirement
|
281
280
|
requirements:
|
282
|
-
- - "
|
281
|
+
- - ">="
|
283
282
|
- !ruby/object:Gem::Version
|
284
283
|
version: '4.0'
|
284
|
+
- - "<"
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: '7'
|
285
287
|
type: :development
|
286
288
|
prerelease: false
|
287
289
|
version_requirements: !ruby/object:Gem::Requirement
|
288
290
|
requirements:
|
289
|
-
- - "
|
291
|
+
- - ">="
|
290
292
|
- !ruby/object:Gem::Version
|
291
293
|
version: '4.0'
|
294
|
+
- - "<"
|
295
|
+
- !ruby/object:Gem::Version
|
296
|
+
version: '7'
|
292
297
|
- !ruby/object:Gem::Dependency
|
293
298
|
name: hoe
|
294
299
|
requirement: !ruby/object:Gem::Requirement
|
295
300
|
requirements:
|
296
301
|
- - "~>"
|
297
302
|
- !ruby/object:Gem::Version
|
298
|
-
version: '3.
|
303
|
+
version: '3.17'
|
299
304
|
type: :development
|
300
305
|
prerelease: false
|
301
306
|
version_requirements: !ruby/object:Gem::Requirement
|
302
307
|
requirements:
|
303
308
|
- - "~>"
|
304
309
|
- !ruby/object:Gem::Version
|
305
|
-
version: '3.
|
310
|
+
version: '3.17'
|
306
311
|
description: |-
|
307
312
|
Ruby-Mongrel2 is a complete Ruby connector for Mongrel2[http://mongrel2.org/].
|
308
313
|
|
@@ -412,8 +417,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
412
417
|
- !ruby/object:Gem::Version
|
413
418
|
version: '0'
|
414
419
|
requirements: []
|
415
|
-
|
416
|
-
rubygems_version: 2.7.7
|
420
|
+
rubygems_version: 3.0.3
|
417
421
|
signing_key:
|
418
422
|
specification_version: 4
|
419
423
|
summary: Ruby-Mongrel2 is a complete Ruby connector for Mongrel2[http://mongrel2.org/]
|