mongrel2 0.41.0 → 0.42.0.pre.410

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19e6d36ed1c0911195e57b4f2b9d9f850a020bfc
4
- data.tar.gz: 1c3e75b1dd52df44b0a449ed8d118cefff39b9d8
3
+ metadata.gz: 3766dd494bafe1cb6951b33558dd4ff1d1d16c8d
4
+ data.tar.gz: 8294c6f3cf50394577f1e47c4a0bc16c38a7f19a
5
5
  SHA512:
6
- metadata.gz: 4986951f6ed2d88f6b41b5ab75f26e1f683416742881efd6a6308f37f27fe27419916ef97fede3b456aac9c5522f6f0bb6596429417ae0fb4d92521ca56a64c0
7
- data.tar.gz: fefccfdcd4c937c29a545443639084e83db3691f9c4cfc3352caabca2ff6b9d4eeb4bdef72ebcf4e1b636f5db56bfa00cbf940b003d45a918152f7c41f04555c
6
+ metadata.gz: 7516fc093d2c0c73c2d8f9e85c6b465372cba92896ea9de10b0cf127b35bf6b9c4c43cf344518b1bcded93278151794869c6b5a7731711fdad42663f4bdd1844
7
+ data.tar.gz: 117b6e5335b6c9716c577c1f859141988c9823c27c20d274eb6648255ea37b11abf9f0095d2457273f5fba403986ff51e6b087cfd722259e38ee2752086cfdec
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -152,10 +152,10 @@ and generate the API documentation.
152
152
 
153
153
  == Other Implementations
154
154
 
155
- There are two other Mongrel2 Ruby libraries, +m2r+ and the +mongrel2-rack+
156
- library. This implementation differs from them in several ways:
155
+ There are two other Mongrel2 Ruby libraries, +m2r+ +rack-mongrel2+.
156
+ This implementation differs from them in several ways:
157
157
 
158
- * It uses the C extension for 0MQ (zmq) instead of the FFI one. If you
158
+ * It uses a C extension for 0MQ (rbczmq) instead of the FFI one. If you
159
159
  strongly prefer the FFI library, both of the other Mongrel2 libraries use
160
160
  it, so you'll want to stick to one of them.
161
161
 
@@ -173,7 +173,7 @@ library. This implementation differs from them in several ways:
173
173
 
174
174
  == License
175
175
 
176
- Copyright (c) 2011-2013, Michael Granger
176
+ Copyright (c) 2011-2014, Michael Granger
177
177
  All rights reserved.
178
178
 
179
179
  Redistribution and use in source and binary forms, with or without
@@ -3,4 +3,5 @@ mongrel2: ruby ../bin/m2sh.rb -c examples.sqlite start
3
3
  helloworld: ruby helloworld-handler.rb
4
4
  async_upload: ruby async-upload.rb
5
5
  request_dumper: ruby request-dumper.rb
6
+ sendfile: ruby sendfile.rb
6
7
  ws: ruby ws-echo.rb
@@ -26,6 +26,8 @@ s = server 'examples' do
26
26
  bind_addr '0.0.0.0'
27
27
  port 8113
28
28
 
29
+ xrequest '/usr/local/lib/mongrel2/filters/sendfile.so'
30
+
29
31
  # your main host
30
32
  host 'localhost' do
31
33
 
@@ -36,8 +38,9 @@ s = server 'examples' do
36
38
  dumper = handler( 'tcp://127.0.0.1:9997', 'request-dumper', protocol: 'tnetstring' )
37
39
  route '/hello', handler( 'tcp://127.0.0.1:9999', 'helloworld-handler' )
38
40
  route '/async-upload', handler( 'tcp://127.0.0.1:9950', 'async-upload' )
39
- route '/dump', dumper
41
+ route '/sendfile', handler( 'tcp://127.0.0.1:9895', 'sendfile-quine' )
40
42
  route '/ws', handler( 'tcp://127.0.0.1:9995', 'ws-echo' )
43
+ route '/dump', dumper
41
44
  route '@js', dumper
42
45
  route '<xml', dumper
