thin 0.8.2 → 1.0.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.

Potentially problematic release.


This version of thin might be problematic. Click here for more details.

Files changed (44) hide show
  1. data/CHANGELOG +15 -0
  2. data/README +1 -1
  3. data/example/adapter.rb +2 -5
  4. data/example/config.ru +2 -5
  5. data/example/vlad.rake +6 -3
  6. data/lib/rack/adapter/loader.rb +27 -23
  7. data/lib/rack/adapter/rails.rb +9 -3
  8. data/lib/thin/backends/base.rb +13 -3
  9. data/lib/thin/command.rb +7 -5
  10. data/lib/thin/connection.rb +68 -28
  11. data/lib/thin/controllers/controller.rb +2 -1
  12. data/lib/thin/daemonizing.rb +25 -20
  13. data/lib/thin/headers.rb +8 -0
  14. data/lib/thin/logging.rb +28 -23
  15. data/lib/thin/request.rb +32 -32
  16. data/lib/thin/response.rb +22 -19
  17. data/lib/thin/runner.rb +14 -7
  18. data/lib/thin/server.rb +6 -2
  19. data/lib/thin/stats.rb +1 -4
  20. data/lib/thin/version.rb +4 -4
  21. data/lib/thin.rb +1 -0
  22. data/spec/backends/tcp_server_spec.rb +11 -0
  23. data/spec/command_spec.rb +7 -1
  24. data/spec/daemonizing_spec.rb +17 -0
  25. data/spec/headers_spec.rb +11 -0
  26. data/spec/logging_spec.rb +6 -2
  27. data/spec/rack/rails_adapter_spec.rb +10 -8
  28. data/spec/request/parser_spec.rb +1 -1
  29. data/spec/response_spec.rb +7 -0
  30. data/spec/runner_spec.rb +22 -3
  31. data/spec/server/pipelining_spec.rb +1 -1
  32. data/spec/server/robustness_spec.rb +1 -1
  33. data/spec/server/stopping_spec.rb +1 -1
  34. data/spec/server/swiftiply_spec.rb +1 -1
  35. data/spec/server/tcp_spec.rb +18 -7
  36. data/spec/server/threaded_spec.rb +1 -1
  37. data/spec/server/unix_socket_spec.rb +1 -1
  38. data/spec/spec_helper.rb +10 -0
  39. data/tasks/announce.rake +1 -1
  40. data/tasks/deploy.rake +2 -2
  41. data/tasks/email.erb +0 -4
  42. data/tasks/gem.rake +2 -2
  43. metadata +6 -4
  44. data/lib/thin_parser.bundle +0 -0
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  describe Server, "stopping" do
4
4
  before do
5
5
  start_server do |env|
6
- [200, { 'Content-Type' => 'text/html', 'Content-Length' => '2' }, ['ok']]
6
+ [200, { 'Content-Type' => 'text/html' }, ['ok']]
7
7
  end
8
8
  end
9
9
 
@@ -12,7 +12,7 @@ else
12
12
  sleep 2 # HACK ooh boy, I wish I knew how to make those specs more stable...
13
13
  start_server('0.0.0.0', 5555, :backend => Backends::SwiftiplyClient, :wait_for_socket => false) do |env|
14
14
  body = env.inspect + env['rack.input'].read
15
- [200, { 'Content-Type' => 'text/html', 'Content-Length' => body.size.to_s }, body]
15
+ [200, { 'Content-Type' => 'text/html' }, body]
16
16
  end
17
17
  end
18
18
 
@@ -4,19 +4,30 @@ describe Server, 'on TCP socket' do
4
4
  before do
5
5
  start_server do |env|
6
6
  body = env.inspect + env['rack.input'].read
7
- [200, { 'Content-Type' => 'text/html', 'Content-Length' => body.size.to_s }, body]
7
+ [200, { 'Content-Type' => 'text/html' }, body]
8
8
  end
9
9
  end
10
-
10
+
11
11
  it 'should GET from Net::HTTP' do
12
12
  get('/?cthis').should include('cthis')
