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 80245ee..6d62ece 100644 (file)
@@ -8,7 +8,6 @@ class ApiAbility
     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"
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 002ee58..58c05da 100644 (file)
@@ -62,11 +62,6 @@ OpenStreetMap::Application.routes.draw do
 
     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"
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