kastner-rack 0.3.171

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/AUTHORS +8 -0
  2. data/COPYING +18 -0
  3. data/KNOWN-ISSUES +18 -0
  4. data/README +273 -0
  5. data/Rakefile +185 -0
  6. data/bin/rackup +172 -0
  7. data/contrib/rack_logo.svg +111 -0
  8. data/example/lobster.ru +4 -0
  9. data/example/protectedlobster.rb +14 -0
  10. data/example/protectedlobster.ru +8 -0
  11. data/lib/rack.rb +85 -0
  12. data/lib/rack/adapter/camping.rb +22 -0
  13. data/lib/rack/auth/abstract/handler.rb +28 -0
  14. data/lib/rack/auth/abstract/request.rb +37 -0
  15. data/lib/rack/auth/basic.rb +58 -0
  16. data/lib/rack/auth/digest/md5.rb +124 -0
  17. data/lib/rack/auth/digest/nonce.rb +51 -0
  18. data/lib/rack/auth/digest/params.rb +55 -0
  19. data/lib/rack/auth/digest/request.rb +40 -0
  20. data/lib/rack/auth/openid.rb +437 -0
  21. data/lib/rack/builder.rb +67 -0
  22. data/lib/rack/cascade.rb +36 -0
  23. data/lib/rack/commonlogger.rb +61 -0
  24. data/lib/rack/conditionalget.rb +42 -0
  25. data/lib/rack/deflater.rb +63 -0
  26. data/lib/rack/directory.rb +149 -0
  27. data/lib/rack/file.rb +84 -0
  28. data/lib/rack/handler.rb +46 -0
  29. data/lib/rack/handler/cgi.rb +57 -0
  30. data/lib/rack/handler/evented_mongrel.rb +8 -0
  31. data/lib/rack/handler/fastcgi.rb +86 -0
  32. data/lib/rack/handler/lsws.rb +52 -0
  33. data/lib/rack/handler/mongrel.rb +78 -0
  34. data/lib/rack/handler/scgi.rb +57 -0
  35. data/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  36. data/lib/rack/handler/webrick.rb +61 -0
  37. data/lib/rack/head.rb +19 -0
  38. data/lib/rack/lint.rb +463 -0
  39. data/lib/rack/lobster.rb +65 -0
  40. data/lib/rack/methodoverride.rb +21 -0
  41. data/lib/rack/mime.rb +204 -0
  42. data/lib/rack/mock.rb +160 -0
  43. data/lib/rack/recursive.rb +57 -0
  44. data/lib/rack/reloader.rb +64 -0
  45. data/lib/rack/request.rb +217 -0
  46. data/lib/rack/response.rb +171 -0
  47. data/lib/rack/session/abstract/id.rb +140 -0
  48. data/lib/rack/session/cookie.rb +89 -0
  49. data/lib/rack/session/memcache.rb +97 -0
  50. data/lib/rack/session/pool.rb +73 -0
  51. data/lib/rack/showexceptions.rb +348 -0
  52. data/lib/rack/showstatus.rb +105 -0
  53. data/lib/rack/static.rb +38 -0
  54. data/lib/rack/urlmap.rb +48 -0
  55. data/lib/rack/utils.rb +318 -0
  56. data/rack.gemspec +31 -0
  57. data/test/cgi/lighttpd.conf +20 -0
  58. data/test/cgi/test +9 -0
  59. data/test/cgi/test.fcgi +8 -0
  60. data/test/cgi/test.ru +7 -0
  61. data/test/spec_rack_auth_basic.rb +69 -0
  62. data/test/spec_rack_auth_digest.rb +169 -0
  63. data/test/spec_rack_auth_openid.rb +137 -0
  64. data/test/spec_rack_builder.rb +84 -0
  65. data/test/spec_rack_camping.rb +51 -0
  66. data/test/spec_rack_cascade.rb +50 -0
  67. data/test/spec_rack_cgi.rb +89 -0
  68. data/test/spec_rack_commonlogger.rb +32 -0
  69. data/test/spec_rack_conditionalget.rb +41 -0
  70. data/test/spec_rack_deflater.rb +70 -0
  71. data/test/spec_rack_directory.rb +56 -0
  72. data/test/spec_rack_fastcgi.rb +89 -0
  73. data/test/spec_rack_file.rb +57 -0
  74. data/test/spec_rack_handler.rb +24 -0
  75. data/test/spec_rack_head.rb +30 -0
  76. data/test/spec_rack_lint.rb +371 -0
  77. data/test/spec_rack_lobster.rb +45 -0
  78. data/test/spec_rack_methodoverride.rb +31 -0
  79. data/test/spec_rack_mock.rb +152 -0
  80. data/test/spec_rack_mongrel.rb +170 -0
  81. data/test/spec_rack_recursive.rb +77 -0
  82. data/test/spec_rack_request.rb +426 -0
  83. data/test/spec_rack_response.rb +173 -0
  84. data/test/spec_rack_session_cookie.rb +78 -0
  85. data/test/spec_rack_session_memcache.rb +132 -0
  86. data/test/spec_rack_session_pool.rb +84 -0
  87. data/test/spec_rack_showexceptions.rb +21 -0
  88. data/test/spec_rack_showstatus.rb +72 -0
  89. data/test/spec_rack_static.rb +37 -0
  90. data/test/spec_rack_urlmap.rb +175 -0
  91. data/test/spec_rack_utils.rb +174 -0
  92. data/test/spec_rack_webrick.rb +123 -0
  93. data/test/testrequest.rb +45 -0
  94. metadata +177 -0