43
46
 
@@ -8,7 +8,7 @@ fi
8
8
  examplesdir=$(dirname $0)
9
9
 
10
10
  echo "Creating/updating the config database..."
11
- ruby -rubygems -I${examplesdir}/../lib $examplesdir/../bin/m2sh.rb \
11
+ /usr/bin/env ruby -rubygems -I${examplesdir}/../lib $examplesdir/../bin/m2sh.rb \
12
12
  -c ${examplesdir}/examples.sqlite load $examplesdir/config.rb
13
13
 
14
14
  if [ $? != 0 ]; then
@@ -25,7 +25,7 @@ module Mongrel2
25
25
  abort "\n\n>>> Mongrel2 requires Ruby 1.9.2 or later. <<<\n\n" if RUBY_VERSION < '1.9.2'
26
26
 
27
27
  # Library version constant
28
- VERSION = '0.41.0'
28
+ VERSION = '0.42.0'
29
29
 
30
30
  # Version-control revision constant
31
31
  REVISION = %q$Revision: 2915d3c8a0e3 $
@@ -123,7 +123,19 @@ class Mongrel2::Connection
123
123
  self.check_closed
124
124
  header = "%s %d:%s," % [ sender_id, conn_id.to_s.length, conn_id ]
125
125
  buf = header + ' ' + data
126
- self.log.debug "Sending response (PUB)"
126
+ self.log.debug "Sending response (PUB): %p" % [ buf ]
127
+ self.response_sock.send( buf )
128
+ self.log.debug " done with send (%d bytes)" % [ buf.bytesize ]
129
+ end
130
+
131
+
132
+ ### Write raw +data+ to the given connection ID (+conn_id+) at the specified
133
+ ### +sender_id+ as an extended response of type +response_type+.
134
+ def send_extended( sender_id, conn_id, response_type, *data )
135
+ self.check_closed
136
+ self.log.debug "Sending response with %s extended reply (PUB): %p" % [ response_type, data ]
137
+ header = "%s %d:X %s," % [ sender_id, conn_id.to_s.length + 2, conn_id ]
138
+ buf = header + ' ' + TNetstring.dump( [response_type] + data )
127
139
  self.response_sock.send( buf )
128
140
  self.log.debug " done with send (%d bytes)" % [ buf.bytesize ]
129
141
  end
@@ -134,6 +146,12 @@ class Mongrel2::Connection
134
146
  response.each_chunk do |data|
135
147
  self.send( response.sender_id, response.conn_id, data )
136
148
  end
149
+ if response.extended_reply?
150
+ self.log.debug "Response also includes an extended reply."
151
+ data = response.extended_reply_data
152
+ filter = response.extended_reply_filter
153
+ self.send_extended( response.sender_id, response.conn_id, filter, *data )
154
+ end
137
155
  end
138
156
 
139
157
 
@@ -146,6 +164,16 @@ class Mongrel2::Connection
146
164
  end
147
165
 
148
166
 
167
+ ### Send the given +data+ to one or more connected clients identified by +client_ids+
168
+ ### via the server specified by +sender_id+ as an extended reply of type
169
+ ### +response_type+. The +client_ids+ should be an Array of Integer IDs no longer
170
+ ### than Mongrel2::MAX_IDENTS.
171
+ def broadcast_extended( sender_id, conn_ids, response_type, *data )
172
+ idlist = conn_ids.flatten.map( &:to_s ).join( ' ' )
173
+ self.send_extended( sender_id, idlist, response_type, *data )
174
+ end
175
+
176
+
149
177
  ### Tell the server to close the connection associated with the given +sender_id+ and
150
178
  ### +conn_id+.
151
179
  def send_close( sender_id, conn_id )
@@ -88,7 +88,8 @@ class Mongrel2::HTTPResponse < Mongrel2::Response
88
88
  ### Returns true if the response status means the response
89
89
  ### shouldn't have a body.
90
90
  def bodiless?
91
- return self.body.nil? ||
91
+ return self.extended_reply? ||
92
+ self.body.nil? ||
92
93
  HTTP::BODILESS_HTTP_RESPONSE_CODES.include?( self.status )
