tricycle-rack-contrib 0.9.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/COPYING +18 -0
- data/README.rdoc +78 -0
- data/Rakefile +97 -0
- data/lib/rack/contrib.rb +37 -0
- data/lib/rack/contrib/accept_format.rb +46 -0
- data/lib/rack/contrib/backstage.rb +20 -0
- data/lib/rack/contrib/bounce_favicon.rb +16 -0
- data/lib/rack/contrib/callbacks.rb +37 -0
- data/lib/rack/contrib/config.rb +16 -0
- data/lib/rack/contrib/cookies.rb +50 -0
- data/lib/rack/contrib/csshttprequest.rb +39 -0
- data/lib/rack/contrib/deflect.rb +137 -0
- data/lib/rack/contrib/etag.rb +20 -0
- data/lib/rack/contrib/evil.rb +12 -0
- data/lib/rack/contrib/garbagecollector.rb +14 -0
- data/lib/rack/contrib/jsonp.rb +41 -0
- data/lib/rack/contrib/lighttpd_script_name_fix.rb +16 -0
- data/lib/rack/contrib/locale.rb +31 -0
- data/lib/rack/contrib/mailexceptions.rb +120 -0
- data/lib/rack/contrib/nested_params.rb +143 -0
- data/lib/rack/contrib/not_found.rb +18 -0
- data/lib/rack/contrib/post_body_content_type_parser.rb +40 -0
- data/lib/rack/contrib/proctitle.rb +30 -0
- data/lib/rack/contrib/profiler.rb +108 -0
- data/lib/rack/contrib/relative_redirect.rb +44 -0
- data/lib/rack/contrib/response_cache.rb +116 -0
- data/lib/rack/contrib/route_exceptions.rb +49 -0
- data/lib/rack/contrib/sendfile.rb +142 -0
- data/lib/rack/contrib/signals.rb +63 -0
- data/lib/rack/contrib/time_zone.rb +25 -0
- data/test/404.html +1 -0
- data/test/Maintenance.html +1 -0
- data/test/mail_settings.rb +12 -0
- data/test/spec_rack_accept_format.rb +72 -0
- data/test/spec_rack_backstage.rb +26 -0
- data/test/spec_rack_callbacks.rb +65 -0
- data/test/spec_rack_config.rb +22 -0
- data/test/spec_rack_contrib.rb +8 -0
- data/test/spec_rack_csshttprequest.rb +66 -0
- data/test/spec_rack_deflect.rb +107 -0
- data/test/spec_rack_etag.rb +23 -0
- data/test/spec_rack_evil.rb +19 -0
- data/test/spec_rack_garbagecollector.rb +13 -0
- data/test/spec_rack_jsonp.rb +34 -0
- data/test/spec_rack_lighttpd_script_name_fix.rb +16 -0
- data/test/spec_rack_mailexceptions.rb +97 -0
- data/test/spec_rack_nested_params.rb +46 -0
- data/test/spec_rack_not_found.rb +17 -0
- data/test/spec_rack_post_body_content_type_parser.rb +32 -0
- data/test/spec_rack_proctitle.rb +26 -0
- data/test/spec_rack_profiler.rb +37 -0
- data/test/spec_rack_relative_redirect.rb +78 -0
- data/test/spec_rack_response_cache.rb +181 -0
- data/test/spec_rack_sendfile.rb +86 -0
- data/tricycle-rack-contrib.gemspec +88 -0
- metadata +175 -0
@@ -0,0 +1,181 @@
|
|
1
|
+
require 'test/spec'
|
2
|
+
require 'rack/mock'
|
3
|
+
#require 'rack/contrib/response_cache'
|
4
|
+
require File.join(File.dirname(__FILE__), '../lib/rack/contrib/response_cache')
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
context Rack::ResponseCache do
|
8
|
+
F = ::File
|
9
|
+
|
10
|
+
def request(opts={}, &block)
|
11
|
+
Rack::MockRequest.new(Rack::ResponseCache.new(block||@def_app, opts[:cache]||@cache, &opts[:rc_block])).send(opts[:meth]||:get, opts[:path]||@def_path, opts[:headers]||{})
|
12
|
+
end
|
13
|
+
|
14
|
+
setup do
|
15
|
+
@cache = {}
|
16
|
+
@def_disk_cache = F.join(F.dirname(__FILE__), 'response_cache_test_disk_cache')
|
17
|
+
@def_value = ["rack-response-cache"]
|
18
|
+
@def_path = '/path/to/blah'
|
19
|
+
@def_app = lambda { |env| [200, {'Content-Type' => env['CT'] || 'text/html'}, @def_value]}
|
20
|
+
end
|
21
|
+
teardown do
|
22
|
+
FileUtils.rm_rf(@def_disk_cache)
|
23
|
+
end
|
24
|
+
|
25
|
+
specify "should cache results to disk if cache is a string" do
|
26
|
+
request(:cache=>@def_disk_cache)
|
27
|
+
F.read(F.join(@def_disk_cache, 'path', 'to', 'blah.html')).should.equal @def_value.first
|
28
|
+
request(:path=>'/path/3', :cache=>@def_disk_cache)
|
29
|
+
F.read(F.join(@def_disk_cache, 'path', '3.html')).should.equal @def_value.first
|
30
|
+
end
|
31
|
+
|
32
|
+
specify "should cache results to given cache if cache is not a string" do
|
33
|
+
request
|
34
|
+
@cache.should.equal('/path/to/blah.html'=>@def_value)
|
35
|
+
request(:path=>'/path/3')
|
36
|
+
@cache.should.equal('/path/to/blah.html'=>@def_value, '/path/3.html'=>@def_value)
|
37
|
+
end
|
38
|
+
|
39
|
+
specify "should not cache results if request method is not GET" do
|
40
|
+
request(:meth=>:post)
|
41
|
+
@cache.should.equal({})
|
42
|
+
request(:meth=>:put)
|
43
|
+
@cache.should.equal({})
|
44
|
+
request(:meth=>:delete)
|
45
|
+
@cache.should.equal({})
|
46
|
+
end
|
47
|
+
|
48
|
+
specify "should not cache results if there is a query string" do
|
49
|
+
request(:path=>'/path/to/blah?id=1')
|
50
|
+
@cache.should.equal({})
|
51
|
+
request(:path=>'/path/to/?id=1')
|
52
|
+
@cache.should.equal({})
|
53
|
+
request(:path=>'/?id=1')
|
54
|
+
@cache.should.equal({})
|
55
|
+
end
|
56
|
+
|
57
|
+
specify "should cache results if there is an empty query string" do
|
58
|
+
request(:path=>'/?')
|
59
|
+
@cache.should.equal('/index.html'=>@def_value)
|
60
|
+
end
|
61
|
+
|
62
|
+
specify "should not cache results if the request is not sucessful (status 200)" do
|
63
|
+
request{|env| [404, {'Content-Type' => 'text/html'}, ['']]}
|
64
|
+
@cache.should.equal({})
|
65
|
+
request{|env| [500, {'Content-Type' => 'text/html'}, ['']]}
|
66
|
+
@cache.should.equal({})
|
67
|
+
request{|env| [302, {'Content-Type' => 'text/html'}, ['']]}
|
68
|
+
@cache.should.equal({})
|
69
|
+
end
|
70
|
+
|
71
|
+
specify 'should not cache when "no cache" cache control directives' do
|
72
|
+
request{|env| [200, {'Content-Type' => 'text/html', 'Cache-Control' => 'no-cache'}, ['']]}
|
73
|
+
@cache.should.equal({})
|
74
|
+
end
|
75
|
+
|
76
|
+
specify 'should not cache when "private" cache control directives' do
|
77
|
+
request{|env| [200, {'Content-Type' => 'text/html', 'Cache-Control' => 'private'}, ['']]}
|
78
|
+
request{|env| [200, {'Content-Type' => 'text/html', 'Cache-Control' => "private, max-age=0, must-revalidate"}, ['']]}
|
79
|
+
@cache.should.equal({})
|
80
|
+
end
|
81
|
+
|
82
|
+
specify 'should cache requests when is "public" cache control directives' do
|
83
|
+
request{|env| [200, {'Content-Type' => 'text/html', 'Cache-Control' => 'public'}, ['one']]}
|
84
|
+
@cache.should.equal({'/path/to/blah.html' => ['one']})
|
85
|
+
end
|
86
|
+
|
87
|
+
specify 'should cache requests when including "public" cache control directives' do
|
88
|
+
request{|env| [200, {'Content-Type' => 'text/html', 'Cache-Control' => 'max-age=300, public'}, ['many']]}
|
89
|
+
@cache.should.equal({'/path/to/blah.html' => ['many']})
|
90
|
+
end
|
91
|
+
|
92
|
+
specify 'should cache when no cache control directives' do
|
93
|
+
request{|env| [200, {'Content-Type' => 'text/html'}, ['none']]}
|
94
|
+
@cache.should.equal({'/path/to/blah.html' => ['none']})
|
95
|
+
end
|
96
|
+
|
97
|
+
specify "should not cache results if the block returns nil or false" do
|
98
|
+
request(:rc_block=>proc{false})
|
99
|
+
@cache.should.equal({})
|
100
|
+
request(:rc_block=>proc{nil})
|
101
|
+
@cache.should.equal({})
|
102
|
+
end
|
103
|
+
|
104
|
+
specify "should cache results to path returned by block" do
|
105
|
+
request(:rc_block=>proc{"1"})
|
106
|
+
@cache.should.equal("1"=>@def_value)
|
107
|
+
request(:rc_block=>proc{"2"})
|
108
|
+
@cache.should.equal("1"=>@def_value, "2"=>@def_value)
|
109
|
+
end
|
110
|
+
|
111
|
+
specify "should pass the environment and response to the block" do
|
112
|
+
e, r = nil, nil
|
113
|
+
request(:rc_block=>proc{|env,res| e, r = env, res; nil})
|
114
|
+
e['PATH_INFO'].should.equal @def_path
|
115
|
+
e['REQUEST_METHOD'].should.equal 'GET'
|
116
|
+
e['QUERY_STRING'].should.equal ''
|
117
|
+
r.should.equal([200, {"Content-Type"=>"text/html"}, ["rack-response-cache"]])
|
118
|
+
end
|
119
|
+
|
120
|
+
specify "should unescape the path by default" do
|
121
|
+
request(:path=>'/path%20with%20spaces')
|
122
|
+
@cache.should.equal('/path with spaces.html'=>@def_value)
|
123
|
+
request(:path=>'/path%3chref%3e')
|
124
|
+
@cache.should.equal('/path with spaces.html'=>@def_value, '/path<href>.html'=>@def_value)
|
125
|
+
end
|
126
|
+
|
127
|
+
specify "should cache html mime_type without extension at .html" do
|
128
|
+
request(:path=>'/a')
|
129
|
+
@cache.should.equal('/a.html'=>@def_value)
|
130
|
+
end
|
131
|
+
|
132
|
+
{
|
133
|
+
:css => %w[text/css],
|
134
|
+
:csv => %w[text/csv],
|
135
|
+
:html => %w[text/html],
|
136
|
+
:js => %w[text/javascript application/javascript],
|
137
|
+
:pdf => %w[application/pdf],
|
138
|
+
:txt => %w[text/plain],
|
139
|
+
:xhtml => %w[application/xhtml+xml],
|
140
|
+
:xml => %w[text/xml],
|
141
|
+
}.each do |extension, mime_types|
|
142
|
+
mime_types.each do |mime_type|
|
143
|
+
specify "should cache #{mime_type} responses with the extension ('#{extension}') unchanged" do
|
144
|
+
request(:path=>"/a.#{extension}", :headers=>{'CT'=>mime_type})
|
145
|
+
@cache.should.equal("/a.#{extension}"=>@def_value)
|
146
|
+
end
|
147
|
+
|
148
|
+
specify "should cache #{mime_type} responses with the relevant extension ('#{extension}') added if not already present" do
|
149
|
+
request(:path=>'/a', :headers=>{'CT'=>mime_type})
|
150
|
+
@cache.should.equal("/a.#{extension}"=>@def_value)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
specify "should cache 'text/html' responses with the extension ('htm') unchanged" do
|
156
|
+
request(:path=>"/a.htm", :headers=>{'CT'=>"text/html"})
|
157
|
+
@cache.should.equal("/a.htm"=>@def_value)
|
158
|
+
end
|
159
|
+
|
160
|
+
[:css, :xml, :xhtml, :js, :txt, :pdf, :csv].each do |extension|
|
161
|
+
specify "should not cache if extension and content-type don't agree" do
|
162
|
+
request(:path=>"/d.#{extension}", :headers=>{'CT'=>'text/html'})
|
163
|
+
@cache.should.equal({})
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
specify "should cache html responses with empty basename to index.html by default" do
|
168
|
+
request(:path=>'/')
|
169
|
+
@cache.should.equal('/index.html'=>@def_value)
|
170
|
+
request(:path=>'/blah/')
|
171
|
+
@cache.should.equal('/index.html'=>@def_value, '/blah/index.html'=>@def_value)
|
172
|
+
request(:path=>'/blah/2/')
|
173
|
+
@cache.should.equal('/index.html'=>@def_value, '/blah/index.html'=>@def_value, '/blah/2/index.html'=>@def_value)
|
174
|
+
end
|
175
|
+
|
176
|
+
specify "should raise an error if a cache argument is not provided" do
|
177
|
+
app = Rack::Builder.new{use Rack::ResponseCache; run lambda { |env| [200, {'Content-Type' => 'text/plain'}, Rack::Request.new(env).POST]}}
|
178
|
+
proc{Rack::MockRequest.new(app).get('/')}.should.raise(ArgumentError)
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'test/spec'
|
2
|
+
require 'rack/mock'
|
3
|
+
require 'rack/contrib/sendfile'
|
4
|
+
|
5
|
+
context "Rack::File" do
|
6
|
+
specify "should respond to #to_path" do
|
7
|
+
Rack::File.new(Dir.pwd).should.respond_to :to_path
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "Rack::Sendfile" do
|
12
|
+
def sendfile_body
|
13
|
+
res = ['Hello World']
|
14
|
+
def res.to_path ; "/tmp/hello.txt" ; end
|
15
|
+
res
|
16
|
+
end
|
17
|
+
|
18
|
+
def simple_app(body=sendfile_body)
|
19
|
+
lambda { |env| [200, {'Content-Type' => 'text/plain'}, body] }
|
20
|
+
end
|
21
|
+
|
22
|
+
def sendfile_app(body=sendfile_body)
|
23
|
+
Rack::Sendfile.new(simple_app(body))
|
24
|
+
end
|
25
|
+
|
26
|
+
setup do
|
27
|
+
@request = Rack::MockRequest.new(sendfile_app)
|
28
|
+
end
|
29
|
+
|
30
|
+
def request(headers={})
|
31
|
+
yield @request.get('/', headers)
|
32
|
+
end
|
33
|
+
|
34
|
+
specify "does nothing when no X-Sendfile-Type header present" do
|
35
|
+
request do |response|
|
36
|
+
response.should.be.ok
|
37
|
+
response.body.should.equal 'Hello World'
|
38
|
+
response.headers.should.not.include 'X-Sendfile'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
specify "sets X-Sendfile response header and discards body" do
|
43
|
+
request 'HTTP_X_SENDFILE_TYPE' => 'X-Sendfile' do |response|
|
44
|
+
response.should.be.ok
|
45
|
+
response.body.should.be.empty
|
46
|
+
response.headers['X-Sendfile'].should.equal '/tmp/hello.txt'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
specify "sets X-Lighttpd-Send-File response header and discards body" do
|
51
|
+
request 'HTTP_X_SENDFILE_TYPE' => 'X-Lighttpd-Send-File' do |response|
|
52
|
+
response.should.be.ok
|
53
|
+
response.body.should.be.empty
|
54
|
+
response.headers['X-Lighttpd-Send-File'].should.equal '/tmp/hello.txt'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "sets X-Accel-Redirect response header and discards body" do
|
59
|
+
headers = {
|
60
|
+
'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect',
|
61
|
+
'HTTP_X_ACCEL_MAPPING' => '/tmp/=/foo/bar/'
|
62
|
+
}
|
63
|
+
request headers do |response|
|
64
|
+
response.should.be.ok
|
65
|
+
response.body.should.be.empty
|
66
|
+
response.headers['X-Accel-Redirect'].should.equal '/foo/bar/hello.txt'
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
specify 'writes to rack.error when no X-Accel-Mapping is specified' do
|
71
|
+
request 'HTTP_X_SENDFILE_TYPE' => 'X-Accel-Redirect' do |response|
|
72
|
+
response.should.be.ok
|
73
|
+
response.body.should.equal 'Hello World'
|
74
|
+
response.headers.should.not.include 'X-Accel-Redirect'
|
75
|
+
response.errors.should.include 'X-Accel-Mapping'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
specify 'does nothing when body does not respond to #to_path' do
|
80
|
+
@request = Rack::MockRequest.new(sendfile_app(['Not a file...']))
|
81
|
+
request 'HTTP_X_SENDFILE_TYPE' => 'X-Sendfile' do |response|
|
82
|
+
response.body.should.equal 'Not a file...'
|
83
|
+
response.headers.should.not.include 'X-Sendfile'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
3
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
4
|
+
|
5
|
+
s.name = 'tricycle-rack-contrib'
|
6
|
+
s.version = '0.9.0'
|
7
|
+
s.date = '2010-01-06'
|
8
|
+
|
9
|
+
s.description = "Contributed Rack Middleware and Utilities, including Tricycle's modifications"
|
10
|
+
s.summary = "Contributed Rack Middleware and Utilities, including Tricycle's modifications"
|
11
|
+
|
12
|
+
s.authors = ["tricycle", "rack-devel"]
|
13
|
+
s.email = "gems@tricycledevelopments.com"
|
14
|
+
|
15
|
+
# = MANIFEST =
|
16
|
+
s.files = %w[
|
17
|
+
COPYING
|
18
|
+
README.rdoc
|
19
|
+
Rakefile
|
20
|
+
lib/rack/contrib.rb
|
21
|
+
lib/rack/contrib/accept_format.rb
|
22
|
+
lib/rack/contrib/backstage.rb
|
23
|
+
lib/rack/contrib/bounce_favicon.rb
|
24
|
+
lib/rack/contrib/callbacks.rb
|
25
|
+
lib/rack/contrib/config.rb
|
26
|
+
lib/rack/contrib/cookies.rb
|
27
|
+
lib/rack/contrib/csshttprequest.rb
|
28
|
+
lib/rack/contrib/deflect.rb
|
29
|
+
lib/rack/contrib/etag.rb
|
30
|
+
lib/rack/contrib/evil.rb
|
31
|
+
lib/rack/contrib/garbagecollector.rb
|
32
|
+
lib/rack/contrib/jsonp.rb
|
33
|
+
lib/rack/contrib/lighttpd_script_name_fix.rb
|
34
|
+
lib/rack/contrib/locale.rb
|
35
|
+
lib/rack/contrib/mailexceptions.rb
|
36
|
+
lib/rack/contrib/nested_params.rb
|
37
|
+
lib/rack/contrib/not_found.rb
|
38
|
+
lib/rack/contrib/post_body_content_type_parser.rb
|
39
|
+
lib/rack/contrib/proctitle.rb
|
40
|
+
lib/rack/contrib/profiler.rb
|
41
|
+
lib/rack/contrib/relative_redirect.rb
|
42
|
+
lib/rack/contrib/response_cache.rb
|
43
|
+
lib/rack/contrib/route_exceptions.rb
|
44
|
+
lib/rack/contrib/sendfile.rb
|
45
|
+
lib/rack/contrib/signals.rb
|
46
|
+
lib/rack/contrib/time_zone.rb
|
47
|
+
tricycle-rack-contrib.gemspec
|
48
|
+
test/404.html
|
49
|
+
test/Maintenance.html
|
50
|
+
test/mail_settings.rb
|
51
|
+
test/spec_rack_accept_format.rb
|
52
|
+
test/spec_rack_backstage.rb
|
53
|
+
test/spec_rack_callbacks.rb
|
54
|
+
test/spec_rack_config.rb
|
55
|
+
test/spec_rack_contrib.rb
|
56
|
+
test/spec_rack_csshttprequest.rb
|
57
|
+
test/spec_rack_deflect.rb
|
58
|
+
test/spec_rack_etag.rb
|
59
|
+
test/spec_rack_evil.rb
|
60
|
+
test/spec_rack_garbagecollector.rb
|
61
|
+
test/spec_rack_jsonp.rb
|
62
|
+
test/spec_rack_lighttpd_script_name_fix.rb
|
63
|
+
test/spec_rack_mailexceptions.rb
|
64
|
+
test/spec_rack_nested_params.rb
|
65
|
+
test/spec_rack_not_found.rb
|
66
|
+
test/spec_rack_post_body_content_type_parser.rb
|
67
|
+
test/spec_rack_proctitle.rb
|
68
|
+
test/spec_rack_profiler.rb
|
69
|
+
test/spec_rack_relative_redirect.rb
|
70
|
+
test/spec_rack_response_cache.rb
|
71
|
+
test/spec_rack_sendfile.rb
|
72
|
+
]
|
73
|
+
# = MANIFEST =
|
74
|
+
|
75
|
+
s.test_files = s.files.select {|path| path =~ /^test\/spec_.*\.rb/}
|
76
|
+
|
77
|
+
s.extra_rdoc_files = %w[README.rdoc COPYING]
|
78
|
+
s.add_dependency 'rack', '>= 0.9.1'
|
79
|
+
s.add_development_dependency 'test-spec', '~> 0.9.0'
|
80
|
+
s.add_development_dependency 'tmail', '>= 1.2'
|
81
|
+
s.add_development_dependency 'json', '>= 1.1'
|
82
|
+
|
83
|
+
s.has_rdoc = true
|
84
|
+
s.homepage = "http://github.com/tricycle/rack-contrib/"
|
85
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "tricycle-rack-contrib", "--main", "README"]
|
86
|
+
s.require_paths = %w[lib]
|
87
|
+
s.rubygems_version = '1.1.1'
|
88
|
+
end
|
metadata
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tricycle-rack-contrib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- tricycle
|
8
|
+
- rack-devel
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2010-01-06 00:00:00 +11:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: rack
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.9.1
|
25
|
+
version:
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: test-spec
|
28
|
+
type: :development
|
29
|
+
version_requirement:
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.9.0
|
35
|
+
version:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: tmail
|
38
|
+
type: :development
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "1.2"
|
45
|
+
version:
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: json
|
48
|
+
type: :development
|
49
|
+
version_requirement:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: "1.1"
|
55
|
+
version:
|
56
|
+
description: Contributed Rack Middleware and Utilities, including Tricycle's modifications
|
57
|
+
email: gems@tricycledevelopments.com
|
58
|
+
executables: []
|
59
|
+
|
60
|
+
extensions: []
|
61
|
+
|
62
|
+
extra_rdoc_files:
|
63
|
+
- README.rdoc
|
64
|
+
- COPYING
|
65
|
+
files:
|
66
|
+
- COPYING
|
67
|
+
- README.rdoc
|
68
|
+
- Rakefile
|
69
|
+
- lib/rack/contrib.rb
|
70
|
+
- lib/rack/contrib/accept_format.rb
|
71
|
+
- lib/rack/contrib/backstage.rb
|
72
|
+
- lib/rack/contrib/bounce_favicon.rb
|
73
|
+
- lib/rack/contrib/callbacks.rb
|
74
|
+
- lib/rack/contrib/config.rb
|
75
|
+
- lib/rack/contrib/cookies.rb
|
76
|
+
- lib/rack/contrib/csshttprequest.rb
|
77
|
+
- lib/rack/contrib/deflect.rb
|
78
|
+
- lib/rack/contrib/etag.rb
|
79
|
+
- lib/rack/contrib/evil.rb
|
80
|
+
- lib/rack/contrib/garbagecollector.rb
|
81
|
+
- lib/rack/contrib/jsonp.rb
|
82
|
+
- lib/rack/contrib/lighttpd_script_name_fix.rb
|
83
|
+
- lib/rack/contrib/locale.rb
|
84
|
+
- lib/rack/contrib/mailexceptions.rb
|
85
|
+
- lib/rack/contrib/nested_params.rb
|
86
|
+
- lib/rack/contrib/not_found.rb
|
87
|
+
- lib/rack/contrib/post_body_content_type_parser.rb
|
88
|
+
- lib/rack/contrib/proctitle.rb
|
89
|
+
- lib/rack/contrib/profiler.rb
|
90
|
+
- lib/rack/contrib/relative_redirect.rb
|
91
|
+
- lib/rack/contrib/response_cache.rb
|
92
|
+
- lib/rack/contrib/route_exceptions.rb
|
93
|
+
- lib/rack/contrib/sendfile.rb
|
94
|
+
- lib/rack/contrib/signals.rb
|
95
|
+
- lib/rack/contrib/time_zone.rb
|
96
|
+
- tricycle-rack-contrib.gemspec
|
97
|
+
- test/404.html
|
98
|
+
- test/Maintenance.html
|
99
|
+
- test/mail_settings.rb
|
100
|
+
- test/spec_rack_accept_format.rb
|
101
|
+
- test/spec_rack_backstage.rb
|
102
|
+
- test/spec_rack_callbacks.rb
|
103
|
+
- test/spec_rack_config.rb
|
104
|
+
- test/spec_rack_contrib.rb
|
105
|
+
- test/spec_rack_csshttprequest.rb
|
106
|
+
- test/spec_rack_deflect.rb
|
107
|
+
- test/spec_rack_etag.rb
|
108
|
+
- test/spec_rack_evil.rb
|
109
|
+
- test/spec_rack_garbagecollector.rb
|
110
|
+
- test/spec_rack_jsonp.rb
|
111
|
+
- test/spec_rack_lighttpd_script_name_fix.rb
|
112
|
+
- test/spec_rack_mailexceptions.rb
|
113
|
+
- test/spec_rack_nested_params.rb
|
114
|
+
- test/spec_rack_not_found.rb
|
115
|
+
- test/spec_rack_post_body_content_type_parser.rb
|
116
|
+
- test/spec_rack_proctitle.rb
|
117
|
+
- test/spec_rack_profiler.rb
|
118
|
+
- test/spec_rack_relative_redirect.rb
|
119
|
+
- test/spec_rack_response_cache.rb
|
120
|
+
- test/spec_rack_sendfile.rb
|
121
|
+
has_rdoc: true
|
122
|
+
homepage: http://github.com/tricycle/rack-contrib/
|
123
|
+
licenses: []
|
124
|
+
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options:
|
127
|
+
- --line-numbers
|
128
|
+
- --inline-source
|
129
|
+
- --title
|
130
|
+
- tricycle-rack-contrib
|
131
|
+
- --main
|
132
|
+
- README
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: "0"
|
140
|
+
version:
|
141
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: "0"
|
146
|
+
version:
|
147
|
+
requirements: []
|
148
|
+
|
149
|
+
rubyforge_project:
|
150
|
+
rubygems_version: 1.3.5
|
151
|
+
signing_key:
|
152
|
+
specification_version: 2
|
153
|
+
summary: Contributed Rack Middleware and Utilities, including Tricycle's modifications
|
154
|
+
test_files:
|
155
|
+
- test/spec_rack_accept_format.rb
|
156
|
+
- test/spec_rack_backstage.rb
|
157
|
+
- test/spec_rack_callbacks.rb
|
158
|
+
- test/spec_rack_config.rb
|
159
|
+
- test/spec_rack_contrib.rb
|
160
|
+
- test/spec_rack_csshttprequest.rb
|
161
|
+
- test/spec_rack_deflect.rb
|
162
|
+
- test/spec_rack_etag.rb
|
163
|
+
- test/spec_rack_evil.rb
|
164
|
+
- test/spec_rack_garbagecollector.rb
|
165
|
+
- test/spec_rack_jsonp.rb
|
166
|
+
- test/spec_rack_lighttpd_script_name_fix.rb
|
167
|
+
- test/spec_rack_mailexceptions.rb
|
168
|
+
- test/spec_rack_nested_params.rb
|
169
|
+
- test/spec_rack_not_found.rb
|
170
|
+
- test/spec_rack_post_body_content_type_parser.rb
|
171
|
+
- test/spec_rack_proctitle.rb
|
172
|
+
- test/spec_rack_profiler.rb
|
173
|
+
- test/spec_rack_relative_redirect.rb
|
174
|
+
- test/spec_rack_response_cache.rb
|
175
|
+
- test/spec_rack_sendfile.rb
|