rack 1.1.0 → 1.2.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.
- data/README +23 -26
- data/SPEC +3 -3
- data/lib/rack/auth/digest/params.rb +1 -1
- data/lib/rack/content_length.rb +1 -1
- data/lib/rack/etag.rb +15 -6
- data/lib/rack/file.rb +3 -1
- data/lib/rack/handler/cgi.rb +8 -7
- data/lib/rack/handler/fastcgi.rb +1 -1
- data/lib/rack/handler/lsws.rb +1 -1
- data/lib/rack/handler/mongrel.rb +1 -1
- data/lib/rack/handler/scgi.rb +1 -4
- data/lib/rack/handler/webrick.rb +10 -6
- data/lib/rack/lint.rb +29 -37
- data/lib/rack/mime.rb +2 -0
- data/lib/rack/mock.rb +2 -1
- data/lib/rack/recursive.rb +4 -0
- data/lib/rack/request.rb +8 -6
- data/lib/rack/response.rb +1 -0
- data/lib/rack/rewindable_input.rb +13 -10
- data/lib/rack/sendfile.rb +8 -6
- data/lib/rack/server.rb +66 -7
- data/lib/rack/session/memcache.rb +1 -1
- data/lib/rack/urlmap.rb +6 -7
- data/lib/rack/utils.rb +64 -22
- data/lib/rack.rb +1 -12
- data/rack.gemspec +6 -6
- data/spec/cgi/lighttpd.conf +25 -0
- data/spec/cgi/rackup_stub.rb +6 -0
- data/spec/cgi/sample_rackup.ru +5 -0
- data/spec/cgi/test +9 -0
- data/spec/cgi/test.fcgi +8 -0
- data/spec/cgi/test.ru +5 -0
- data/spec/multipart/bad_robots +259 -0
- data/spec/multipart/binary +0 -0
- data/spec/multipart/empty +10 -0
- data/spec/multipart/fail_16384_nofile +814 -0
- data/spec/multipart/file1.txt +1 -0
- data/spec/multipart/filename_and_modification_param +7 -0
- data/spec/multipart/filename_with_escaped_quotes +6 -0
- data/spec/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
- data/spec/multipart/filename_with_percent_escaped_quotes +6 -0
- data/spec/multipart/filename_with_unescaped_quotes +6 -0
- data/spec/multipart/ie +6 -0
- data/spec/multipart/nested +10 -0
- data/spec/multipart/none +9 -0
- data/spec/multipart/semicolon +6 -0
- data/spec/multipart/text +10 -0
- data/spec/rackup/config.ru +31 -0
- data/{test/spec_rack_auth_basic.rb → spec/spec_auth_basic.rb} +11 -14
- data/{test/spec_rack_auth_digest.rb → spec/spec_auth_digest.rb} +18 -21
- data/{test/spec_rack_builder.rb → spec/spec_builder.rb} +49 -10
- data/{test/spec_rack_cascade.rb → spec/spec_cascade.rb} +7 -10
- data/{test/spec_rack_cgi.rb → spec/spec_cgi.rb} +34 -32
- data/{test/spec_rack_chunked.rb → spec/spec_chunked.rb} +8 -10
- data/{test/spec_rack_commonlogger.rb → spec/spec_commonlogger.rb} +10 -15
- data/{test/spec_rack_conditionalget.rb → spec/spec_conditionalget.rb} +5 -7
- data/{test/spec_rack_config.rb → spec/spec_config.rb} +6 -7
- data/{test/spec_rack_content_length.rb → spec/spec_content_length.rb} +7 -8
- data/{test/spec_rack_content_type.rb → spec/spec_content_type.rb} +5 -6
- data/{test/spec_rack_deflater.rb → spec/spec_deflater.rb} +11 -13
- data/{test/spec_rack_directory.rb → spec/spec_directory.rb} +6 -10
- data/{test/spec_rack_etag.rb → spec/spec_etag.rb} +3 -5
- data/{test/spec_rack_fastcgi.rb → spec/spec_fastcgi.rb} +36 -29
- data/{test/spec_rack_file.rb → spec/spec_file.rb} +9 -13
- data/{test/spec_rack_handler.rb → spec/spec_handler.rb} +10 -12
- data/{test/spec_rack_head.rb → spec/spec_head.rb} +3 -3
- data/{test/spec_rack_lint.rb → spec/spec_lint.rb} +19 -32
- data/{test/spec_rack_lobster.rb → spec/spec_lobster.rb} +9 -11
- data/{test/spec_rack_lock.rb → spec/spec_lock.rb} +15 -17
- data/{test/spec_rack_logger.rb → spec/spec_logger.rb} +6 -7
- data/{test/spec_rack_methodoverride.rb → spec/spec_methodoverride.rb} +15 -17
- data/{test/spec_rack_mock.rb → spec/spec_mock.rb} +30 -32
- data/{test/spec_rack_mongrel.rb → spec/spec_mongrel.rb} +40 -46
- data/{test/spec_rack_nulllogger.rb → spec/spec_nulllogger.rb} +4 -5
- data/{test/spec_rack_recursive.rb → spec/spec_recursive.rb} +28 -36
- data/{test/spec_rack_request.rb → spec/spec_request.rb} +84 -49
- data/{test/spec_rack_response.rb → spec/spec_response.rb} +48 -29
- data/spec/spec_rewindable_input.rb +118 -0
- data/{test/spec_rack_runtime.rb → spec/spec_runtime.rb} +15 -11
- data/{test/spec_rack_sendfile.rb → spec/spec_sendfile.rb} +11 -14
- data/{test/spec_rack_session_cookie.rb → spec/spec_session_cookie.rb} +15 -18
- data/{test/spec_rack_session_memcache.rb → spec/spec_session_memcache.rb} +32 -26
- data/{test/spec_rack_session_pool.rb → spec/spec_session_pool.rb} +36 -31
- data/spec/spec_showexceptions.rb +23 -0
- data/spec/spec_showstatus.rb +79 -0
- data/{test/spec_rack_static.rb → spec/spec_static.rb} +5 -9
- data/{test/spec_rack_thin.rb → spec/spec_thin.rb} +30 -35
- data/{test/spec_rack_urlmap.rb → spec/spec_urlmap.rb} +6 -8
- data/{test/spec_rack_utils.rb → spec/spec_utils.rb} +136 -71
- data/{test/spec_rack_webrick.rb → spec/spec_webrick.rb} +28 -36
- data/spec/testrequest.rb +77 -0
- data/spec/unregistered_handler/rack/handler/unregistered.rb +7 -0
- data/spec/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
- metadata +206 -124
- data/RDOX +0 -0
- data/lib/rack/adapter/camping.rb +0 -22
- data/test/spec_rack_camping.rb +0 -51
- data/test/spec_rack_rewindable_input.rb +0 -118
- data/test/spec_rack_showexceptions.rb +0 -21
- data/test/spec_rack_showstatus.rb +0 -72
- data/test/spec_rackup.rb +0 -154
data/lib/rack/server.rb
CHANGED
|
@@ -79,12 +79,61 @@ module Rack
|
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
# Start a new rack server (like running rackup). This will parse ARGV and
|
|
83
|
+
# provide standard ARGV rackup options, defaulting to load 'config.ru'.
|
|
84
|
+
#
|
|
85
|
+
# Providing an options hash will prevent ARGV parsing and will not include
|
|
86
|
+
# any default options.
|
|
87
|
+
#
|
|
88
|
+
# This method can be used to very easily launch a CGI application, for
|
|
89
|
+
# example:
|
|
90
|
+
#
|
|
91
|
+
# Rack::Server.start(
|
|
92
|
+
# :app => lambda do |e|
|
|
93
|
+
# [200, {'Content-Type' => 'text/html'}, ['hello world']]
|
|
94
|
+
# end,
|
|
95
|
+
# :server => 'cgi'
|
|
96
|
+
# )
|
|
97
|
+
#
|
|
98
|
+
# Further options available here are documented on Rack::Server#initialize
|
|
99
|
+
def self.start(options = nil)
|
|
100
|
+
new(options).start
|
|
84
101
|
end
|
|
85
102
|
|
|
86
|
-
|
|
87
|
-
|
|
103
|
+
attr_writer :options
|
|
104
|
+
|
|
105
|
+
# Options may include:
|
|
106
|
+
# * :app
|
|
107
|
+
# a rack application to run (overrides :config)
|
|
108
|
+
# * :config
|
|
109
|
+
# a rackup configuration file path to load (.ru)
|
|
110
|
+
# * :environment
|
|
111
|
+
# this selects the middleware that will be wrapped around
|
|
112
|
+
# your application. Default options available are:
|
|
113
|
+
# - development: CommonLogger, ShowExceptions, and Lint
|
|
114
|
+
# - deployment: CommonLogger
|
|
115
|
+
# - none: no extra middleware
|
|
116
|
+
# note: when the server is a cgi server, CommonLogger is not included.
|
|
117
|
+
# * :server
|
|
118
|
+
# choose a specific Rack::Handler, e.g. cgi, fcgi, webrick
|
|
119
|
+
# * :daemonize
|
|
120
|
+
# if true, the server will daemonize itself (fork, detach, etc)
|
|
121
|
+
# * :pid
|
|
122
|
+
# path to write a pid file after daemonize
|
|
123
|
+
# * :Host
|
|
124
|
+
# the host address to bind to (used by supporting Rack::Handler)
|
|
125
|
+
# * :Port
|
|
126
|
+
# the port to bind to (used by supporting Rack::Handler)
|
|
127
|
+
# * :AccessLog
|
|
128
|
+
# webrick acess log options (or supporting Rack::Handler)
|
|
129
|
+
# * :debug
|
|
130
|
+
# turn on debug output ($DEBUG = true)
|
|
131
|
+
# * :warn
|
|
132
|
+
# turn on warnings ($-w = true)
|
|
133
|
+
# * :include
|
|
134
|
+
# add given paths to $LOAD_PATH
|
|
135
|
+
# * :require
|
|
136
|
+
# require the given libraries
|
|
88
137
|
def initialize(options = nil)
|
|
89
138
|
@options = options
|
|
90
139
|
end
|
|
@@ -119,7 +168,7 @@ module Rack
|
|
|
119
168
|
def self.middleware
|
|
120
169
|
@middleware ||= begin
|
|
121
170
|
m = Hash.new {|h,k| h[k] = []}
|
|
122
|
-
m["deployment"].concat [lambda {|server| server.server =~ /CGI/ ? nil : [Rack::CommonLogger, $stderr] }]
|
|
171
|
+
m["deployment"].concat [lambda {|server| server.server.name =~ /CGI/ ? nil : [Rack::CommonLogger, $stderr] }]
|
|
123
172
|
m["development"].concat m["deployment"] + [[Rack::ShowExceptions], [Rack::Lint]]
|
|
124
173
|
m
|
|
125
174
|
end
|
|
@@ -143,7 +192,7 @@ module Rack
|
|
|
143
192
|
end
|
|
144
193
|
|
|
145
194
|
if includes = options[:include]
|
|
146
|
-
$LOAD_PATH.unshift
|
|
195
|
+
$LOAD_PATH.unshift(*includes)
|
|
147
196
|
end
|
|
148
197
|
|
|
149
198
|
if library = options[:require]
|
|
@@ -152,11 +201,20 @@ module Rack
|
|
|
152
201
|
|
|
153
202
|
daemonize_app if options[:daemonize]
|
|
154
203
|
write_pid if options[:pid]
|
|
204
|
+
|
|
205
|
+
trap(:INT) do
|
|
206
|
+
if server.respond_to?(:shutdown)
|
|
207
|
+
server.shutdown
|
|
208
|
+
else
|
|
209
|
+
exit
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
155
213
|
server.run wrapped_app, options
|
|
156
214
|
end
|
|
157
215
|
|
|
158
216
|
def server
|
|
159
|
-
@_server ||= Rack::Handler.get(options[:server]) || Rack::Handler.default
|
|
217
|
+
@_server ||= Rack::Handler.get(options[:server]) || Rack::Handler.default(options)
|
|
160
218
|
end
|
|
161
219
|
|
|
162
220
|
private
|
|
@@ -168,6 +226,7 @@ module Rack
|
|
|
168
226
|
args.clear if ENV.include?("REQUEST_METHOD")
|
|
169
227
|
|
|
170
228
|
options.merge! opt_parser.parse! args
|
|
229
|
+
ENV["RACK_ENV"] = options[:environment]
|
|
171
230
|
options
|
|
172
231
|
end
|
|
173
232
|
|
|
@@ -31,7 +31,7 @@ module Rack
|
|
|
31
31
|
@mutex = Mutex.new
|
|
32
32
|
mserv = @default_options[:memcache_server]
|
|
33
33
|
mopts = @default_options.
|
|
34
|
-
reject{|k,v| MemCache::DEFAULT_OPTIONS.include? k }
|
|
34
|
+
reject{|k,v| !MemCache::DEFAULT_OPTIONS.include? k }
|
|
35
35
|
@pool = MemCache.new mserv, mopts
|
|
36
36
|
unless @pool.active? and @pool.servers.any?{|c| c.alive? }
|
|
37
37
|
raise 'No memcache servers'
|
data/lib/rack/urlmap.rb
CHANGED
|
@@ -35,21 +35,20 @@ module Rack
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def call(env)
|
|
38
|
-
path = env["PATH_INFO"]
|
|
38
|
+
path = env["PATH_INFO"]
|
|
39
39
|
script_name = env['SCRIPT_NAME']
|
|
40
40
|
hHost, sName, sPort = env.values_at('HTTP_HOST','SERVER_NAME','SERVER_PORT')
|
|
41
41
|
@mapping.each { |host, location, match, app|
|
|
42
42
|
next unless (hHost == host || sName == host \
|
|
43
43
|
|| (host.nil? && (hHost == sName || hHost == sName+':'+sPort)))
|
|
44
|
-
next unless path =~ match && rest = $1
|
|
44
|
+
next unless path.to_s =~ match && rest = $1
|
|
45
45
|
next unless rest.empty? || rest[0] == ?/
|
|
46
|
-
|
|
47
|
-
return app.call(
|
|
48
|
-
env.merge(
|
|
49
|
-
'SCRIPT_NAME' => (script_name + location),
|
|
50
|
-
'PATH_INFO' => rest))
|
|
46
|
+
env.merge!('SCRIPT_NAME' => (script_name + location), 'PATH_INFO' => rest)
|
|
47
|
+
return app.call(env)
|
|
51
48
|
}
|
|
52
49
|
[404, {"Content-Type" => "text/plain", "X-Cascade" => "pass"}, ["Not Found: #{path}"]]
|
|
50
|
+
ensure
|
|
51
|
+
env.merge! 'PATH_INFO' => path, 'SCRIPT_NAME' => script_name
|
|
53
52
|
end
|
|
54
53
|
end
|
|
55
54
|
end
|
data/lib/rack/utils.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# -*- encoding: binary -*-
|
|
2
2
|
|
|
3
|
+
require 'fileutils'
|
|
3
4
|
require 'set'
|
|
4
5
|
require 'tempfile'
|
|
5
6
|
|
|
@@ -38,9 +39,6 @@ module Rack
|
|
|
38
39
|
|
|
39
40
|
(qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p|
|
|
40
41
|
k, v = p.split('=', 2).map { |x| unescape(x) }
|
|
41
|
-
if v =~ /^("|')(.*)\1$/
|
|
42
|
-
v = $2.gsub('\\'+$1, $1)
|
|
43
|
-
end
|
|
44
42
|
if cur = params[k]
|
|
45
43
|
if cur.class == Array
|
|
46
44
|
params[k] << v
|
|
@@ -69,9 +67,6 @@ module Rack
|
|
|
69
67
|
module_function :parse_nested_query
|
|
70
68
|
|
|
71
69
|
def normalize_params(params, name, v = nil)
|
|
72
|
-
if v and v =~ /^("|')(.*)\1$/
|
|
73
|
-
v = $2.gsub('\\'+$1, $1)
|
|
74
|
-
end
|
|
75
70
|
name =~ %r(\A[\[\]]*([^\[\]]+)\]*)
|
|
76
71
|
k = $1 || ''
|
|
77
72
|
after = $' || ''
|
|
@@ -180,8 +175,8 @@ module Rack
|
|
|
180
175
|
path = "; path=" + value[:path] if value[:path]
|
|
181
176
|
# According to RFC 2109, we need dashes here.
|
|
182
177
|
# N.B.: cgi.rb uses spaces...
|
|
183
|
-
expires = "; expires=" +
|
|
184
|
-
|
|
178
|
+
expires = "; expires=" +
|
|
179
|
+
rfc2822(value[:expires].clone.gmtime) if value[:expires]
|
|
185
180
|
secure = "; secure" if value[:secure]
|
|
186
181
|
httponly = "; HttpOnly" if value[:httponly]
|
|
187
182
|
value = value[:value]
|
|
@@ -192,12 +187,12 @@ module Rack
|
|
|
192
187
|
"#{domain}#{path}#{expires}#{secure}#{httponly}"
|
|
193
188
|
|
|
194
189
|
case header["Set-Cookie"]
|
|
195
|
-
when
|
|
196
|
-
header["Set-Cookie"] << cookie
|
|
197
|
-
when String
|
|
198
|
-
header["Set-Cookie"] = [header["Set-Cookie"], cookie]
|
|
199
|
-
when nil
|
|
190
|
+
when nil, ''
|
|
200
191
|
header["Set-Cookie"] = cookie
|
|
192
|
+
when String
|
|
193
|
+
header["Set-Cookie"] = [header["Set-Cookie"], cookie].join("\n")
|
|
194
|
+
when Array
|
|
195
|
+
header["Set-Cookie"] = (header["Set-Cookie"] + [cookie]).join("\n")
|
|
201
196
|
end
|
|
202
197
|
|
|
203
198
|
nil
|
|
@@ -205,14 +200,25 @@ module Rack
|
|
|
205
200
|
module_function :set_cookie_header!
|
|
206
201
|
|
|
207
202
|
def delete_cookie_header!(header, key, value = {})
|
|
208
|
-
|
|
209
|
-
|
|
203
|
+
case header["Set-Cookie"]
|
|
204
|
+
when nil, ''
|
|
205
|
+
cookies = []
|
|
206
|
+
when String
|
|
207
|
+
cookies = header["Set-Cookie"].split("\n")
|
|
208
|
+
when Array
|
|
209
|
+
cookies = header["Set-Cookie"]
|
|
210
210
|
end
|
|
211
211
|
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
cookies.reject! { |cookie|
|
|
213
|
+
if value[:domain]
|
|
214
|
+
cookie =~ /\A#{escape(key)}=.*domain=#{value[:domain]}/
|
|
215
|
+
else
|
|
216
|
+
cookie =~ /\A#{escape(key)}=/
|
|
217
|
+
end
|
|
214
218
|
}
|
|
215
219
|
|
|
220
|
+
header["Set-Cookie"] = cookies.join("\n")
|
|
221
|
+
|
|
216
222
|
set_cookie_header!(header, key,
|
|
217
223
|
{:value => '', :path => nil, :domain => nil,
|
|
218
224
|
:expires => Time.at(0) }.merge(value))
|
|
@@ -234,6 +240,22 @@ module Rack
|
|
|
234
240
|
end
|
|
235
241
|
module_function :bytesize
|
|
236
242
|
|
|
243
|
+
# Modified version of stdlib time.rb Time#rfc2822 to use '%d-%b-%Y' instead
|
|
244
|
+
# of '% %b %Y'.
|
|
245
|
+
# It assumes that the time is in GMT to comply to the RFC 2109.
|
|
246
|
+
#
|
|
247
|
+
# NOTE: I'm not sure the RFC says it requires GMT, but is ambigous enough
|
|
248
|
+
# that I'm certain someone implemented only that option.
|
|
249
|
+
# Do not use %a and %b from Time.strptime, it would use localized names for
|
|
250
|
+
# weekday and month.
|
|
251
|
+
#
|
|
252
|
+
def rfc2822(time)
|
|
253
|
+
wday = Time::RFC2822_DAY_NAME[time.wday]
|
|
254
|
+
mon = Time::RFC2822_MONTH_NAME[time.mon - 1]
|
|
255
|
+
time.strftime("#{wday}, %d-#{mon}-%Y %T GMT")
|
|
256
|
+
end
|
|
257
|
+
module_function :rfc2822
|
|
258
|
+
|
|
237
259
|
# Context allows the use of a compatible middleware at different points
|
|
238
260
|
# in a request handling stack. A compatible middleware must define
|
|
239
261
|
# #context which should take the arguments env and app. The first of which
|
|
@@ -291,7 +313,8 @@ module Rack
|
|
|
291
313
|
end
|
|
292
314
|
|
|
293
315
|
def [](k)
|
|
294
|
-
super(@names[k]
|
|
316
|
+
super(@names[k]) if @names[k]
|
|
317
|
+
super(@names[k.downcase])
|
|
295
318
|
end
|
|
296
319
|
|
|
297
320
|
def []=(k, v)
|
|
@@ -478,11 +501,31 @@ module Rack
|
|
|
478
501
|
head = buf.slice!(0, i+2) # First \r\n
|
|
479
502
|
buf.slice!(0, 2) # Second \r\n
|
|
480
503
|
|
|
481
|
-
|
|
504
|
+
token = /[^\s()<>,;:\\"\/\[\]?=]+/
|
|
505
|
+
condisp = /Content-Disposition:\s*#{token}\s*/i
|
|
506
|
+
dispparm = /;\s*(#{token})=("(?:\\"|[^"])*"|#{token})*/
|
|
507
|
+
|
|
508
|
+
rfc2183 = /^#{condisp}(#{dispparm})+$/i
|
|
509
|
+
broken_quoted = /^#{condisp}.*;\sfilename="(.*?)"(?:\s*$|\s*;\s*#{token}=)/i
|
|
510
|
+
broken_unquoted = /^#{condisp}.*;\sfilename=(#{token})/i
|
|
511
|
+
|
|
512
|
+
if head =~ rfc2183
|
|
513
|
+
filename = Hash[head.scan(dispparm)]['filename']
|
|
514
|
+
filename = $1 if filename and filename =~ /^"(.*)"$/
|
|
515
|
+
elsif head =~ broken_quoted
|
|
516
|
+
filename = $1
|
|
517
|
+
elsif head =~ broken_unquoted
|
|
518
|
+
filename = $1
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
if filename && filename !~ /\\[^\\"]/
|
|
522
|
+
filename = Utils.unescape(filename).gsub(/\\(.)/, '\1')
|
|
523
|
+
end
|
|
524
|
+
|
|
482
525
|
content_type = head[/Content-Type: (.*)#{EOL}/ni, 1]
|
|
483
526
|
name = head[/Content-Disposition:.*\s+name="?([^\";]*)"?/ni, 1] || head[/Content-ID:\s*([^#{EOL}]*)/ni, 1]
|
|
484
527
|
|
|
485
|
-
if
|
|
528
|
+
if filename
|
|
486
529
|
body = Tempfile.new("RackMultipart")
|
|
487
530
|
body.binmode if body.respond_to?(:binmode)
|
|
488
531
|
end
|
|
@@ -519,8 +562,7 @@ module Rack
|
|
|
519
562
|
# This handles the full Windows paths given by Internet Explorer
|
|
520
563
|
# (and perhaps other broken user agents) without affecting
|
|
521
564
|
# those which give the lone filename.
|
|
522
|
-
filename
|
|
523
|
-
filename = $1
|
|
565
|
+
filename = filename.split(/[\/\\]/).last
|
|
524
566
|
|
|
525
567
|
data = {:filename => filename, :type => content_type,
|
|
526
568
|
:name => name, :tempfile => body, :head => head}
|
data/lib/rack.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Rack
|
|
|
20
20
|
|
|
21
21
|
# Return the Rack release as a dotted string.
|
|
22
22
|
def self.release
|
|
23
|
-
"1.
|
|
23
|
+
"1.2"
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
autoload :Builder, "rack/builder"
|
|
@@ -78,15 +78,4 @@ module Rack
|
|
|
78
78
|
autoload :Pool, "rack/session/pool"
|
|
79
79
|
autoload :Memcache, "rack/session/memcache"
|
|
80
80
|
end
|
|
81
|
-
|
|
82
|
-
# *Adapters* connect Rack with third party web frameworks.
|
|
83
|
-
#
|
|
84
|
-
# Rack includes an adapter for Camping, see README for other
|
|
85
|
-
# frameworks supporting Rack in their code bases.
|
|
86
|
-
#
|
|
87
|
-
# Refer to the submodules for framework-specific calling details.
|
|
88
|
-
|
|
89
|
-
module Adapter
|
|
90
|
-
autoload :Camping, "rack/adapter/camping"
|
|
91
|
-
end
|
|
92
81
|
end
|
data/rack.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |s|
|
|
2
2
|
s.name = "rack"
|
|
3
|
-
s.version = "1.
|
|
3
|
+
s.version = "1.2.0"
|
|
4
4
|
s.platform = Gem::Platform::RUBY
|
|
5
5
|
s.summary = "a modular Ruby webserver interface"
|
|
6
6
|
|
|
@@ -14,23 +14,23 @@ middleware) into a single method call.
|
|
|
14
14
|
Also see http://rack.rubyforge.org.
|
|
15
15
|
EOF
|
|
16
16
|
|
|
17
|
-
s.files = Dir['{bin/*,contrib/*,example/*,lib/**/*}'] +
|
|
18
|
-
%w(COPYING KNOWN-ISSUES rack.gemspec
|
|
17
|
+
s.files = Dir['{bin/*,contrib/*,example/*,lib/**/*,spec/**/*}'] +
|
|
18
|
+
%w(COPYING KNOWN-ISSUES rack.gemspec README SPEC)
|
|
19
19
|
s.bindir = 'bin'
|
|
20
20
|
s.executables << 'rackup'
|
|
21
21
|
s.require_path = 'lib'
|
|
22
22
|
s.has_rdoc = true
|
|
23
23
|
s.extra_rdoc_files = ['README', 'SPEC', 'KNOWN-ISSUES']
|
|
24
|
-
s.test_files = Dir['
|
|
24
|
+
s.test_files = Dir['spec/spec_*.rb']
|
|
25
25
|
|
|
26
26
|
s.author = 'Christian Neukirchen'
|
|
27
27
|
s.email = 'chneukirchen@gmail.com'
|
|
28
28
|
s.homepage = 'http://rack.rubyforge.org'
|
|
29
29
|
s.rubyforge_project = 'rack'
|
|
30
30
|
|
|
31
|
-
s.add_development_dependency '
|
|
31
|
+
s.add_development_dependency 'bacon'
|
|
32
|
+
s.add_development_dependency 'rake'
|
|
32
33
|
|
|
33
|
-
s.add_development_dependency 'camping'
|
|
34
34
|
s.add_development_dependency 'fcgi'
|
|
35
35
|
s.add_development_dependency 'memcache-client'
|
|
36
36
|
s.add_development_dependency 'mongrel'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
server.modules = ("mod_fastcgi", "mod_cgi")
|
|
2
|
+
server.document-root = "."
|
|
3
|
+
server.errorlog = var.CWD + "/lighttpd.errors"
|
|
4
|
+
server.port = 9203
|
|
5
|
+
|
|
6
|
+
server.event-handler = "select"
|
|
7
|
+
|
|
8
|
+
cgi.assign = ("/test" => "",
|
|
9
|
+
# ".ru" => ""
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
fastcgi.server = (
|
|
13
|
+
"test.fcgi" => ("localhost" =>
|
|
14
|
+
("min-procs" => 1,
|
|
15
|
+
"socket" => "/tmp/rack-test-fcgi",
|
|
16
|
+
"bin-path" => "test.fcgi")),
|
|
17
|
+
"test.ru" => ("localhost" =>
|
|
18
|
+
("min-procs" => 1,
|
|
19
|
+
"socket" => "/tmp/rack-test-ru-fcgi",
|
|
20
|
+
"bin-path" => "test.ru")),
|
|
21
|
+
"sample_rackup.ru" => ("localhost" =>
|
|
22
|
+
("min-procs" => 1,
|
|
23
|
+
"socket" => "/tmp/rack-test-rackup-fcgi",
|
|
24
|
+
"bin-path" => CWD + "/rackup_stub.rb sample_rackup.ru")),
|
|
25
|
+
)
|
data/spec/cgi/test
ADDED
data/spec/cgi/test.fcgi
ADDED