93
94
  end
94
95
 
@@ -168,7 +169,7 @@ class Mongrel2::HTTPResponse < Mongrel2::Response
168
169
 
169
170
  headers[:date] ||= Time.now.httpdate
170
171
 
171
- if self.bodiless?
172
+ if self.bodiless? && !self.extended_reply?
172
173
  headers.delete( :content_length )
173
174
  headers.delete( :content_type )
174
175
  else
@@ -34,11 +34,13 @@ class Mongrel2::Response
34
34
  def initialize( sender_id, conn_id, body='' )
35
35
  body = StringIO.new( body, 'a+' ) unless body.respond_to?( :read )
36
36
 
37
- @sender_id = sender_id
38
- @conn_id = conn_id
39
- @body = body
40
- @request = nil
41
- @chunksize = DEFAULT_CHUNKSIZE
37
+ @sender_id = sender_id
38
+ @conn_id = conn_id
39
+ @body = body
40
+ @request = nil
41
+ @chunksize = DEFAULT_CHUNKSIZE
42
+ @extended_reply_filter = nil
43
+ @extended_reply_data = []
42
44
  end
43
45
 
44
46
 
@@ -63,6 +65,13 @@ class Mongrel2::Response
63
65
  # The number of bytes to write to Mongrel in a single "chunk"
64
66
  attr_accessor :chunksize
65
67
 
68
+ # The name of the extended reply filter to use in the reply. If this is set
69
+ # the response will be send back to Mongrel as an extended reply.
70
+ attr_reader :extended_reply_filter
71
+
72
+ # The Array of data to include with the extended reply
73
+ attr_reader :extended_reply_data
74
+
66
75
 
67
76
  ### Set the response's entity body to +newbody+. If +newbody+ is a String-ish object
68
77
  ### (i.e., it responds to #to_str), it will be wrapped in a StringIO in 'a+' mode).
@@ -86,6 +95,21 @@ class Mongrel2::Response
86
95
  end
87
96
 
88
97
 
98
+ ### Set up the response to send an extended reply to Mongrel2, invoking the
99
+ ### given +filter+. The body of the response will be passed to the filter
100
+ ### after being serialized to a tnetstring.
101
+ def extend_reply_with( filter )
102
+ @extended_reply_filter = filter
103
+ end
104
+ alias_method :extended_reply_with, :extend_reply_with
105
+
106
+
107
+ ### Returns +true+ if the response has been set to use an extended reply.
108
+ def extended_reply?
109
+ return @extended_reply_filter ? true : false
110
+ end
111
+
112
+
89
113
  ### Stringify the response, which just returns its body.
90
114
  def to_s
91
115
  pos = self.body.pos
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/ruby
2
2
  # coding: utf-8
3
3
 
4
- require_relative 'constants'
5
- require_relative 'matchers'
6
-
7
4
  # SimpleCov test coverage reporting; enable this using the :coverage rake task
8
5
  require 'simplecov' if ENV['COVERAGE']
9
6
 
7
+ require_relative 'constants'
8
+ require_relative 'matchers'
9
+
10
10
  begin
11
11
  require 'configurability'
12
12
  rescue LoadError => err
@@ -205,7 +205,6 @@ end
205
205
  RSpec.configure do |c|
206
206
  include Mongrel2::TestConstants
207
207
 
208
- c.treat_symbols_as_metadata_keys_with_true_values = true
209
208
  c.run_all_when_everything_filtered = true
210
209
  c.filter_run :focus
211
210
  c.order = 'random'
@@ -137,15 +137,42 @@ describe Mongrel2::Connection do
137
137
  end
138
138
 
139
139
  it "can write raw response messages to more than one conn_id at the same time" do
140
- expect( @response_sock ).to receive( :send ).with( "#{TEST_UUID} 15:8 16 44 45 1833, the data" )
140
+ expect( @response_sock ).to receive( :send ).
141
+ with( "#{TEST_UUID} 15:8 16 44 45 1833, the data" )
141
142
  @conn.broadcast( TEST_UUID, [8, 16, 44, 45, 1833], 'the data' )
