]> git.openstreetmap.org Git - rails.git/commitdiff
Merge remote-tracking branch 'upstream/pull/2108'
authorTom Hughes <tom@compton.nu>
Wed, 9 Jan 2019 17:24:28 +0000 (17:24 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 9 Jan 2019 17:24:28 +0000 (17:24 +0000)
app/controllers/api_controller.rb
app/views/api/capabilities.builder [new file with mode: 0644]
app/views/api/permissions.builder
app/views/notes/index.xml.builder
app/views/notes/show.xml.builder
app/views/users/api_read.builder
app/views/users/api_users.builder
lib/osm.rb

index d97feace24d748afa86be812e582493561818d62..90883376c97d7af2cf8239b582baea67d576b7e9 100644 (file)
@@ -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 (file)
index 0000000..3fa7905
--- /dev/null
@@ -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
index 6d26a9e532521d05f826c3a38edb8a9d0462bb8e..f97dd55f88fbbe0c83cde0ee0653ccfcc76a80f4 100644 (file)
@@ -1,6 +1,6 @@
 # create list of permissions
 xml.instruct! :xml, :version => "1.0"
-xml.osm("version" => API_VERSION.to_s, "generator" => "OpenStreetMap Server") do
+xml.osm(OSM::API.new.xml_root_attributes) do
   xml.permissions do
     @permissions.each do |permission|
       xml.permission :name => permission
index c1c2be7e40a79d2e1eec16a6129443d2119c7f49..286b1e1ccecd0b8513e77d41bc442aff826e21a1 100644 (file)
@@ -1,5 +1,5 @@
 xml.instruct!
 
-xml.osm(:version => API_VERSION, :generator => GENERATOR) do |osm|
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
   osm << (render(:partial => "note", :collection => @notes) || "")
 end
index f16cda3a620746dbef9bdc20b3f8c19849ddd4c1..51b3daebd330db43c1cae2036a4efcff42cf2781 100644 (file)
@@ -1,5 +1,5 @@
 xml.instruct!
 
-xml.osm(:version => API_VERSION, :generator => GENERATOR) do |osm|
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
   osm << render(:partial => "note", :object => @note)
 end
index 1598f3c535c59dec65af27a0402cb3bc884fb162..78533279c6adcec93c86c2d820d328c80ad04247 100644 (file)
@@ -1,4 +1,4 @@
 xml.instruct! :xml, :version => "1.0"
-xml.osm("version" => API_VERSION, "generator" => GENERATOR) do |osm|
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
   osm << render(:partial => "api_user", :object => @user)
 end
index 1d2475743ae931c9a5eaf3a166e3688eb5112202..a3c0f4d9a493e2168e40257dbad4739ca47694de 100644 (file)
@@ -1,4 +1,4 @@
 xml.instruct! :xml, :version => "1.0"
-xml.osm("version" => API_VERSION, "generator" => GENERATOR) do |osm|
+xml.osm(OSM::API.new.xml_root_attributes) do |osm|
   osm << render(:partial => "api_user", :collection => @users)
 end
index 841cce17b8f49dba022de129d7d50b04aba63335..1951e3c31287f82d1bc15929a17573834e3a0c6e 100644 (file)
@@ -494,14 +494,20 @@ module OSM
       doc = XML::Document.new
       doc.encoding = XML::Encoding::UTF_8
       root = XML::Node.new "osm"
-      root["version"] = API_VERSION.to_s
-      root["generator"] = GENERATOR
-      root["copyright"] = COPYRIGHT_OWNER
-      root["attribution"] = ATTRIBUTION_URL
-      root["license"] = LICENSE_URL
+      xml_root_attributes.each do |k, v|
+        root[k] = v
+      end
       doc.root = root
       doc
     end
+
+    def xml_root_attributes
+      { "version" => API_VERSION.to_s,
+        "generator" => GENERATOR,
+        "copyright" => COPYRIGHT_OWNER,
+        "attribution" => ATTRIBUTION_URL,
+        "license" => LICENSE_URL }
+    end
   end
 
   def self.ip_to_country(ip_address)