From 58c101762ecbe4300364c12624d1c57cacb00e99 Mon Sep 17 00:00:00 2001 From: Andy Allan Date: Wed, 9 Jan 2019 14:30:18 +0100 Subject: [PATCH] Use a builder view for the capabilities call This is easier to work with than building the XML document by hand in the controller. --- app/controllers/api_controller.rb | 45 ++---------------------------- app/views/api/capabilities.builder | 22 +++++++++++++++ 2 files changed, 25 insertions(+), 42 deletions(-) create mode 100644 app/views/api/capabilities.builder diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index d97feace2..90883376c 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -253,48 +253,9 @@ class ApiController < ApplicationController # * maximum area that can be requested in a bbox request in square degrees # * number of tracepoints that are returned in each tracepoints page def capabilities - doc = OSM::API.new.get_xml_doc - - api = XML::Node.new "api" - version = XML::Node.new "version" - version["minimum"] = API_VERSION.to_s - version["maximum"] = API_VERSION.to_s - api << version - area = XML::Node.new "area" - area["maximum"] = MAX_REQUEST_AREA.to_s - api << area - notearea = XML::Node.new "note_area" - notearea["maximum"] = MAX_NOTE_REQUEST_AREA.to_s - api << notearea - tracepoints = XML::Node.new "tracepoints" - tracepoints["per_page"] = TRACEPOINTS_PER_PAGE.to_s - api << tracepoints - waynodes = XML::Node.new "waynodes" - waynodes["maximum"] = MAX_NUMBER_OF_WAY_NODES.to_s - api << waynodes - changesets = XML::Node.new "changesets" - changesets["maximum_elements"] = Changeset::MAX_ELEMENTS.to_s - api << changesets - timeout = XML::Node.new "timeout" - timeout["seconds"] = API_TIMEOUT.to_s - api << timeout - status = XML::Node.new "status" - status["database"] = database_status.to_s - status["api"] = api_status.to_s - status["gpx"] = gpx_status.to_s - api << status - doc.root << api - policy = XML::Node.new "policy" - blacklist = XML::Node.new "imagery" - IMAGERY_BLACKLIST.each do |url_regex| - xnd = XML::Node.new "blacklist" - xnd["regex"] = url_regex.to_s - blacklist << xnd - end - policy << blacklist - doc.root << policy - - render :xml => doc.to_s + @database_status = database_status + @api_status = api_status + @gpx_status = gpx_status end # External apps that use the api are able to query which permissions diff --git a/app/views/api/capabilities.builder b/app/views/api/capabilities.builder new file mode 100644 index 000000000..3fa79058b --- /dev/null +++ b/app/views/api/capabilities.builder @@ -0,0 +1,22 @@ +xml.instruct! :xml, :version => "1.0" +xml.osm(OSM::API.new.xml_root_attributes) do |osm| + osm.api do |api| + api.version(:minimum => API_VERSION.to_s, :maximum => API_VERSION.to_s) + api.area(:maximum => MAX_REQUEST_AREA.to_s) + api.note_area(:maximum => MAX_NOTE_REQUEST_AREA.to_s) + api.tracepoints(:per_page => TRACEPOINTS_PER_PAGE.to_s) + api.waynodes(:maximum => MAX_NUMBER_OF_WAY_NODES.to_s) + api.changesets(:maximum_elements => Changeset::MAX_ELEMENTS.to_s) + api.timeout(:seconds => API_TIMEOUT.to_s) + api.status(:database => @database_status.to_s, + :api => @api_status.to_s, + :gpx => @gpx_status.to_s) + end + osm.policy do |policy| + policy.imagery do |imagery| + IMAGERY_BLACKLIST.each do |url_regex| + imagery.blacklist(:regex => url_regex.to_s) + end + end + end +end -- 2.43.2