142
143
  end
143
144
 
144
145
  it "can write raw response messages to more than one conn_id at the same time" do
145
- expect( @response_sock ).to receive( :send ).with( "#{TEST_UUID} 15:8 16 44 45 1833, the data" )
146
+ expect( @response_sock ).to receive( :send ).
147
+ with( "#{TEST_UUID} 15:8 16 44 45 1833, the data" )
146
148
  @conn.broadcast( TEST_UUID, [8, 16, 44, 45, 1833], 'the data' )
147
149
  end
148
150
 
151
+ it "can write an extended response message" do
152
+ expect( @response_sock ).to receive( :send ).
153
+ with( "#{TEST_UUID} 3:X 8, 27:8:sendfile,12:the_data.txt,]" )
154
+ @conn.send_extended( TEST_UUID, 8, :sendfile, "the_data.txt" )
155
+ end
156
+
157
+ it "can broadcast an extended response message" do
158
+ expect( @response_sock ).to receive( :send ).
159
+ with( "#{TEST_UUID} 9:X 8 16 32, 27:8:sendfile,12:the_data.txt,]" )
160
+ @conn.broadcast_extended( TEST_UUID, [8,16,32], :sendfile, "the_data.txt" )
161
+ end
162
+
163
+ it "can write a Mongrel2::Response with extended reply" do
164
+ expect( @response_sock ).to receive( :send ).
165
+ with( "#{TEST_UUID} 1:8, " )
166
+ expect( @response_sock ).to receive( :send ).
167
+ with( "#{TEST_UUID} 3:X 8, 27:8:sendfile,12:the_data.txt,]" )
168
+
169
+ response = Mongrel2::Response.new( TEST_UUID, 8, '' )
170
+ response.extended_reply_with( :sendfile )
171
+ response.extended_reply_data << 'the_data.txt'
172
+
173
+ @conn.reply( response )
174
+ end
175
+
149
176
  it "can tell the connection a request or a response was from to close" do
150
177
  expect( @response_sock ).to receive( :send ).with( "#{TEST_UUID} 1:8, " )
151
178
 
@@ -78,8 +78,9 @@ describe Mongrel2::Handler do
78
78
  end
79
79
 
80
80
  it "can look up connection information given an application ID" do
81
- Mongrel2::Handler.connection_info_for( TEST_UUID ).
82
- should == [ TEST_SEND_SPEC, TEST_RECV_SPEC ]
81
+ expect(
82
+ Mongrel2::Handler.connection_info_for(TEST_UUID)
83
+ ).to eq([ TEST_SEND_SPEC, TEST_RECV_SPEC ])
83
84
  end
84
85
 
85
86
  it "has a convenience method for instantiating and running a Handler given an " +
@@ -17,15 +17,6 @@ require 'mongrel2/response'
17
17
 
18
18
  describe Mongrel2::Response do
19
19
 
20
- before( :all ) do
21
- setup_logging()
22
- end
23
-
24
- after( :all ) do
25
- reset_logging()
26
- end
27
-
28
-
29
20
  it "can create a matching response given a Mongrel2::Request" do
30
21
  req = Mongrel2::Request.new( TEST_UUID, 8, '/path', {}, '' )
31
22
  response = Mongrel2::Response.from_request( req )
@@ -52,6 +43,11 @@ describe Mongrel2::Response do
52
43
  expect {|b| response.each_chunk(&b) }.to yield_with_args( 'the body' )
53
44
  end
54
45
 
46
+ it "can generate an enumerator for its body stream" do
47
+ response = Mongrel2::Response.new( TEST_UUID, 8, "the body" )
48
+ expect( response.each_chunk ).to be_a( Enumerator )
49
+ end
50
+
55
51
  it "wraps stringifiable bodies set via the #body= accessor in a StringIO" do
56
52
  response = Mongrel2::Response.new( TEST_UUID, 8 )
57
53
  response.body = 'a stringioed body'