@@ -0,0 +1,174 @@
1
+ require 'test/spec'
2
+
3
+ require 'rack/utils'
4
+ require 'rack/lint'
5
+ require 'rack/mock'
6
+
7
+ context "Rack::Utils" do
8
+ specify "should escape correctly" do
9
+ Rack::Utils.escape("fo<o>bar").should.equal "fo%3Co%3Ebar"
10
+ Rack::Utils.escape("a space").should.equal "a+space"
11
+ Rack::Utils.escape("q1!2\"'w$5&7/z8)?\\").
12
+ should.equal "q1%212%22%27w%245%267%2Fz8%29%3F%5C"
13
+ end
14
+
15
+ specify "should unescape correctly" do
16
+ Rack::Utils.unescape("fo%3Co%3Ebar").should.equal "fo<o>bar"
17
+ Rack::Utils.unescape("a+space").should.equal "a space"
18
+ Rack::Utils.unescape("a%20space").should.equal "a space"
19
+ Rack::Utils.unescape("q1%212%22%27w%245%267%2Fz8%29%3F%5C").
20
+ should.equal "q1!2\"'w$5&7/z8)?\\"
21
+ end
22
+
23
+ specify "should parse query strings correctly" do
24
+ Rack::Utils.parse_query("foo=bar").should.equal "foo" => "bar"
25
+ Rack::Utils.parse_query("foo=bar&foo=quux").
26
+ should.equal "foo" => ["bar", "quux"]
27
+ Rack::Utils.parse_query("foo=1&bar=2").
28
+ should.equal "foo" => "1", "bar" => "2"
29
+ Rack::Utils.parse_query("my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F").
30
+ should.equal "my weird field" => "q1!2\"'w$5&7/z8)?"
31
+ end
32
+
33
+ specify "should build query strings correctly" do
34
+ Rack::Utils.build_query("foo" => "bar").should.equal "foo=bar"
35
+ Rack::Utils.build_query("foo" => ["bar", "quux"]).
36
+ should.equal "foo=bar&foo=quux"
37
+ Rack::Utils.build_query("foo" => "1", "bar" => "2").
38
+ should.equal "foo=1&bar=2"
39
+ Rack::Utils.build_query("my weird field" => "q1!2\"'w$5&7/z8)?").
40
+ should.equal "my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F"
41
+ end
42
+
43
+ specify "should figure out which encodings are acceptable" do
44
+ helper = lambda do |a, b|
45
+ request = Rack::Request.new(Rack::MockRequest.env_for("", "HTTP_ACCEPT_ENCODING" => a))
46
+ Rack::Utils.select_best_encoding(a, b)
47
+ end
48
+
49
+ helper.call(%w(), [["x", 1]]).should.equal(nil)
50
+ helper.call(%w(identity), [["identity", 0.0]]).should.equal(nil)
51
+ helper.call(%w(identity), [["*", 0.0]]).should.equal(nil)
52
+
53
+ helper.call(%w(identity), [["compress", 1.0], ["gzip", 1.0]]).should.equal("identity")
54
+
55
+ helper.call(%w(compress gzip identity), [["compress", 1.0], ["gzip", 1.0]]).should.equal("compress")
56
+ helper.call(%w(compress gzip identity), [["compress", 0.5], ["gzip", 1.0]]).should.equal("gzip")
57
+
58
+ helper.call(%w(foo bar identity), []).should.equal("identity")
59
+ helper.call(%w(foo bar identity), [["*", 1.0]]).should.equal("foo")
60
+ helper.call(%w(foo bar identity), [["*", 1.0], ["foo", 0.9]]).should.equal("bar")
61
+
62
+ helper.call(%w(foo bar identity), [["foo", 0], ["bar", 0]]).should.equal("identity")
63
+ helper.call(%w(foo bar baz identity), [["*", 0], ["identity", 0.1]]).should.equal("identity")
64
+ end
65
+ end
66
+
67
+ context "Rack::Utils::HeaderHash" do
68
+ specify "should capitalize on all accesses" do
69
+ h = Rack::Utils::HeaderHash.new("foo" => "bar")
70
+ h["foo"].should.equal "bar"
71
+ h["Foo"].should.equal "bar"
72
+ h["FOO"].should.equal "bar"
73
+
74
+ h.to_hash.should.equal "Foo" => "bar"
75
+
76
+ h["bar-zzle"] = "quux"
77
+
78
+ h.to_hash.should.equal "Foo" => "bar", "Bar-Zzle" => "quux"
79
+ end
80
+
81
+ specify "should capitalize correctly" do
82
+ h = Rack::Utils::HeaderHash.new
83
+
84
+ h.capitalize("foo").should.equal "Foo"
85
+ h.capitalize("foo-bar").should.equal "Foo-Bar"
86
+ h.capitalize("foo_bar").should.equal "Foo_Bar"
87
+ h.capitalize("foo bar").should.equal "Foo Bar"
88
+ h.capitalize("foo-bar-quux").should.equal "Foo-Bar-Quux"
89
+ h.capitalize("foo-bar-2quux").should.equal "Foo-Bar-2quux"
90
+ end
91
+
92
+ specify "should be converted to real Hash" do
93
+ h = Rack::Utils::HeaderHash.new("foo" => "bar")
94
+ h.to_hash.should.be.instance_of Hash
95
+ end
96
+ end
97
+
98
+ context "Rack::Utils::Context" do
99
+ test_app1 = Object.new
100
+ def test_app1.context app
101
+ Rack::Utils::Context.new self, app do |env|
102
+ app.call env
103
+ end
104
+ end
105
+ test_app2 = Object.new
106
+ def test_app2.context env; end
107
+ test_app3 = Object.new
108
+ test_target1 = proc{|e| e.to_s+' world' }
109
+ test_target2 = proc{|e| e.to_i+2 }
110
+ test_target3 = proc{|e| nil }
111
+ test_target4 = proc{|e| [200,{'Content-Type'=>'text/plain', 'Content-Length'=>'0'},['']] }
112
+ test_target5 = Object.new
113
+
114
+ specify "should perform checks on both arguments" do
115
+ lambda { Rack::Utils::Context.new(nil, nil){} }.should.raise
116
+ lambda { Rack::Utils::Context.new(test_app1, nil){} }.should.raise
117
+ lambda { Rack::Utils::Context.new(nil, test_target1){} }.should.raise
118
+ lambda { Rack::Utils::Context.new(test_app1, test_target1){} }.should.not.raise
119
+ lambda { Rack::Utils::Context.new(test_app3, test_target1){} }.should.raise
120
+ lambda { Rack::Utils::Context.new(test_app1, test_target5){} }.should.raise
121
+ lambda { test_app1.context(nil){} }.should.raise
122
+ lambda { test_app1.context(test_target1){} }.should.not.raise
123
+ lambda { test_app1.context(test_target5){} }.should.raise
124
+ end
125
+
126
+ specify "should set context correctly" do
127
+ c1 = Rack::Utils::Context.new(test_app1, test_target1){}
128
+ c1.for.should.equal test_app1
129
+ c1.app.should.equal test_target1
130
+ c2 = Rack::Utils::Context.new(test_app1, test_target2){}
131
+ c2.for.should.equal test_app1
132
+ c2.app.should.equal test_target2
133
+ c3 = Rack::Utils::Context.new(test_app2, test_target3){}
134
+ c3.for.should.equal test_app2
135
+ c3.app.should.equal test_target3
136
+ c4 = Rack::Utils::Context.new(test_app2, test_target4){}
137
+ c4.for.should.equal test_app2
138
+ c4.app.should.equal test_target4
139
+ end
140
+
141
+ specify "should alter app on recontexting" do
142
+ c1 = Rack::Utils::Context.new(test_app1, test_target1){}
143
+ c1.for.should.equal test_app1
144
+ c1.app.should.equal test_target1
145
+ c2 = c1.context(test_target2)
146
+ c2.for.should.equal test_app1
147
+ c2.app.should.not.equal test_target1
148
+ c2.app.should.equal test_target2
149
+ c3 = c2.context(test_target3)
150
+ c3.for.should.equal test_app1
151
+ c3.app.should.not.equal test_target2
152
+ c3.app.should.equal test_target3
153
+ c4 = c3.context(test_target4)
154
+ c4.for.should.equal test_app1
155
+ c4.app.should.not.equal test_target3
156
+ c4.app.should.equal test_target4
157
+ end
158
+
159
+ specify "should run different apps" do
160
+ c1 = test_app1.context(test_target1)
161
+ c2 = c1.context test_target2
162
+ c3 = c2.context test_target3
163
+ c4 = c3.context test_target4
164
+ a4 = Rack::Lint.new c4
165
+ r1 = c1.call('hello')
166
+ r1.should.equal 'hello world'
167
+ r2 = c2.call(2)
168
+ r2.should.equal 4
169
+ r3 = c3.call(:misc_symbol)
170
+ r3.should.be.nil
171
+ r4 = Rack::MockRequest.new(a4).get('/')
172
+ r4.status.should.be 200
173
+ end
174
+ end
@@ -0,0 +1,123 @@
1
+ require 'test/spec'
2
+
3
+ require 'rack/handler/webrick'
4
+ require 'rack/lint'
5
+ require 'rack/response'
6
+ require 'testrequest'
7
+
8
+ Thread.abort_on_exception = true
9
+
10
+ context "Rack::Handler::WEBrick" do
11
+ include TestRequest::Helpers
12
+
13
+ setup do
14
+ @server = WEBrick::HTTPServer.new(:Host => @host='0.0.0.0',
15
+ :Port => @port=9202,
16
+ :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
17
+ :AccessLog => [])
18
+ @server.mount "/test", Rack::Handler::WEBrick,
19
+ Rack::Lint.new(TestRequest.new)
20
+ Thread.new { @server.start }
21
+ trap(:INT) { @server.shutdown }
22
+ end
23
+
24
+ specify "should respond" do
25
+ lambda {
26
+ GET("/test")
27
+ }.should.not.raise
28
+ end
29
+
30
+ specify "should be a WEBrick" do
31
+ GET("/test")
32
+ status.should.be 200
33
+ response["SERVER_SOFTWARE"].should =~ /WEBrick/
34
+ response["HTTP_VERSION"].should.equal "HTTP/1.1"
35
+ response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
36
+ response["SERVER_PORT"].should.equal "9202"
37
+ response["SERVER_NAME"].should.equal "0.0.0.0"
38
+ end
39
+
40
+ specify "should have rack headers" do
41
+ GET("/test")
42
+ response["rack.version"].should.equal [0,1]
43
+ response["rack.multithread"].should.be true
44
+ response["rack.multiprocess"].should.be false
45
+ response["rack.run_once"].should.be false
46
+ end
47
+
48
+ specify "should have CGI headers on GET" do
49
+ GET("/test")
50
+ response["REQUEST_METHOD"].should.equal "GET"
51
+ response["SCRIPT_NAME"].should.equal "/test"
52
+ response["REQUEST_PATH"].should.equal "/"
53
+ response["PATH_INFO"].should.be.nil
54
+ response["QUERY_STRING"].should.equal ""
55
+ response["test.postdata"].should.equal ""
56
+
57
+ GET("/test/foo?quux=1")
58
+ response["REQUEST_METHOD"].should.equal "GET"
59
+ response["SCRIPT_NAME"].should.equal "/test"
60
+ response["REQUEST_PATH"].should.equal "/"
61
+ response["PATH_INFO"].should.equal "/foo"
62
+ response["QUERY_STRING"].should.equal "quux=1"
63
+ end
64
+
65
+ specify "should have CGI headers on POST" do
66
+ POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
67
+ status.should.equal 200
68
+ response["REQUEST_METHOD"].should.equal "POST"
69
+ response["SCRIPT_NAME"].should.equal "/test"
70
+ response["REQUEST_PATH"].should.equal "/"
71
+ response["QUERY_STRING"].should.equal ""
72
+ response["HTTP_X_TEST_HEADER"].should.equal "42"
73
+ response["test.postdata"].should.equal "rack-form-data=23"
74
+ end
75
+
76
+ specify "should support HTTP auth" do
77
+ GET("/test", {:user => "ruth", :passwd => "secret"})
78
+ response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
79
+ end
80
+
81
+ specify "should set status" do
82
+ GET("/test?secret")
83
+ status.should.equal 403
84
+ response["rack.url_scheme"].should.equal "http"
85
+ end
86
+
87
+ specify "should correctly set cookies" do
88
+ @server.mount "/cookie-test", Rack::Handler::WEBrick,
89
+ Rack::Lint.new(lambda { |req|
90
+ res = Rack::Response.new
91
+ res.set_cookie "one", "1"
92
+ res.set_cookie "two", "2"
93
+ res.finish
94
+ })
95
+
96
+ Net::HTTP.start(@host, @port) { |http|
97
+ res, body = http.get("/cookie-test")
98
+ res.code.to_i.should.equal 200
99
+ res.get_fields("set-cookie").should.equal ["one=1", "two=2"]
100
+ }
101
+ end
102
+
103
+ specify "should provide a .run" do
104
+ block_ran = false
105
+ catch(:done) {
106
+ Rack::Handler::WEBrick.run(lambda {},
107
+ {:Port => 9210,
108
+ :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
109
+ :AccessLog => []}) { |server|
110
+ block_ran = true
111
+ server.should.be.kind_of WEBrick::HTTPServer
112
+ @s = server
113
+ throw :done
114
+ }
115
+ }
116
+ block_ran.should.be true
117
+ @s.shutdown
118
+ end
119
+
120
+ teardown do
121
+ @server.shutdown
122
+ end
123
+ end
@@ -0,0 +1,45 @@
1
+ require 'yaml'
2
+ require 'net/http'
3
+
4
+ class TestRequest
5
+ def call(env)
6
+ status = env["QUERY_STRING"] =~ /secret/ ? 403 : 200
7
+ env["test.postdata"] = env["rack.input"].read
8
+ body = env.to_yaml
9
+ size = body.respond_to?(:bytesize) ? body.bytesize : body.size
10
+ [status, {"Content-Type" => "text/yaml", "Content-Length" => size.to_s}, [body]]
11
+ end
12
+
13
+ module Helpers
14
+ attr_reader :status, :response
15
+
16
+ def GET(path, header={})
17
+ Net::HTTP.start(@host, @port) { |http|
18
+ user = header.delete(:user)
19
+ passwd = header.delete(:passwd)
20
+
21
+ get = Net::HTTP::Get.new(path, header)
22
+ get.basic_auth user, passwd if user && passwd
23
+ http.request(get) { |response|
24
+ @status = response.code.to_i
25
+ @response = YAML.load(response.body)
26
+ }
27
+ }
28
+ end
29
+
30
+ def POST(path, formdata={}, header={})
31
+ Net::HTTP.start(@host, @port) { |http|
32
+ user = header.delete(:user)
33
+ passwd = header.delete(:passwd)
34
+
35
+ post = Net::HTTP::Post.new(path, header)
36
+ post.form_data = formdata
37
+ post.basic_auth user, passwd if user && passwd
38
+ http.request(post) { |response|
39
+ @status = response.code.to_i
40
+ @response = YAML.load(response.body)
41
+ }
42
+ }
43
+ end
44
+ end
45
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kastner-rack
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.171
5
+ platform: ruby
6
+ authors:
7
+ - Christian Neukirchen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-28 00:00:00 -08:00
13
+ default_executable: rackup
14
+ dependencies: []
15
+
16
+ description: Rack provides minimal, modular and adaptable interface for developing web applications in Ruby. By wrapping HTTP requests and responses in the simplest way possible, it unifies and distills the API for web servers, web frameworks, and software in between (the so-called middleware) into a single method call. Also see http://rack.rubyforge.org.
17
+ email: chneukirchen@gmail.com
18
+ executables:
19
+ - rackup
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - KNOWN-ISSUES
25
+ files:
26
+ - AUTHORS
27
+ - COPYING
28
+ - KNOWN-ISSUES
29
+ - README
30
+ - Rakefile
31
+ - bin/rackup
32
+ - contrib/rack_logo.svg
33
+ - example/lobster.ru
34
+ - example/protectedlobster.rb
35
+ - example/protectedlobster.ru
36
+ - lib/rack.rb
37
+ - lib/rack/adapter/camping.rb
38
+ - lib/rack/auth/abstract/handler.rb
39
+ - lib/rack/auth/abstract/request.rb
40
+ - lib/rack/auth/basic.rb
41
+ - lib/rack/auth/digest/md5.rb
42
+ - lib/rack/auth/digest/nonce.rb
43
+ - lib/rack/auth/digest/params.rb
44
+ - lib/rack/auth/digest/request.rb
45
+ - lib/rack/auth/openid.rb
46
+ - lib/rack/builder.rb
47
+ - lib/rack/cascade.rb
48
+ - lib/rack/commonlogger.rb
49
+ - lib/rack/conditionalget.rb
50
+ - lib/rack/deflater.rb
51
+ - lib/rack/directory.rb
52
+ - lib/rack/file.rb
53
+ - lib/rack/handler.rb
54
+ - lib/rack/handler/cgi.rb
55
+ - lib/rack/handler/evented_mongrel.rb
56
+ - lib/rack/handler/fastcgi.rb
57
+ - lib/rack/handler/lsws.rb
58
+ - lib/rack/handler/mongrel.rb
59
+ - lib/rack/handler/scgi.rb
60
+ - lib/rack/handler/swiftiplied_mongrel.rb
61
+ - lib/rack/handler/webrick.rb
62
+ - lib/rack/head.rb
63
+ - lib/rack/lint.rb
64
+ - lib/rack/lobster.rb
65
+ - lib/rack/methodoverride.rb
66
+ - lib/rack/mime.rb
67
+ - lib/rack/mock.rb
68
+ - lib/rack/recursive.rb
69
+ - lib/rack/reloader.rb
70
+ - lib/rack/request.rb
71
+ - lib/rack/response.rb
72
+ - lib/rack/session/abstract/id.rb
73
+ - lib/rack/session/cookie.rb
74
+ - lib/rack/session/memcache.rb
75
+ - lib/rack/session/pool.rb
76
+ - lib/rack/showexceptions.rb
77
+ - lib/rack/showstatus.rb
78
+ - lib/rack/static.rb
79
+ - lib/rack/urlmap.rb
80
+ - lib/rack/utils.rb
81
+ - rack.gemspec
82
+ - test/cgi/lighttpd.conf
83
+ - test/cgi/test
84
+ - test/cgi/test.fcgi
85
+ - test/cgi/test.ru
86
+ - test/spec_rack_auth_basic.rb
87
+ - test/spec_rack_auth_digest.rb
88
+ - test/spec_rack_auth_openid.rb
89
+ - test/spec_rack_builder.rb
90
+ - test/spec_rack_camping.rb
91
+ - test/spec_rack_cascade.rb
92
+ - test/spec_rack_cgi.rb
93
+ - test/spec_rack_commonlogger.rb
94
+ - test/spec_rack_conditionalget.rb
95
+ - test/spec_rack_deflater.rb
96
+ - test/spec_rack_directory.rb
97
+ - test/spec_rack_fastcgi.rb
98
+ - test/spec_rack_file.rb
99
+ - test/spec_rack_handler.rb
100
+ - test/spec_rack_head.rb
101
+ - test/spec_rack_lint.rb
102
+ - test/spec_rack_lobster.rb
103
+ - test/spec_rack_methodoverride.rb
104
+ - test/spec_rack_mock.rb
105
+ - test/spec_rack_mongrel.rb
106
+ - test/spec_rack_recursive.rb
107
+ - test/spec_rack_request.rb
108
+ - test/spec_rack_response.rb
109
+ - test/spec_rack_session_cookie.rb
110
+ - test/spec_rack_session_memcache.rb
111
+ - test/spec_rack_session_pool.rb
112
+ - test/spec_rack_showexceptions.rb
113
+ - test/spec_rack_showstatus.rb
114
+ - test/spec_rack_static.rb
115
+ - test/spec_rack_urlmap.rb
116
+ - test/spec_rack_utils.rb
117
+ - test/spec_rack_webrick.rb
118
+ - test/testrequest.rb
119
+ has_rdoc: true
120
+ homepage: http://rack.rubyforge.org
121
+ post_install_message:
122
+ rdoc_options: []
123
+
124
+ require_paths:
125
+ - lib
126
+ required_ruby_version: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: "0"
131
+ version:
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: "0"
137
+ version:
138
+ requirements: []
139
+
140
+ rubyforge_project: rack
141
+ rubygems_version: 1.2.0
142
+ signing_key:
143
+ specification_version: 2
144
+ summary: a modular Ruby webserver interface
145
+ test_files:
146
+ - test/spec_rack_auth_basic.rb
147
+ - test/spec_rack_auth_digest.rb
148
+ - test/spec_rack_auth_openid.rb
149
+ - test/spec_rack_builder.rb
150
+ - test/spec_rack_camping.rb
151
+ - test/spec_rack_cascade.rb
152
+ - test/spec_rack_cgi.rb
153
+ - test/spec_rack_commonlogger.rb
154
+ - test/spec_rack_conditionalget.rb
155
+ - test/spec_rack_deflater.rb
156
+ - test/spec_rack_directory.rb
157
+ - test/spec_rack_fastcgi.rb
158
+ - test/spec_rack_file.rb
159
+ - test/spec_rack_handler.rb
160
+ - test/spec_rack_head.rb
161
+ - test/spec_rack_lint.rb
162
+ - test/spec_rack_lobster.rb
163
+ - test/spec_rack_methodoverride.rb
164
+ - test/spec_rack_mock.rb
165
+ - test/spec_rack_mongrel.rb
166
+ - test/spec_rack_recursive.rb
167
+ - test/spec_rack_request.rb
168
+ - test/spec_rack_response.rb
169
+ - test/spec_rack_session_cookie.rb
170
+ - test/spec_rack_session_memcache.rb
171
+ - test/spec_rack_session_pool.rb
172
+ - test/spec_rack_showexceptions.rb
173
+ - test/spec_rack_showstatus.rb
174
+ - test/spec_rack_static.rb
175
+ - test/spec_rack_urlmap.rb
176
+ - test/spec_rack_utils.rb
177
+ - test/spec_rack_webrick.rb