thin 1.2.11 → 1.3.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.
Files changed (44) hide show
  1. data/CHANGELOG +16 -0
  2. data/lib/thin.rb +1 -8
  3. data/lib/thin/connection.rb +0 -34
  4. data/lib/thin/controllers/service.rb +1 -1
  5. data/lib/thin/logging.rb +2 -2
  6. data/lib/thin/runner.rb +1 -1
  7. data/lib/thin/server.rb +4 -3
  8. data/lib/thin/version.rb +3 -3
  9. data/spec/backends/swiftiply_client_spec.rb +1 -1
  10. data/spec/backends/tcp_server_spec.rb +1 -1
  11. data/spec/backends/unix_server_spec.rb +1 -1
  12. data/spec/command_spec.rb +1 -1
  13. data/spec/connection_spec.rb +1 -1
  14. data/spec/controllers/cluster_spec.rb +1 -1
  15. data/spec/controllers/controller_spec.rb +1 -1
  16. data/spec/controllers/service_spec.rb +2 -2
  17. data/spec/daemonizing_spec.rb +10 -6
  18. data/spec/headers_spec.rb +1 -1
  19. data/spec/logging_spec.rb +8 -2
  20. data/spec/perf/request_perf_spec.rb +1 -1
  21. data/spec/perf/response_perf_spec.rb +1 -1
  22. data/spec/perf/server_perf_spec.rb +1 -1
  23. data/spec/rack/loader_spec.rb +1 -1
  24. data/spec/rack/rails_adapter_spec.rb +1 -1
  25. data/spec/request/mongrel_spec.rb +1 -1
  26. data/spec/request/parser_spec.rb +1 -1
  27. data/spec/request/persistent_spec.rb +1 -1
  28. data/spec/request/processing_spec.rb +1 -1
  29. data/spec/response_spec.rb +1 -1
  30. data/spec/runner_spec.rb +1 -1
  31. data/spec/server/builder_spec.rb +1 -1
  32. data/spec/server/pipelining_spec.rb +3 -3
  33. data/spec/server/robustness_spec.rb +1 -1
  34. data/spec/server/stopping_spec.rb +1 -1
  35. data/spec/server/swiftiply_spec.rb +1 -1
  36. data/spec/server/tcp_spec.rb +1 -11
  37. data/spec/server/threaded_spec.rb +2 -2
  38. data/spec/server/unix_socket_spec.rb +1 -1
  39. data/spec/server_spec.rb +1 -1
  40. data/spec/spec_helper.rb +16 -2
  41. data/tasks/gem.rake +1 -2
  42. data/tasks/spec.rake +1 -2
  43. metadata +4 -33
  44. data/COPYING +0 -18