@@ -66,27 +62,48 @@ describe Mongrel2::Response do
66
62
  expect( response.body ).to be( testbody )
67
63
  end
68
64
 
65
+
69
66
  context "an instance with default values" do
70
67
 
71
- before( :each ) do
72
- @response = Mongrel2::Response.new( TEST_UUID, 8 )
73
- end
68
+ let( :response ) { Mongrel2::Response.new(TEST_UUID, 8) }
69
+
74
70
 
75
71
  it "has an empty-IO body" do
76
- @response.body.rewind
77
- expect( @response.body.read ).to eq( '' )
72
+ response.body.rewind
73
+ expect( response.body.read ).to eq( '' )
78
74
  end
79
75
 
80
76
  it "supports the append operator to append objects to the body IO" do
81
- @response << 'some body stuff' << ' and some more body stuff'
82
- @response.body.rewind
83
- expect( @response.body.read ).to eq( 'some body stuff and some more body stuff' )
77
+ response << 'some body stuff' << ' and some more body stuff'
78
+ response.body.rewind
79
+ expect( response.body.read ).to eq( 'some body stuff and some more body stuff' )
84
80
  end
85
81
 
86
82
  it "supports #puts for appending objects to the body IO separated by EOL" do
87
- @response.puts( "some body stuff\n", " and some more body stuff\n\n", :and_a_symbol )
88
- @response.body.rewind
89
- expect( @response.body.read ).to eq( "some body stuff\n and some more body stuff\n\nand_a_symbol\n" )
83
+ response.puts( "some body stuff\n", " and some more body stuff\n\n", :and_a_symbol )
84
+ response.body.rewind
85
+ expect( response.body.read ).to eq( "some body stuff\n and some more body stuff\n\nand_a_symbol\n" )
86
+ end
87
+
88
+ it "is not an extended reply" do
89
+ expect( response ).to_not be_extended_reply
90
+ end
91
+
92
+ end
93
+
94
+
95
+ context "an instance extended with a :sendfile reply" do
96
+
97
+ let( :response ) do
98
+ res = Mongrel2::Response.new( TEST_UUID, 213 )
99
+ res.extend_reply_with( :sendfile )
100
+ res.extended_reply_data << '/path/to/a/file.txt'
101
+ res
102
+ end
103
+
104
+
105
+ it "is an extended reply" do
106
+ expect( response ).to be_extended_reply
90
107
  end
91
108
 
92
109
  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.41.0
4
+ version: 0.42.0.pre.410
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Granger
@@ -12,7 +12,7 @@ cert_chain:
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MQwwCgYDVQQDDANnZWQx
14
14
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
15
- HhcNMTMwMjI3MTY0ODU4WhcNMTQwMjI3MTY0ODU4WjA+MQwwCgYDVQQDDANnZWQx
15
+ HhcNMTQwMzE5MDQzNTI2WhcNMTUwMzE5MDQzNTI2WjA+MQwwCgYDVQQDDANnZWQx
16
16
  GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
17
17
  ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDb92mkyYwuGBg1oRxt2tkH
18
18
  +Uo3LAsaL/APBfSLzy8o3+B3AUHKCjMUaVeBoZdWtMHB75X3VQlvXfZMyBxj59Vo
@@ -23,267 +23,267 @@ cert_chain:
23
23
  AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSZ0hCV
24
24
  qoHr122fGKelqffzEQBhszAcBgNVHREEFTATgRFnZWRARmFlcmllTVVELm9yZzAc
25
25
  BgNVHRIEFTATgRFnZWRARmFlcmllTVVELm9yZzANBgkqhkiG9w0BAQUFAAOCAQEA
