]> git.openstreetmap.org Git - rails.git/commitdiff
Remove node/way/relation Search API
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 23 Oct 2019 09:41:05 +0000 (11:41 +0200)
committerAndy Allan <git@gravitystorm.co.uk>
Wed, 23 Oct 2019 09:41:05 +0000 (11:41 +0200)
This API clearly shows its age, having never been fully implemented
and simply returning 100 ways (or 2000 relations) at random matching
the provided tags.

It is, as far as I'm aware, completely unused. While it provides a
good amount of humour to anyone who reads the code, the time as come
for it to be retired.

app/abilities/api_ability.rb
app/controllers/api/search_controller.rb [deleted file]
config/routes.rb
test/controllers/api/search_controller_test.rb [deleted file]

index 80245eeaa34882e6acd71d3930436b5d9d13f4d1..6d62ece5172f0f5ad9eaccb63dc2fc8c798bcd4a 100644 (file)
@@ -8,7 +8,6 @@ class ApiAbility
     can :index, :change
     can :index, :map
     can :show, :permission
     can :index, :change
     can :index, :map
     can :show, :permission
-    can [:search_all, :search_nodes, :search_ways, :search_relations], :search
     can :show, :version
 
     if Settings.status != "database_offline"
     can :show, :version
 
     if Settings.status != "database_offline"
diff --git a/app/controllers/api/search_controller.rb b/app/controllers/api/search_controller.rb
deleted file mode 100644 (file)
index feb487a..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-module Api
-  class SearchController < ApiController
-    # Support searching for nodes, ways, or all
-    # Can search by tag k, v, or both (type->k,value->v)
-    # Can search by name (k=name,v=....)
-    authorize_resource :class => false
-
-    def search_all
-      do_search(true, true, true)
-    end
-
-    def search_ways
-      do_search(true, false, false)
-    end
-
-    def search_nodes
-      do_search(false, true, false)
-    end
-
-    def search_relations
-      do_search(false, false, true)
-    end
-
-    def do_search(do_ways, do_nodes, do_relations)
-      type = params["type"]
-      value = params["value"]
-      unless type || value
-        name = params["name"]
-        if name
-          type = "name"
-          value = name
-        end
-      end
-
-      if do_nodes
-        response.headers["Error"] = "Searching of nodes is currently unavailable"
-        head :service_unavailable
-        return false
-      end
-
-      unless value
-        response.headers["Error"] = "Searching for a key without value is currently unavailable"
-        head :service_unavailable
-        return false
-      end
-
-      # Matching for node tags table
-      if do_nodes
-        nodes = Node.joins(:node_tags)
-        nodes = nodes.where(:current_node_tags => { :k => type }) if type
-        nodes = nodes.where(:current_node_tags => { :v => value }) if value
-        nodes = nodes.limit(100)
-      else
-        nodes = []
-      end
-
-      # Matching for way tags table
-      if do_ways
-        ways = Way.joins(:way_tags)
-        ways = ways.where(:current_way_tags => { :k => type }) if type
-        ways = ways.where(:current_way_tags => { :v => value }) if value
-        ways = ways.limit(100)
-      else
-        ways = []
-      end
-
-      # Matching for relation tags table
-      if do_relations
-        relations = Relation.joins(:relation_tags)
-        relations = relations.where(:current_relation_tags => { :k => type }) if type
-        relations = relations.where(:current_relation_tags => { :v => value }) if value
-        relations = relations.limit(2000)
-      else
-        relations = []
-      end
-
-      # Fetch any node needed for our ways (only have matching nodes so far)
-      nodes += Node.find(ways.collect(&:nds).uniq)
-
-      # Print
-      visible_nodes = {}
-      changeset_cache = {}
-      user_display_name_cache = {}
-      doc = OSM::API.new.get_xml_doc
-      nodes.each do |node|
-        doc.root << node.to_xml_node(changeset_cache, user_display_name_cache)
-        visible_nodes[node.id] = node
-      end
-
-      ways.each do |way|
-        doc.root << way.to_xml_node(visible_nodes, changeset_cache, user_display_name_cache)
-      end
-
-      relations.each do |rel|
-        doc.root << rel.to_xml_node(changeset_cache, user_display_name_cache)
-      end
-
-      render :xml => doc.to_s
-    end
-  end
-end
index 002ee58ea3347c1b730cbe8e0792b2de6f6d2d15..58c05da171e3c2628179d9ab543d7b3d42553306 100644 (file)
@@ -62,11 +62,6 @@ OpenStreetMap::Application.routes.draw do
 
     get "changes" => "api/changes#index"
 
 
     get "changes" => "api/changes#index"
 
