mongrel2 0.52.1 → 0.52.2
Sign up to get free protection for your applications and to get access to all the features.
- 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/]
|