26
- Vlcfyq6GwyE8i0QuFPCeVOwJaneSvcwx316DApjy9/tt2YD2HomLbtpXtji5QXor
27
- ON6oln4tWBIB3Klbr3szq5oR3Rc1D02SaBTalxSndp4M6UkW9hRFu5jn98pDB4fq
28
- 5l8wMMU0Xdmqx1VYvysVAjVFVC/W4NNvlmg+2mEgSVZP5K6Tc9qDh3eMQInoYw6h
29
- t1YA6RsUJHp5vGQyhP1x34YpLAaly8icbns/8PqOf7Osn9ztmg8bOMJCeb32eQLj
30
- 6mKCwjpegytE0oifXfF8k75A9105cBnNiMZOe1tXiqYc/exCgWvbggurzDOcRkZu
31
- /YSusaiDXHKU2O3Akc3htA==
26
+ TuL1Bzl6TBs1YEzEubFHb9XAPgehWzzUudjDKzTRd+uyZmxnomBqTCQjT5ucNRph
27
+ 3jZ6bhLNooLQxTjIuHodeGcEMHZdt4Yi7SyPmw5Nry12z6wrDp+5aGps3HsE5WsQ
28
+ Zq2EuyEOc96g31uoIvjNdieKs+1kE+K+dJDjtw+wTH2i63P7r6N/NfPPXpxsFquo
29
+ wcYRRrHdR7GhdJeT+V8Q8Bi5bglCUGdx+8scMgkkePc98k9osQHypbACmzO+Bqkv
30
+ c7ZKPJcWBv0sm81+FCZXNACn2f9jfF8OQinxVs0O052KbGuEQaaiGIYeuuwQE2q6
31
+ ggcrPfcYeTwWlfZPu2LrBg==
32
32
  -----END CERTIFICATE-----
33
- date: 2014-02-02 00:00:00.000000000 Z
33
+ date: 2014-06-27 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: sequel
37
37
  requirement: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ~>
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '4.2'
42
42
  type: :runtime
43
43
  prerelease: false
44
44
  version_requirements: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - ~>
46
+ - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '4.2'
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: tnetstring
51
51
  requirement: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - ~>
53
+ - - "~>"
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0.3'
56
56
  type: :runtime
57
57
  prerelease: false
58
58
  version_requirements: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - ~>
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0.3'
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: yajl-ruby
65
65
  requirement: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ~>
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '1.0'
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ~>
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
76
  version: '1.0'
77
77
  - !ruby/object:Gem::Dependency
78
78
  name: trollop
79
79
  requirement: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - ~>
81
+ - - "~>"
82
82
  - !ruby/object:Gem::Version
83
83
  version: '2.0'
84
84
  type: :runtime
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ~>
88
+ - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '2.0'
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: sysexits
93
93
  requirement: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ~>
95
+ - - "~>"
96
96
  - !ruby/object:Gem::Version
97
97
  version: '1.1'
98
98
  type: :runtime
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ~>
102
+ - - "~>"
103
103
  - !ruby/object:Gem::Version
104
104
  version: '1.1'
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: rbczmq
107
107
  requirement: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ~>
109
+ - - "~>"
110
110
  - !ruby/object:Gem::Version
111
111
  version: '1.7'
112
112
  type: :runtime
113
113
  prerelease: false
114
114
  version_requirements: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ~>
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: '1.7'
119
119
  - !ruby/object:Gem::Dependency
120
120
  name: loggability
121
121
  requirement: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ~>
123
+ - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0.5'
126
126
  type: :runtime
127
127
  prerelease: false
128
128
  version_requirements: !ruby/object:Gem::Requirement
129
129
  requirements:
130
- - - ~>
130
+ - - "~>"
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0.5'
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: sqlite3
135
135
  requirement: !ruby/object:Gem::Requirement
136
136
  requirements:
137
- - - ~>
137
+ - - "~>"
138
138
  - !ruby/object:Gem::Version
139
139
  version: '1.3'
140
140
  type: :runtime
141
141
  prerelease: false
142
142
  version_requirements: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ~>
144
+ - - "~>"
145
145
  - !ruby/object:Gem::Version
146
146
  version: '1.3'
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: libxml-ruby
149
149
  requirement: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - ~>
151
+ - - "~>"
152
152
  - !ruby/object:Gem::Version
153
153
  version: '2.7'
154
154
  type: :runtime
155
155
  prerelease: false
156
156
  version_requirements: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - ~>
158
+ - - "~>"
159
159
  - !ruby/object:Gem::Version
160
160
  version: '2.7'