13
13
  end
14
14
 
15
15
  it 'should GET from TCPSocket' do
16
- send_data("GET /?this HTTP/1.1\r\nConnection: close\r\n\r\n").
17
- should include("HTTP/1.1 200 OK",
18
- "Content-Type: text/html", "Content-Length: ",
19
- "Connection: close", "this")
16
+ status, headers, body = parse_response(send_data("GET /?this HTTP/1.0\r\nConnection: close\r\n\r\n"))
17
+ status.should == 200
18
+ headers['Content-Type'].should == 'text/html'
19
+ headers['Connection'].should == 'close'
20
+ body.should include('this')
21
+ end
22
+
23
+ it "should add the Content-Length to the response when not present" do
24
+ status, headers, body = parse_response(send_data("GET / HTTP/1.0\r\nConnection: close\r\n\r\n"))
25
+ headers.should have_key('Content-Length')
26
+ end
27
+
28
+ it 'should set the Content-Length to equal the body size in bytes' do
29
+ status, headers, body = parse_response(send_data("GET / HTTP/1.0\r\nConnection: close\r\n\r\n"))
30
+ headers['Content-Length'].should == (body.respond_to?(:bytesize) ? body.bytesize : body.size).to_s
20
31
  end
21
32
 
22
33
  it 'should return empty string on incomplete headers' do
@@ -35,7 +46,7 @@ describe Server, 'on TCP socket' do
35
46
  big = 'X' * (20 * 1024)
36
47
  post('/', :big => big).should include(big)
37
48
  end
38
-
49
+
39
50
  it "should retreive remote address" do
40
51
  get('/').should include('"REMOTE_ADDR"=>"127.0.0.1"')
41
52
  end
@@ -6,7 +6,7 @@ describe Server, 'with threads' do
6
6
  start_server DEFAULT_TEST_ADDRESS, DEFAULT_TEST_PORT, :threaded => true do |env|
7
7
  sleep env['PATH_INFO'].delete('/').to_i
8
8
  @requests += 1
9
- [200, { 'Content-Type' => 'text/html', 'Content-Length' => '2' }, 'hi']
9
+ [200, { 'Content-Type' => 'text/html' }, 'hi']
10
10
  end
11
11
  end
12
12
 
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
3
3
  describe Server, "on UNIX domain socket" do
4
4
  before do
5
5
  start_server('/tmp/thin_test.sock') do |env|
6
- [200, { 'Content-Type' => 'text/html', 'Content-Length' => env.inspect.size.to_s }, [env.inspect]]
6
+ [200, { 'Content-Type' => 'text/html' }, [env.inspect]]
7
7
  end
8
8
  end
9
9
 
data/spec/spec_helper.rb CHANGED
@@ -190,6 +190,16 @@ module Helpers
190
190
  out
191
191
  end
192
192
 
193
+ def parse_response(response)
194
+ raw_headers, body = response.split("\r\n\r\n", 2)
195
+ raw_status, raw_headers = raw_headers.split("\r\n", 2)
196
+
197
+ status = raw_status.match(%r{\AHTTP/1.1\s+(\d+)\b}).captures.first.to_i
198
+ headers = Hash[ *raw_headers.split("\r\n").map { |h| h.split(/:\s+/, 2) }.flatten ]
199
+
200
+ [ status, headers, body ]
201
+ end
202
+
193
203
  def get(url)
194
204
  if @server.backend.class == Backends::UnixServer
195
205
  send_data("GET #{url} HTTP/1.1\r\nConnection: close\r\n\r\n")
data/tasks/announce.rake CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'erb'
2
2
 
3
3
  MSG_TEMPLATE = File.dirname(__FILE__) + '/email.erb'
4
- SEND_TO = %w(thin-ruby@googlegroups.com eventmachine-talk@rubyforge.org ruby-talk@ruby-lang.org montreal-on-rails@googlegroups.com)
4
+ SEND_TO = %w(thin-ruby@googlegroups.com ruby-talk@ruby-lang.org)
5
5
 
