]> git.openstreetmap.org Git - rails.git/commitdiff
Make api show/update/destroy relation actions resourceful
authorAnton Khorev <tony29@yandex.ru>
Sat, 1 Feb 2025 11:31:03 +0000 (14:31 +0300)
committerAnton Khorev <tony29@yandex.ru>
Wed, 5 Feb 2025 17:22:16 +0000 (20:22 +0300)
app/abilities/api_ability.rb
app/controllers/api/relations_controller.rb
config/routes.rb
test/controllers/api/relations_controller_test.rb

index bca6b779bae4a52457e2482bacefd789f7881a1f..c74a4d0996adedcebd66ec59d47d696b01ddd28c 100644 (file)
@@ -38,8 +38,7 @@ class ApiAbility
         if user.terms_agreed?
           can [:create, :update, :upload, :close, :subscribe, :unsubscribe], Changeset if scope?(token, :write_api)
           can :create, ChangesetComment if scope?(token, :write_api)
-          can [:create, :update, :destroy], [Node, Way] if scope?(token, :write_api)
-          can [:create, :update, :delete], [Relation] if scope?(token, :write_api)
+          can [:create, :update, :destroy], [Node, Way, Relation] if scope?(token, :write_api)
         end
 
         if user.moderator?
index ae101f373762b0c282ed1b6218b1bbe875cfc5b7..f712534f001aebdb747234abf27d1f68a87ce982 100644 (file)
@@ -1,13 +1,13 @@
 module Api
   class RelationsController < ApiController
-    before_action :check_api_writable, :only => [:create, :update, :delete]
-    before_action :authorize, :only => [:create, :update, :delete]
+    before_action :check_api_writable, :only => [:create, :update, :destroy]
+    before_action :authorize, :only => [:create, :update, :destroy]
 
     authorize_resource
 
-    before_action :require_public_data, :only => [:create, :update, :delete]
-    before_action :set_request_formats, :except => [:create, :update, :delete]
-    before_action :check_rate_limit, :only => [:create, :update, :delete]
+    before_action :require_public_data, :only => [:create, :update, :destroy]
+    before_action :set_request_formats, :except => [:create, :update, :destroy]
+    before_action :check_rate_limit, :only => [:create, :update, :destroy]
 
     def index
       raise OSM::APIBadUserInput, "The parameter relations is required, and must be of the form relations=id[,id[,id...]]" unless params["relations"]
@@ -57,7 +57,7 @@ module Api
       render :plain => relation.version.to_s
     end
 
-    def delete
+    def destroy
       relation = Relation.find(params[:id])
       new_relation = Relation.from_xml(request.raw_post)
       if new_relation && new_relation.id == relation.id
index ff5c74b22faf54c7ee1766818c2bd6c5e393615e..b562ca9f4a0c60b6d1984b5db21acf80aec0153a 100644 (file)
@@ -47,9 +47,6 @@ OpenStreetMap::Application.routes.draw do
     get "relation/:id/full" => "relations#full", :as => :relation_full, :id => /\d+/
     post "relation/:id/:version/redact" => "old_relations#redact", :as => :relation_version_redact, :version => /\d+/, :id => /\d+/
     get "relation/:id/:version" => "old_relations#show", :as => :api_old_relation, :id => /\d+/, :version => /\d+/
-    get "relation/:id" => "relations#show", :as => :api_relation, :id => /\d+/
-    put "relation/:id" => "relations#update", :id => /\d+/
-    delete "relation/:id" => "relations#delete", :id => /\d+/
   end
 
   namespace :api, :path => "api/0.6" do
@@ -62,6 +59,7 @@ OpenStreetMap::Application.routes.draw do
     put "way/create" => "ways#create", :as => nil
 
     resources :relations, :only => [:index, :create]
+    resources :relations, :path => "relation", :id => /\d+/, :only => [:show, :update, :destroy]
     put "relation/create" => "relations#create", :as => nil
 
     resource :map, :only => :show
index 5147d851f2a5bcddbc1108abedb45ee6b00eaf56..dd87fec5ef7edfa843674d6253d7ba469024b593 100644 (file)
@@ -39,7 +39,7 @@ module Api
       )
       assert_routing(
         { :path => "/api/0.6/relation/1", :method => :delete },
-        { :controller => "api/relations", :action => "delete", :id => "1" }
+        { :controller => "api/relations", :action => "destroy", :id => "1" }
       )
 
       assert_routing(
@@ -509,7 +509,7 @@ module Api
     # Test deleting relations.
     # -------------------------------------
 
-    def test_delete
+    def test_destroy
       private_user = create(:user, :data_public => false)
       private_user_closed_changeset = create(:changeset, :closed, :user => private_user)
       user = create(:user)