161
161
  - !ruby/object:Gem::Dependency
162
162
  name: hoe-mercurial
163
163
  requirement: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - ~>
165
+ - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: 1.4.0
167
+ version: '1.4'
168
168
  type: :development
169
169
  prerelease: false
170
170
  version_requirements: !ruby/object:Gem::Requirement
171
171
  requirements:
172
- - - ~>
172
+ - - "~>"
173
173
  - !ruby/object:Gem::Version
174
- version: 1.4.0
174
+ version: '1.4'
175
+ - !ruby/object:Gem::Dependency
176
+ name: hoe-deveiate
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.6'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '0.6'
175
189
  - !ruby/object:Gem::Dependency
176
190
  name: hoe-highline
177
191
  requirement: !ruby/object:Gem::Requirement
178
192
  requirements:
179
- - - ~>
193
+ - - "~>"
180
194
  - !ruby/object:Gem::Version
181
- version: 0.1.0
195
+ version: '0.2'
182
196
  type: :development
183
197
  prerelease: false
184
198
  version_requirements: !ruby/object:Gem::Requirement
185
199
  requirements:
186
- - - ~>
200
+ - - "~>"
187
201
  - !ruby/object:Gem::Version
188
- version: 0.1.0
202
+ version: '0.2'
189
203
  - !ruby/object:Gem::Dependency
190
204
  name: rdoc
191
205
  requirement: !ruby/object:Gem::Requirement
192
206
  requirements:
193
- - - ~>
207
+ - - "~>"
194
208
  - !ruby/object:Gem::Version
195
209
  version: '4.0'
196
210
  type: :development
197
211
  prerelease: false
198
212
  version_requirements: !ruby/object:Gem::Requirement
199
213
  requirements:
200
- - - ~>
214
+ - - "~>"
201
215
  - !ruby/object:Gem::Version
202
216
  version: '4.0'
203
217
  - !ruby/object:Gem::Dependency
204
218
  name: amalgalite
205
219
  requirement: !ruby/object:Gem::Requirement
206
220
  requirements:
207
- - - ~>
221
+ - - "~>"
208
222
  - !ruby/object:Gem::Version
209
223
  version: '1.3'
210
224
  type: :development
211
225
  prerelease: false
212
226
  version_requirements: !ruby/object:Gem::Requirement
213
227
  requirements:
214
- - - ~>
228
+ - - "~>"
215
229
  - !ruby/object:Gem::Version
216
230
  version: '1.3'
217
231
  - !ruby/object:Gem::Dependency
218
232
  name: configurability
219
233
  requirement: !ruby/object:Gem::Requirement
220
234
  requirements:
221
- - - ~>
235
+ - - "~>"
222
236
  - !ruby/object:Gem::Version
223
237
  version: '2.0'
224
238
  type: :development
225
239
  prerelease: false
226
240
  version_requirements: !ruby/object:Gem::Requirement
227
241
  requirements:
228
- - - ~>
242
+ - - "~>"
229
243
  - !ruby/object:Gem::Version
230
244
  version: '2.0'
231
245
  - !ruby/object:Gem::Dependency
232
246
  name: simplecov
233
247
  requirement: !ruby/object:Gem::Requirement
234
248
  requirements:
235
- - - ~>
249
+ - - "~>"
236
250
  - !ruby/object:Gem::Version
237
251
  version: '0.7'
238
252
  type: :development
239
253
  prerelease: false
240
254
  version_requirements: !ruby/object:Gem::Requirement
241
255
  requirements:
242
- - - ~>
256
+ - - "~>"
243
257
  - !ruby/object:Gem::Version
244
258
  version: '0.7'
245
- - !ruby/object:Gem::Dependency
246
- name: hoe-deveiate
247
- requirement: !ruby/object:Gem::Requirement
248
- requirements:
249
- - - ~>
250
- - !ruby/object:Gem::Version
251
- version: '0.3'
252
- type: :development
253
- prerelease: false
254
- version_requirements: !ruby/object:Gem::Requirement
255
- requirements:
256
- - - ~>
257
- - !ruby/object:Gem::Version
258
- version: '0.3'
259
259
  - !ruby/object:Gem::Dependency
