From deffd81ada7107dafabf701d3df70f31ca3c743a Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 10 Feb 2013 16:10:53 +0000 Subject: [PATCH] Use POST/DELETE to watch/unwatch an item. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11343 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/watchers_helper.rb | 9 ++++----- config/routes.rb | 4 ++-- test/functional/watchers_controller_test.rb | 4 ++-- test/integration/routing/watchers_test.rb | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/app/helpers/watchers_helper.rb b/app/helpers/watchers_helper.rb index 3c27fc02d..4aab507bd 100644 --- a/app/helpers/watchers_helper.rb +++ b/app/helpers/watchers_helper.rb @@ -31,14 +31,13 @@ module WatchersHelper watched = objects.any? {|object| object.watched_by?(user)} css = [watcher_css(objects), watched ? 'icon icon-fav' : 'icon icon-fav-off'].join(' ') text = watched ? l(:button_unwatch) : l(:button_watch) - url = { - :controller => 'watchers', - :action => (watched ? 'unwatch' : 'watch'), + url = watch_path( :object_type => objects.first.class.to_s.underscore, :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort) - } + ) + method = watched ? 'delete' : 'post' - link_to text, url, :remote => true, :method => 'post', :class => css + link_to text, url, :remote => true, :method => method, :class => css end # Returns the css class used to identify watch links for a given +object+ diff --git a/config/routes.rb b/config/routes.rb index 2bed011df..f157f764c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -77,12 +77,12 @@ RedmineApp::Application.routes.draw do match 'users/:id/memberships/:membership_id', :to => 'users#destroy_membership', :via => :delete match 'users/:id/memberships', :to => 'users#edit_membership', :via => :post, :as => 'user_memberships' + post 'watchers/watch', :to => 'watchers#watch', :as => 'watch' + delete 'watchers/watch', :to => 'watchers#unwatch' get 'watchers/new', :to => 'watchers#new' post 'watchers', :to => 'watchers#create' post 'watchers/append', :to => 'watchers#append' post 'watchers/destroy', :to => 'watchers#destroy' - post 'watchers/watch', :to => 'watchers#watch' - post 'watchers/unwatch', :to => 'watchers#unwatch' get 'watchers/autocomplete_for_user', :to => 'watchers#autocomplete_for_user' # Specific routes for issue watchers API post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue' diff --git a/test/functional/watchers_controller_test.rb b/test/functional/watchers_controller_test.rb index 44bda3d99..7c80b0f4b 100644 --- a/test/functional/watchers_controller_test.rb +++ b/test/functional/watchers_controller_test.rb @@ -84,7 +84,7 @@ class WatchersControllerTest < ActionController::TestCase def test_unwatch @request.session[:user_id] = 3 assert_difference('Watcher.count', -1) do - xhr :post, :unwatch, :object_type => 'issue', :object_id => '2' + xhr :delete, :unwatch, :object_type => 'issue', :object_id => '2' assert_response :success assert_include '$(".issue-2-watcher")', response.body end @@ -97,7 +97,7 @@ class WatchersControllerTest < ActionController::TestCase Watcher.create!(:user_id => 3, :watchable => Issue.find(3)) assert_difference('Watcher.count', -2) do - xhr :post, :unwatch, :object_type => 'issue', :object_id => ['1', '3'] + xhr :delete, :unwatch, :object_type => 'issue', :object_id => ['1', '3'] assert_response :success assert_include '$(".issue-bulk-watcher")', response.body end diff --git a/test/integration/routing/watchers_test.rb b/test/integration/routing/watchers_test.rb index 3c203f4bc..39ef5a786 100644 --- a/test/integration/routing/watchers_test.rb +++ b/test/integration/routing/watchers_test.rb @@ -44,7 +44,7 @@ class RoutingWatchersTest < ActionController::IntegrationTest { :controller => 'watchers', :action => 'watch' } ) assert_routing( - { :method => 'post', :path => "/watchers/unwatch" }, + { :method => 'delete', :path => "/watchers/watch" }, { :controller => 'watchers', :action => 'unwatch' } ) assert_routing( -- 2.39.5