data/CHANGELOG CHANGED
@@ -1,3 +1,19 @@
1
+ == 1.3.0 Double Espresso
2
+ * BREAKING CHANGE: Thin no longer ships with fat Windows binaries.
3
+ From now on, to install on Windows, install https://github.com/oneclick/rubyinstaller/wiki/Development-Kit.
4
+ * BREAKING CHANGE: Remove automatic Content-Length setting.
5
+ It is now the responsibility of the app (or a middleware) to set the Content-Length.
6
+ * Log errors to STDERR [textgoeshere]
7
+ * Shut down gracefully when receiving SIGTERM [ddollar]
8
+
9
+ Processes are allowed a chance to shut down gracefully when receiving
10
+ SIGTERM (http://en.wikipedia.org/wiki/SIGTERM).
11
+
12
+ On Heroku, when shutting down a process, we send a SIGTERM followed 10
13
+ seconds later with a SIGKILL, similar to the behavior of the init daemon
14
+ on most Unix systems. This patch will allow Heroku apps to shut down
15
+ gracefully when they need to be terminated / moved.
16
+
1
17
  == 1.2.11 Bat-Shit Crazy
2
18
  * Fix pure Ruby gem to not include binary.
3
19
 
@@ -38,14 +38,7 @@ end
38
38
  require "#{Thin::ROOT}/thin/version"
39
39
  require "#{Thin::ROOT}/thin/statuses"
40
40
  require "#{Thin::ROOT}/rack/adapter/loader"
41
-
42
- if Thin.win?
43
- # Select proper binary under Windows
44
- major_ruby_version = RUBY_VERSION[/^(\d+\.\d+)/]
45
- require "#{Thin::ROOT}/#{major_ruby_version}/thin_parser"
46
- else
47
- require "#{Thin::ROOT}/thin_parser"
48
- end
41
+ require "#{Thin::ROOT}/thin_parser"
49
42
 
50
43
  module Rack
51
44
  module Adapter
@@ -5,10 +5,6 @@ module Thin
5
5
  # This class is instanciated by EventMachine on each new connection
6
6
  # that is opened.
7
7
  class Connection < EventMachine::Connection
8
- CONTENT_LENGTH = 'Content-Length'.freeze
9
- TRANSFER_ENCODING = 'Transfer-Encoding'.freeze
10
- CHUNKED_REGEXP = /\bchunked\b/i.freeze
11
-
12
8
  include Logging
13
9
 
14
10
  # This is a template async response. N.B. Can't use string for body on 1.9
@@ -97,9 +93,6 @@ module Thin
97
93
  # Status code -1 indicates that we're going to respond later (async).
98
94
  return if result.first == AsyncResponse.first
99
95
 
100
- # Set the Content-Length header if possible
101
- set_content_length(result) if need_content_length?(result)
102
-
103
96
  @response.status, @response.headers, @response.body = *result
104
97
 
105
98
  log "!! Rack application returned nil body. Probably you wanted it to be an empty string?" if @response.body.nil?
@@ -195,36 +188,9 @@ module Thin
195
188
  end
196
189
 
197
190
  protected
198
-
199
191
  # Returns IP address of peer as a string.
200
192
  def socket_address
201
193
  Socket.unpack_sockaddr_in(get_peername)[1]
202
194
  end
203
-
204
- private
205
- def need_content_length?(result)
206
- status, headers, body = result
207
- return false if status == -1
208
- return false if headers.has_key?(CONTENT_LENGTH)
209
- return false if (100..199).include?(status) || status == 204 || status == 304
210
- return false if headers.has_key?(TRANSFER_ENCODING) && headers[TRANSFER_ENCODING] =~ CHUNKED_REGEXP
211
- return false unless body.kind_of?(String) || body.kind_of?(Array)
212
- true
213
- end
214
-
215
- def set_content_length(result)
216
- headers, body = result[1..2]
217
- case body
218
- when String
219
- # See http://redmine.ruby-lang.org/issues/show/203
220
- headers[CONTENT_LENGTH] = (body.respond_to?(:bytesize) ? body.bytesize : body.size).to_s
221
- when Array
222
- bytes = 0
223
- body.each do |p|
224
- bytes += p.respond_to?(:bytesize) ? p.bytesize : p.size
225
- end
226
- headers[CONTENT_LENGTH] = bytes.to_s
227
- end
228
- end
229
195
  end
230
196
  end
@@ -5,7 +5,7 @@ module Thin
5
5
  # System service controller to launch all servers which
6
6
  # config files are in a directory.
7
7
  class Service < Controller
8
- INITD_PATH = '/etc/init.d/thin'
8
+ INITD_PATH = Dir.exist?('/etc/rc.d') ? '/etc/rc.d/thin' : '/etc/init.d/thin'
9
9
  DEFAULT_CONFIG_PATH = '/etc/thin'
10
10
  TEMPLATE = File.dirname(__FILE__) + '/service.sh.erb'
11
11
 
@@ -46,9 +46,9 @@ module Thin
46
46
 
47
47
  # Log an error backtrace if debugging is activated
48
48
  def log_error(e=$!)
49
- debug "#{e}\n\t" + e.backtrace.join("\n\t")
49
+ STDERR.print("#{e}\n\t" + e.backtrace.join("\n\t")) if Logging.debug?
50
50
  end
51
51
  module_function :log_error
52
52
  public :log_error
53
53
  end
54
- end
54
+ end
@@ -118,7 +118,7 @@ module Thin
118
118
  opts.on("-f", "--force", "Force the execution of the command") { @options[:force] = true }
119
119
  opts.on( "--max-conns NUM", "Maximum number of open file descriptors " +
120
120
  "(default: #{@options[:max_conns]})",
121
- "Might require sudo to set higher then 1024") { |num| @options[:max_conns] = num.to_i } unless Thin.win?
121
+ "Might require sudo to set higher than 1024") { |num| @options[:max_conns] = num.to_i } unless Thin.win?
122
122
  opts.on( "--max-persistent-conns NUM",
123
123
  "Maximum number of persistent connections",
124
124
  "(default: #{@options[:max_persistent_conns]})") { |num| @options[:max_persistent_conns] = num.to_i }
