Skip to content
Browse files

Don't remove trailing slash from PATH_INFO for mounted apps

Previously when app was mounted as following:

    class Foo
      def call(env)
        [200, {}, [env['PATH_INFO']]]
      end
    end

    RackMountRailsBug::Application.routes.draw do
      mount RackTest.new => "/foo"
    end

trailing slash was removed from PATH_INFO. For example requesting

    GET /foo/bar/

on routes defined above would result in a response containing "/foo/bar"
instead of "/foo/bar/".

This commit fixes the issue.

(closes #3215)
  • Loading branch information...
1 parent 5ac2298 commit 50311f1391ddd8e0349d74eb57f04b7e0045a27d @drogus drogus committed Jun 21, 2013
View
4 actionpack/CHANGELOG.md
@@ -2,4 +2,8 @@
*Piotr Sarnacki*, *Łukasz Strzałkowski*
+* Fix removing trailing slash for mounted apps #3215
+
+ *Piotr Sarnacki*
+
Please check [4-0-stable](https://github.com/rails/rails/blob/4-0-stable/actionpack/CHANGELOG.md) for previous changes.
View
8 actionpack/lib/action_dispatch/journey/router.rb
@@ -54,7 +54,7 @@ def initialize(routes, options)
end
def call(env)
- env['PATH_INFO'] = Utils.normalize_path(env['PATH_INFO'])
+ env['PATH_INFO'] = normalize_path(env['PATH_INFO'])
find_routes(env).each do |match, parameters, route|
script_name, path_info, set_params = env.values_at('SCRIPT_NAME',
@@ -103,6 +103,12 @@ def visualizer
private
+ def normalize_path(path)
+ path = "/#{path}"
+ path.squeeze!('/')
+ path
+ end
+
def partitioned_routes
routes.partitioned_routes
end
View
5 actionpack/test/dispatch/mount_test.rb
@@ -33,6 +33,11 @@ def app
Router
end
+ def test_trailing_slash_is_not_removed_from_path_info
+ get "/sprockets/omg/"
+ assert_equal "/sprockets -- /omg/", response.body
+ end
+
def test_mounting_sets_script_name
get "/sprockets/omg"
assert_equal "/sprockets -- /omg", response.body

0 comments on commit 50311f1

Please sign in to comment.
Something went wrong with that request. Please try again.