6
6
  desc 'Generate a template for the new version annoucement'
7
7
  task :ann do
data/tasks/deploy.rake CHANGED
@@ -11,6 +11,6 @@ desc 'Deploy on all servers'
11
11
  task :deploy => %w(deploy:alpha deploy:public)
12
12
 
13
13
  def upload(file, to, options={})
14
- sh %{ssh macournoyer@macournoyer.com "rm -rf code.macournoyer.com/#{to}"} if options[:replace]
15
- sh %{scp -rq #{file} macournoyer@macournoyer.com:code.macournoyer.com/#{to}}
14
+ sh %{ssh macournoyer@code.macournoyer.com "rm -rf code.macournoyer.com/#{to}"} if options[:replace]
15
+ sh %{scp -rq #{file} macournoyer@code.macournoyer.com:code.macournoyer.com/#{to}}
16
16
  end
data/tasks/email.erb CHANGED
@@ -15,10 +15,6 @@ Install Thin from RubyForge:
15
15
  Or using my mirror:
16
16
 
17
17
  gem install thin --source http://code.macournoyer.com
18
-
19
- To use Thin with UNIX domain sockets you need EventMachine 0.11.0 from my gem server:
20
-
21
- gem install eventmachine --source http://code.macournoyer.com
22
18
 
23
19
  == Contribute
24
20
 
data/tasks/gem.rake CHANGED
@@ -61,14 +61,14 @@ namespace :gem do
61
61
  desc 'Upload gem to code.macournoyer.com'
62
62
  task :upload => :gem do
63
63
  upload "pkg/#{spec.full_name}.gem", 'gems'
64
- system 'ssh macournoyer@macournoyer.com "cd code.macournoyer.com && gem generate_index"'
64
+ system 'ssh macournoyer@code.macournoyer.com "cd code.macournoyer.com && gem generate_index"'
65
65
  end
66
66
 
67
67
  namespace :upload do
68
68
  desc 'Upload the precompiled win32 gem to code.macournoyer.com'
69
69
  task :win do
70
70
  upload "pkg/#{spec.full_name}-#{WIN_SUFFIX}.gem", 'gems'
71
- system 'ssh macournoyer@macournoyer.com "cd code.macournoyer.com && gem generate_index"'
71
+ system 'ssh macournoyer@code.macournoyer.com "cd code.macournoyer.com && gem generate_index"'
72
72
  end
73
73
 
74
74
  desc 'Upload gems (ruby & win32) to rubyforge.org'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc-Andre Cournoyer
@@ -9,11 +9,12 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-24 00:00:00 -04:00
12
+ date: 2008-09-28 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
17
+ type: :runtime
17
18
  version_requirement:
18
19
  version_requirements: !ruby/object:Gem::Requirement
19
20
  requirements:
@@ -23,6 +24,7 @@ dependencies:
23
24
  version:
24
25
  - !ruby/object:Gem::Dependency
25
26
  name: eventmachine
27
+ type: :runtime
26
28
  version_requirement:
27
29
  version_requirements: !ruby/object:Gem::Requirement
28
30
  requirements:
@@ -32,6 +34,7 @@ dependencies:
32
34
  version:
33
35
  - !ruby/object:Gem::Dependency
34
36
  name: daemons
37
+ type: :runtime
35
38
  version_requirement:
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
@@ -98,7 +101,6 @@ files:
98
101
  - lib/thin/statuses.rb
99
102
  - lib/thin/version.rb
100
103
  - lib/thin.rb
101
- - lib/thin_parser.bundle
102
104
  - spec/backends
103
105
  - spec/backends/swiftiply_client_spec.rb
104
106
  - spec/backends/tcp_server_spec.rb
@@ -238,7 +240,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
240
  requirements: []
239
241
 
240
242
  rubyforge_project: thin
241
- rubygems_version: 1.1.0
243
+ rubygems_version: 1.2.0
242
244
  signing_key:
243
245
  specification_version: 2
244
246
  summary: A thin and fast web server
Binary file