@@ -210,11 +210,12 @@ module Thin
210
210
 
211
211
  protected
212
212
  # Register signals:
213
- # * INT calls +stop+ to shutdown gracefully.
214
- # * TERM calls <tt>stop!</tt> to force shutdown.
213
+ # * TERM & QUIT calls +stop+ to shutdown gracefully.
214
+ # * INT calls <tt>stop!</tt> to force shutdown.
215
+ # * HUP calls <tt>restart</tt> to ... surprise, restart!
215
216
  def setup_signals
216
217
  trap('INT') { stop! }
217
- trap('TERM') { stop! }
218
+ trap('TERM') { stop }
218
219
  unless Thin.win?
219
220
  trap('QUIT') { stop }
220
221
  trap('HUP') { restart }
@@ -5,12 +5,12 @@ module Thin
5
5
 
6
6
  module VERSION #:nodoc:
7
7
  MAJOR = 1
8
- MINOR = 2
9
- TINY = 11
8
+ MINOR = 3
9
+ TINY = 0
10
10
 
11
11
  STRING = [MAJOR, MINOR, TINY].join('.')
12
12
 
13
- CODENAME = "Bat-Shit Crazy".freeze
13
+ CODENAME = "Double Espresso".freeze
14
14
 
15
15
  RACK = [1, 0].freeze # Rack protocol version
16
16
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Backends::SwiftiplyClient do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Backends::TcpServer do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Backends::UnixServer do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Command do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Connection do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  include Controllers
3
3
 
4
4
  describe Cluster, "with host and port" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'ostruct'
3
3
  include Controllers
4
4
 
@@ -1,9 +1,9 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  include Controllers
3
3
 
4
4
  describe Service do
5
5
  before(:all) do
6
- silence_stream(STDERR) do
6
+ silence_warnings do
7
7
  Service::INITD_PATH = 'tmp/sandbox' + Service::INITD_PATH
8
8
  Service::DEFAULT_CONFIG_PATH = 'tmp/sandbox' + Service::DEFAULT_CONFIG_PATH
9
9
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  class TestServer
4
4
  include Logging # Daemonizable should include this?
@@ -87,8 +87,10 @@ describe 'Daemonizing' do
87
87
 
88
88
  @pid = @server.pid
89
89
 
90
- silence_stream STDOUT do
91
- TestServer.kill(@server.pid_file, 1)
90
+ timeout(10) do
91
+ silence_stream STDOUT do
92
+ TestServer.kill(@server.pid_file, 1)
93
+ end
92
94
  end
93
95
 
94
96
  File.exist?(@server.pid_file).should be_false
@@ -104,8 +106,10 @@ describe 'Daemonizing' do
104
106
 
105
107
  @pid = @server.pid
106
108
 
107
- silence_stream STDOUT do
108
- TestServer.kill(@server.pid_file, 0)
109
+ timeout(10) do
110
+ silence_stream STDOUT do
111
+ TestServer.kill(@server.pid_file, 0)
112
+ end
109
113
  end
110
114
 
111
115
  File.exist?(@server.pid_file).should be_false
@@ -193,4 +197,4 @@ describe 'Daemonizing' do
193
197
  def server_should_start_in_less_then(sec=10)
194
198
  proc { sleep 0.1 until File.exist?(@server.pid_file) }.should take_less_then(10)
195
199
  end
196
- end
200
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Headers do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  class TestLogging
4
4
  include Logging
@@ -39,8 +39,14 @@ describe Logging do
39
39
  Logging.silent = true
40
40
  Logging.log "hi"
41
41
  end