-    get "search" => "api/search#search_all", :as => "api_search"
-    get "ways/search" => "api/search#search_ways"
-    get "relations/search" => "api/search#search_relations"
-    get "nodes/search" => "api/search#search_nodes"
-
     get "user/:id" => "api/users#show", :id => /\d+/
     get "user/details" => "api/users#details"
     get "user/gpx_files" => "api/users#gpx_files"
     get "user/:id" => "api/users#show", :id => /\d+/
     get "user/details" => "api/users#details"
     get "user/gpx_files" => "api/users#gpx_files"
diff --git a/test/controllers/api/search_controller_test.rb b/test/controllers/api/search_controller_test.rb
deleted file mode 100644 (file)
index e11a3c7..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-require "test_helper"
-
-module Api
-  class SearchControllerTest < ActionController::TestCase
-    ##
-    # test all routes which lead to this controller
-    def test_routes
-      assert_routing(
-        { :path => "/api/0.6/search", :method => :get },
-        { :controller => "api/search", :action => "search_all" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/nodes/search", :method => :get },
-        { :controller => "api/search", :action => "search_nodes" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/ways/search", :method => :get },
-        { :controller => "api/search", :action => "search_ways" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/relations/search", :method => :get },
-        { :controller => "api/search", :action => "search_relations" }
-      )
-    end
-
-    ##
-    # test searching nodes
-    def test_search_nodes
-      get :search_nodes, :params => { :type => "test" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-
-      get :search_nodes, :params => { :type => "test", :value => "yes" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-
-      get :search_nodes, :params => { :name => "Test Node" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-    end
-
-    ##
-    # test searching ways
-    def test_search_ways
-      first_way = create(:way_with_nodes, :nodes_count => 2)
-      deleted_way = create(:way_with_nodes, :deleted, :nodes_count => 2)
-      third_way = create(:way_with_nodes, :nodes_count => 2)
-
-      [first_way, deleted_way, third_way].each do |way|
-        create(:way_tag, :way => way, :k => "test", :v => "yes")
-      end
-      create(:way_tag, :way => third_way, :k => "name", :v => "Test Way")
-
-      get :search_ways, :params => { :type => "test" }
-      assert_response :service_unavailable
-      assert_equal "Searching for a key without value is currently unavailable", response.headers["Error"]
-
-      get :search_ways, :params => { :type => "test", :value => "yes" }
-      assert_response :success
-      assert_select "way", 3
-
-      get :search_ways, :params => { :name => "Test Way" }
-      assert_response :success
-      assert_select "way", 1
-    end
-
-    ##
-    # test searching relations
-    def test_search_relations
-      first_relation = create(:relation)
-      deleted_relation = create(:relation)
-      third_relation = create(:relation)
-
-      [first_relation, deleted_relation, third_relation].each do |relation|
-        create(:relation_tag, :relation => relation, :k => "test", :v => "yes")
-      end
-      create(:relation_tag, :relation => third_relation, :k => "name", :v => "Test Relation")
-
-      get :search_relations, :params => { :type => "test" }
-      assert_response :service_unavailable
-      assert_equal "Searching for a key without value is currently unavailable", response.headers["Error"]
-
-      get :search_relations, :params => { :type => "test", :value => "yes" }
-      assert_response :success
-      assert_select "relation", 3
-
-      get :search_relations, :params => { :name => "Test Relation" }
-      assert_response :success
-      assert_select "relation", 1
-    end
-
-    ##
-    # test searching nodes, ways and relations
-    def test_search_all
-      get :search_all, :params => { :type => "test" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-
-      get :search_all, :params => { :type => "test", :value => "yes" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-
-      get :search_all, :params => { :name => "Test" }
-      assert_response :service_unavailable
-      assert_equal "Searching of nodes is currently unavailable", response.headers["Error"]
-    end
-  end
-end