Changeset 1211
- Timestamp:
- 04/18/05 15:43:07 (3 years ago)
- Files:
-
- trunk/actionpack/CHANGELOG (modified) (1 diff)
- trunk/actionpack/lib/action_controller/cgi_process.rb (modified) (1 diff)
- trunk/actionpack/lib/action_controller/request.rb (modified) (1 diff)
- trunk/actionpack/test/controller/request_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionpack/CHANGELOG
r1208 r1211 1 1 *SVN* 2 3 * Added support for web servers that use PATH_INFO instead of REQUEST_URI like IIS #1014 [BradG/Nicholas Seckar] 2 4 3 5 * Added graceful handling of PUT, DELETE, and OPTIONS requests for a complete coverage of REST functionality #1136 [joshknowles@gmail.com] trunk/actionpack/lib/action_controller/cgi_process.rb
r829 r1211 49 49 def query_string 50 50 return @cgi.query_string unless @cgi.query_string.nil? || @cgi.query_string.empty? 51 parts = env['REQUEST_URI'].split('?') 51 unless env['REQUEST_URI'].nil? 52 parts = env['REQUEST_URI'].split('?') 53 else 54 return env['QUERY_STRING'] || '' 55 end 52 56 parts.shift 53 57 return parts.join('?') trunk/actionpack/lib/action_controller/request.rb
r1194 r1211 75 75 76 76 def request_uri 77 (%r{^\w+\://[^/]+(/.*|$)$} =~ env['REQUEST_URI']) ? $1 : env['REQUEST_URI'] # Remove domain, which webrick puts into the request_uri. 78 end 77 unless env['REQUEST_URI'].nil? 78 (%r{^\w+\://[^/]+(/.*|$)$} =~ env['REQUEST_URI']) ? $1 : env['REQUEST_URI'] # Remove domain, which webrick puts into the request_uri. 79 else # REQUEST_URI is blank under IIS - get this from PATH_INFO and SCRIPT_NAME 80 script_filename = env["SCRIPT_NAME"].to_s.match(%r{[^/]+$}) 81 request_uri = env["PATH_INFO"] 82 request_uri.sub!(/#{script_filename}\//, '') unless script_filename.nil? 83 request_uri += '?' + env["QUERY_STRING"] unless env["QUERY_STRING"].nil? || env["QUERY_STRING"].empty? 84 return request_uri 85 end 86 end 79 87 80 88 def protocol trunk/actionpack/test/controller/request_test.rb
r945 r1211 84 84 @request.env['SCRIPT_NAME'] = "/collaboration/hieraki/dispatch.cgi" 85 85 assert_equal "/collaboration/hieraki/books/edit/2", @request.request_uri 86 assert_equal "/books/edit/2", @request.path 86 assert_equal "/books/edit/2", @request.path 87 88 # The following tests are for when REQUEST_URI is not supplied (as in IIS) 89 @request.set_REQUEST_URI nil 90 @request.env['PATH_INFO'] = "/path/of/some/uri?mapped=1" 91 @request.env['SCRIPT_NAME'] = nil #"/path/dispatch.rb" 92 assert_equal "/path/of/some/uri?mapped=1", @request.request_uri 93 assert_equal "/path/of/some/uri", @request.path 94 95 @request.env['PATH_INFO'] = "/path/of/some/uri?mapped=1" 96 @request.env['SCRIPT_NAME'] = "/path/dispatch.rb" 97 assert_equal "/path/of/some/uri?mapped=1", @request.request_uri 98 assert_equal "/of/some/uri", @request.path 99 100 @request.env['PATH_INFO'] = "/path/of/some/uri" 101 @request.env['SCRIPT_NAME'] = nil 102 assert_equal "/path/of/some/uri", @request.request_uri 103 assert_equal "/path/of/some/uri", @request.path 104 105 @request.env['PATH_INFO'] = "/" 106 assert_equal "/", @request.request_uri 107 assert_equal "/", @request.path 108 109 @request.env['PATH_INFO'] = "/?m=b" 110 assert_equal "/?m=b", @request.request_uri 111 assert_equal "/", @request.path 112 113 @request.env['PATH_INFO'] = "/" 114 @request.env['SCRIPT_NAME'] = "/dispatch.cgi" 115 assert_equal "/", @request.request_uri 116 assert_equal "/", @request.path 117 118 @request.env['PATH_INFO'] = "/hieraki/" 119 @request.env['SCRIPT_NAME'] = "/hieraki/dispatch.cgi" 120 assert_equal "/hieraki/", @request.request_uri 121 assert_equal "/", @request.path 122 123 # This test ensures that Rails uses REQUEST_URI over PATH_INFO 124 @request.env['REQUEST_URI'] = "/some/path" 125 @request.env['PATH_INFO'] = "/another/path" 126 @request.env['SCRIPT_NAME'] = "/dispatch.cgi" 127 assert_equal "/some/path", @request.request_uri 128 assert_equal "/some/path", @request.path 129 87 130 88 131 end