Redirect lat/lon/zoom query params to hash
authorJohn Firebaugh <john.firebaugh@gmail.com>
Tue, 23 Jul 2013 20:37:09 +0000 (13:37 -0700)
committerJohn Firebaugh <john.firebaugh@gmail.com>
Tue, 30 Jul 2013 22:41:41 +0000 (15:41 -0700)
app/controllers/site_controller.rb
test/functional/site_controller_test.rb

index 0e26185a1e34325a5fecb87ec3d50856e7a18a7a..c16daf37facb7ff7e2ac64ebe267d988be6cf874 100644 (file)
@@ -8,6 +8,12 @@ class SiteController < ApplicationController
   before_filter :require_oauth, :only => [:index]
 
   def index
+    if params[:lat] && params[:lon]
+      params[:anchor] = "#{params.delete(:zoom) || 5}/#{params.delete(:lat)}/#{params.delete(:lon)}"
+      redirect_to params
+      return
+    end
+
     unless STATUS == :database_readonly or STATUS == :database_offline
       session[:location] ||= OSM::IPLocation(request.env['REMOTE_ADDR'])
     end
@@ -15,19 +21,18 @@ class SiteController < ApplicationController
 
   def permalink
     lon, lat, zoom = ShortLink::decode(params[:code])
-    new_params = params.clone
-    new_params.delete :code
+    new_params = params.except(:code, :lon, :lat, :zoom)
+
     if new_params.has_key? :m
       new_params.delete :m
       new_params[:mlat] = lat
       new_params[:mlon] = lon
-    else
-      new_params[:lat] = lat
-      new_params[:lon] = lon
     end
-    new_params[:zoom] = zoom
+
     new_params[:controller] = 'site'
     new_params[:action] = 'index'
+    new_params[:anchor] = "#{zoom}/#{lat}/#{lon}"
+
     redirect_to new_params
   end
 
index 47bc278066f2aa0a195467846977628e341ec6c2..145805c01f273ae92f42dbbe08bc117bd7af1a93 100644 (file)
@@ -72,7 +72,20 @@ class SiteControllerTest < ActionController::TestCase
     assert_template 'index'
     assert_site_partials
   end
-  
+
+  def test_index_redirect
+    get :index, :lat => 4, :lon => 5
+    assert_redirected_to :controller => :site, :action => 'index', :anchor => '5/4/5'
+
+    get :index, :lat => 4, :lon => 5, :zoom => 3
+    assert_redirected_to :controller => :site, :action => 'index', :anchor => '3/4/5'
+  end
+
+  def test_permalink
+    get :permalink, :code => 'wBz3--'
+    assert_redirected_to :controller => :site, :action => 'index', :anchor => '3/4.8779296875/3.955078125'
+  end
+
   # Get the edit page
   def test_edit
     get :edit