42
+
43
+ it "should print errors to STDERR" do
44
+ error = mock(:error, :backtrace => Array("PC LOAD LETTER"))
45
+ STDERR.should_receive(:print).with(/PC LOAD LETTER/)
46
+ @object.log_error(error)
47
+ end
42
48
 
43
49
  after do
44
50
  Logging.silent = true
45
51
  end
46
- end
52
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Request, 'performance' do
4
4
  it "should be faster then #{max_parsing_time = 0.0002} RubySeconds" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Response, 'performance' do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, 'performance' do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Rack::Adapter do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'rack/mock'
3
3
 
4
4
  begin
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'digest/sha1'
3
3
 
4
4
  describe Request, 'legacy Mongrel tests' do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  # Require mongrel so we can test that Thin parser don't clash w/ Mongrel parser.
4
4
  begin
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Request, 'persistent' do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Request, 'processing' do
4
4
  it 'should parse in chunks' do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Response do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Runner do
4
4
  it "should parse options" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, 'app builder' do
4
4
  it "should build app from constructor" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, "HTTP pipelining" do
4
4
  before do
@@ -35,7 +35,7 @@ describe Server, "HTTP pipelining" do
35
35
  socket.close
36
36
 
37
37
  wait_for_requests_to_complete!
38
-
38
+
39
39
  response.should include('/first-1', '/second-2')
40
40
  end
41
41
 
@@ -107,4 +107,4 @@ describe Server, "HTTP pipelining" do
107
107
  def wait_for_requests_to_complete!
108
108
  sleep 0.1 until @server.backend.size == 0
109
109
  end
110
- end
110
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, 'robustness' do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, "stopping" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  if SWIFTIPLY_PATH.empty?
4
4
  warn "Ignoring Server on Swiftiply specs, gem install swiftiply to run"
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, 'on TCP socket' do
4
4
  before do
@@ -20,16 +20,6 @@ describe Server, 'on TCP socket' do
20
20
  body.should include('this')
21
21
  end
22
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
31
- end
32
-
33
23
  it 'should return empty string on incomplete headers' do
34
24
  send_data("GET /?this HTTP/1.1\r\nHost:").should be_empty
35
25
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, 'with threads' do
4
4
  before do
@@ -24,4 +24,4 @@ describe Server, 'with threads' do
24
24
  after do
25
25
  stop_server
26
26
  end
27
- end
27
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server, "on UNIX domain socket" do
4
4
  before do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Server do
4
4
  before do
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'thin'
3
+ gem "rspec", "~> 1.2.9"
3
4
  require 'spec'
4
5
  require 'benchmark'
5
6
  require 'timeout'
@@ -134,6 +135,13 @@ module Helpers
134
135
  stream.reopen(old_stream)
135
136
  end
136
137
 
138
+ def silence_warnings
139
+ old_verbose, $VERBOSE = $VERBOSE, nil
140
+ yield
141
+ ensure
142
+ $VERBOSE = old_verbose
143
+ end
144
+
137
145
  # Create and parse a request
138
146
  def R(raw, convert_line_feed=false)
139
147
  raw.gsub!("\n", "\r\n") if convert_line_feed
@@ -153,13 +161,19 @@ module Helpers
153
161
  wait_for_socket(address, port)
154
162
  else
155
163
  # If we can't ping the address fallback to just wait for the server to run
156
- sleep 1 until @server.running?
164
+ sleep 0.01 until @server.running?
157
165
  end
158
166
  end
159
167
 
160
168
  def stop_server
161
169
  @server.stop!
162
170
  @thread.kill
171
+
172
+ 100.times do
173
+ break unless EM.reactor_running?
174
+ sleep 0.01
175
+ end
176
+
163
177
  raise "Reactor still running, wtf?" if EventMachine.reactor_running?
164
178
  end
165
179
 
@@ -217,4 +231,4 @@ end
217
231
  Spec::Runner.configure do |config|
218
232
  config.include Matchers
219
233
  config.include Helpers
220
- end
234
+ end
@@ -13,7 +13,6 @@ Thin::GemSpec = Gem::Specification.new do |s|
13
13
  s.email = 'macournoyer@gmail.com'
14
14
  s.homepage = 'http://code.macournoyer.com/thin/'
