Improve redirection of shortlinks
authorTom Hughes <tom@compton.nu>
Sat, 15 Feb 2014 12:42:52 +0000 (12:42 +0000)
committerTom Hughes <tom@compton.nu>
Sat, 15 Feb 2014 12:42:52 +0000 (12:42 +0000)
If a shortlink includes an object reference then redirect to a new
style browse URL for that object.

Fixes #702

app/controllers/site_controller.rb
test/functional/site_controller_test.rb

index 779ea1a885dbbfd58064c772ed026c6be3ab6bdf..5597fd4aef67db49fcaada7d0cbf41f0d563fd31 100644 (file)
@@ -17,7 +17,7 @@ class SiteController < ApplicationController
 
   def permalink
     lon, lat, zoom = ShortLink::decode(params[:code])
-    new_params = params.except(:code, :lon, :lat, :zoom)
+    new_params = params.except(:code, :lon, :lat, :zoom, :node, :way, :relation, :changeset)
 
     if new_params.has_key? :m
       new_params.delete :m
@@ -25,8 +25,27 @@ class SiteController < ApplicationController
       new_params[:mlon] = lon
     end
 
-    new_params[:controller] = 'site'
-    new_params[:action] = 'index'
+    if params.has_key? :node
+      new_params[:controller] = 'browse'
+      new_params[:action] = 'node'
+      new_params[:id] = params[:node]
+    elsif params.has_key? :way
+      new_params[:controller] = 'browse'
+      new_params[:action] = 'way'
+      new_params[:id] = params[:way]
+    elsif params.has_key? :relation
+      new_params[:controller] = 'browse'
+      new_params[:action] = 'relation'
+      new_params[:id] = params[:relation]
+    elsif params.has_key? :changeset
+      new_params[:controller] = 'browse'
+      new_params[:action] = 'changeset'
+      new_params[:id] = params[:changeset]
+    else
+      new_params[:controller] = 'site'
+      new_params[:action] = 'index'
+    end
+
     new_params[:anchor] = "map=#{zoom}/#{lat}/#{lon}"
 
     redirect_to new_params
index f2dab3404424b0dbddf9e21d5aba6bf26044ebc6..78fde62d7e8fed645641a470a1e51fbcb1f545ce 100644 (file)
@@ -112,6 +112,22 @@ class SiteControllerTest < ActionController::TestCase
     get :permalink, :code => 'wBz3--'
     assert_response :redirect
     assert_redirected_to :controller => :site, :action => :index, :anchor => 'map=3/4.8779296875/3.955078125'
+
+    get :permalink, :code => 'wBz3--', :node => 1
+    assert_response :redirect
+    assert_redirected_to :controller => :browse, :action => :node, :id => 1, :anchor => 'map=3/4.8779296875/3.955078125'
+
+    get :permalink, :code => 'wBz3--', :way => 2
+    assert_response :redirect
+    assert_redirected_to :controller => :browse, :action => :way, :id => 2, :anchor => 'map=3/4.8779296875/3.955078125'
+
+    get :permalink, :code => 'wBz3--', :relation => 3
+    assert_response :redirect
+    assert_redirected_to :controller => :browse, :action => :relation, :id => 3, :anchor => 'map=3/4.8779296875/3.955078125'
+
+    get :permalink, :code => 'wBz3--', :changeset => 4
+    assert_response :redirect
+    assert_redirected_to :controller => :browse, :action => :changeset, :id => 4, :anchor => 'map=3/4.8779296875/3.955078125'
   end
 
   # Test the key page