260
260
  name: hoe-bundler
261
261
  requirement: !ruby/object:Gem::Requirement
262
262
  requirements:
263
- - - ~>
263
+ - - "~>"
264
264
  - !ruby/object:Gem::Version
265
265
  version: '1.2'
266
266
  type: :development
267
267
  prerelease: false
268
268
  version_requirements: !ruby/object:Gem::Requirement
269
269
  requirements:
270
- - - ~>
270
+ - - "~>"
271
271
  - !ruby/object:Gem::Version
272
272
  version: '1.2'
273
273
  - !ruby/object:Gem::Dependency
274
274
  name: hoe
275
275
  requirement: !ruby/object:Gem::Requirement
276
276
  requirements:
277
- - - ~>
277
+ - - "~>"
278
278
  - !ruby/object:Gem::Version
279
- version: '3.7'
279
+ version: '3.12'
280
280
  type: :development
281
281
  prerelease: false
282
282
  version_requirements: !ruby/object:Gem::Requirement
283
283
  requirements:
284
- - - ~>
284
+ - - "~>"
285
285
  - !ruby/object:Gem::Version
286
- version: '3.7'
286
+ version: '3.12'
287
287
  description: |-
288
288
  Ruby-Mongrel2 is a complete Ruby connector for Mongrel2[http://mongrel2.org/].
289
289
 
@@ -303,9 +303,9 @@ extra_rdoc_files:
303
303
  - README.rdoc
304
304
  - examples/README.txt
305
305
  files:
306
- - .autotest
307
- - .gemtest
308
- - .simplecov
306
+ - ".autotest"
307
+ - ".gemtest"
308
+ - ".simplecov"
309
309
  - ChangeLog
310
310
  - DSL.rdoc
311
311
  - History.rdoc
@@ -393,25 +393,25 @@ licenses:
393
393
  metadata: {}
394
394
  post_install_message:
395
395
  rdoc_options:
396
- - -f
396
+ - "-f"
397
397
  - fivefish
398
- - -t
398
+ - "-t"
399
399
  - Mongrel2 Ruby Connector
400
400
  require_paths:
401
401
  - lib
402
402
  required_ruby_version: !ruby/object:Gem::Requirement
403
403
  requirements:
404
- - - '>='
404
+ - - ">="
405
405
  - !ruby/object:Gem::Version
406
406
  version: 1.9.2
407
407
  required_rubygems_version: !ruby/object:Gem::Requirement
408
408
  requirements:
409
- - - '>='
409
+ - - ">"
410
410
  - !ruby/object:Gem::Version
411
- version: '0'
411
+ version: 1.3.1
412
412
  requirements: []
413
- rubyforge_project: mongrel2
414
- rubygems_version: 2.2.1
413
+ rubyforge_project:
414
+ rubygems_version: 2.2.2
415
415
  signing_key:
416
416
  specification_version: 4
417
417
  summary: Ruby-Mongrel2 is a complete Ruby connector for Mongrel2[http://mongrel2.org/]
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- "Rs��Y�����Og7������)���ٟ���IZ)X��fS��U�5���§����22�<`+«�Vk�<2r�8���i�NN_X�n���#��fY��\�����j��;�M4��T1��X���h��p�^��B��B���^� �W���V��v8“��J��X8
2
- U�E�ʇ|9 i/�Q����c&1nO�q�7Ռ�~[l�D9��f��h��-$�Y�ه>H8eZ�s�QS��Xm �l��
1
+ �݆�0k 6��s����eO>� +��ԍ�T%�-�IN��+[���Rvxu47 {�� sF��T�� Ҩ��\����_�չ��$f��r���R�?/^��U�V٩�YLQ��j/^ߣ�[&`Q��g7D7��� ����W,R���&��b�U8n�q�>B�Oh�W��x�E�ӿ:����I��-�Q�P�7���I��b�ݟ"G�:����r��JGY[)Ų�տ{V�л~LC+F&":�ב��ul0�Jė