15
15
  s.rubyforge_project = 'thin'
16
- s.has_rdoc = true
17
16
  s.executables = %w(thin)
18
17
 
19
18
  s.required_ruby_version = '>= 1.8.5'
@@ -24,7 +23,7 @@ Thin::GemSpec = Gem::Specification.new do |s|
24
23
  s.add_dependency 'daemons', '>= 1.0.9'
25
24
  end
26
25
 
27
- s.files = %w(COPYING CHANGELOG README Rakefile) +
26
+ s.files = %w(CHANGELOG README Rakefile) +
28
27
  Dir.glob("{benchmark,bin,doc,example,lib,spec,tasks}/**/*") - Dir.glob("lib/thin_parser.*") +
29
28
  Dir.glob("ext/**/*.{h,c,rb,rl}")
30
29
 
@@ -19,7 +19,6 @@ SPECS = FileList['spec/**/*_spec.rb'] - PERF_SPECS - SPECS2
19
19
 
20
20
  def spec_task(name, specs)
21
21
  Spec::Rake::SpecTask.new(name) do |t|
22
- t.libs << 'lib'
23
22
  t.spec_opts = %w(-fs -c)
24
23
  t.spec_files = specs
25
24
  end
@@ -41,4 +40,4 @@ task :check_benchmark_unit_gem do
41
40
  end
42
41
  end
43
42
 
44
- task 'spec:perf' => :check_benchmark_unit_gem
43
+ task 'spec:perf' => :check_benchmark_unit_gem
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thin
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 2
9
- - 11
10
- version: 1.2.11
4
+ prerelease:
5
+ version: 1.3.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Marc-Andre Cournoyer
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-03-28 00:00:00 -04:00
13
+ date: 2011-11-11 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,11 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ">="
28
23
  - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 0
33
- - 0
34
24
  version: 1.0.0
35
25
  type: :runtime
36
26
  version_requirements: *id001
@@ -42,11 +32,6 @@ dependencies:
42
32
  requirements:
43
33
  - - ">="
44
34
  - !ruby/object:Gem::Version
45
- hash: 35
46
- segments:
47
- - 0
48
- - 12
49
- - 6
50
35
  version: 0.12.6
51
36
  type: :runtime
52
37
  version_requirements: *id002
@@ -58,11 +43,6 @@ dependencies:
58
43
  requirements:
59
44
  - - ">="
60
45
  - !ruby/object:Gem::Version
61
- hash: 5
62
- segments:
63
- - 1
64
- - 0
65
- - 9
66
46
  version: 1.0.9
67
47
  type: :runtime
68
48
  version_requirements: *id003
@@ -75,7 +55,6 @@ extensions:
75
55
  extra_rdoc_files: []
76
56
 
77
57
  files:
78
- - COPYING
79
58
  - CHANGELOG
80
59
  - README
81
60
  - Rakefile
@@ -224,25 +203,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
224
203
  requirements:
225
204
  - - ">="
226
205
  - !ruby/object:Gem::Version
227
- hash: 61
228
- segments:
229
- - 1
230
- - 8
231
- - 5
232
206
  version: 1.8.5
233
207
  required_rubygems_version: !ruby/object:Gem::Requirement
234
208
  none: false
235
209
  requirements:
236
210
  - - ">="
237
211
  - !ruby/object:Gem::Version
238
- hash: 3
239
- segments:
240
- - 0
241
212
  version: "0"
242
213
  requirements: []
243
214
 
244
215
  rubyforge_project: thin
245
- rubygems_version: 1.3.7
216
+ rubygems_version: 1.6.2
246
217
  signing_key:
247
218
  specification_version: 3
248
219
  summary: A thin and fast web server
data/COPYING DELETED
@@ -1,18 +0,0 @@
1
- Copyright (c) 2008 Marc-Andre Cournoyer
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining a copy
4
- of this software and associated documentation files (the "Software"), to
5
- deal in the Software without restriction, including without limitation the
6
- rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
- sell copies of the Software, and to permit persons to whom the Software is
8
- furnished to do so, subject to the following conditions:
9
-
10
- The above copyright notice and this permission notice shall be included in
11
- all copies or substantial portions of the Software.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
- THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.