begin rdoc documentation

This commit is contained in:
Steve Coast 2008-01-24 12:53:21 +00:00
parent 5692b8f341
commit db33aa6ff6
3 changed files with 22 additions and 45 deletions

View file

@ -1,31 +1,26 @@
# AMF Controller is a semi-standalone API for Flash clients, particularly Potlatch
# All interaction between Potlatch (as a .SWF application) and the
# OSM database takes place using this controller. Messages are
# encoded in the Actionscript Message Format (AMF).
#
# Public domain.
# editions Systeme D / Richard Fairhurst 2004-2008
#
# All in/out parameters are floats unless explicitly stated.
#
# to trap errors (getway_old,putway,putpoi,deleteway only):
# return(-1,"message") <-- just puts up a dialogue
# return(-2,"message") <-- also asks the user to e-mail me
# to log:
# RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
class AmfController < ApplicationController
require 'stringio'
session :off
before_filter :check_write_availability
# AMF controller for Potlatch
# ---------------------------
# All interaction between Potlatch (as a .SWF application) and the
# OSM database takes place using this controller. Messages are
# encoded in the Actionscript Message Format (AMF).
#
# Public domain. Set your tab width to 4 to read this document. :)
# editions Systeme D / Richard Fairhurst 2004-2008
#
# All in/out parameters are floats unless explicitly stated.
#
# to trap errors (getway_old,putway,putpoi,deleteway only):
# return(-1,"message") <-- just puts up a dialogue
# return(-2,"message") <-- also asks the user to e-mail me
# to log:
# RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
# ====================================================================
# Main AMF handler
# ---- talk process AMF request
# Main AMF handler. Tha talk method takes in AMF, figures out what to do and dispatched to the appropriate private method
def talk
req=StringIO.new(request.raw_post+0.chr) # Get POST data as request
# (cf http://www.ruby-forum.com/topic/122163)
@ -60,8 +55,8 @@ class AmfController < ApplicationController
when 'getway_old'; results[index]=putdata(index,getway_old(args))
when 'getway_history'; results[index]=putdata(index,getway_history(args))
when 'putway'; r=putway(args,renumberednodes)
renumberednodes=r[3]
results[index]=putdata(index,r)
renumberednodes=r[3]
results[index]=putdata(index,r)
when 'deleteway'; results[index]=putdata(index,deleteway(args))
when 'putpoi'; results[index]=putdata(index,putpoi(args))
when 'getpoi'; results[index]=putdata(index,getpoi(args))
@ -94,10 +89,7 @@ class AmfController < ApplicationController
# ====================================================================
# Remote calls
# ----- whichways
# Find all the way ids and nodes (including tags and projected lat/lng) which aren't part of those ways in an are
#
# The argument is an array containing the following, in order:
@ -106,7 +98,6 @@ class AmfController < ApplicationController
# 2. maximum longitude
# 3. maximum latitude
# 4. baselong, 5. basey, 6. masterscale as above
def whichways(args)
xmin = args[0].to_f-0.01
ymin = args[1].to_f-0.01
@ -138,7 +129,6 @@ class AmfController < ApplicationController
# in: as whichways
# does: finds all deleted ways with a deleted node in bounding box
# out: [0] array of way ids
def whichways_deleted(args)
xmin = args[0].to_f-0.01
ymin = args[1].to_f-0.01
@ -148,8 +138,6 @@ class AmfController < ApplicationController
basey = args[5]
masterscale = args[6]
sql=<<-EOF
SELECT DISTINCT current_ways.id
FROM current_nodes,way_nodes,current_ways
@ -164,9 +152,7 @@ class AmfController < ApplicationController
[ways]
end
# ----- getway
# Get a way with all of it's nodes and tags
# The input is an array with the following components, in order:
# 0. wayid - the ID of the way to get
@ -198,7 +184,7 @@ class AmfController < ApplicationController
projected_latitude = node.lat_potlatch(basey,masterscale)
id = node.id
tags_hash = node.tags_as_hash
points << [projected_longitude, projected_latitude, id, nil, tags_hash]
long_array << projected_longitude
lat_array << projected_latitude
@ -209,7 +195,6 @@ class AmfController < ApplicationController
# ----- getway_old
# returns old version of way
# in: [0] way id,
# [1] way version to get (or -1 for "last deleted version")
# [2] baselong, [3] basey, [4] masterscale
@ -222,7 +207,6 @@ class AmfController < ApplicationController
# [2] array of points (as getway _except_ [3] is node.visible?, 0 or 1),
# [4] xmin, [5] xmax, [6] ymin, [7] ymax (unprojected bbox),
# [8] way version
def getway_old(args)
RAILS_DEFAULT_LOGGER.info(" Message: getway_old (server is #{SERVER_URL})")
# if SERVER_URL=="www.openstreetmap.org" then return -1,"Revert is not currently enabled on the OpenStreetMap server." end
@ -258,14 +242,12 @@ class AmfController < ApplicationController
# ----- getway_history
# find history of a way
# in: [0] way id
# does: finds history of a way
# out: [0] array of previous versions (where each is
# [0] version, [1] db timestamp (string),
# [2] visible 0 or 1,
# [3] username or 'anonymous' (string))
def getway_history(args)
wayid=args[0]
history=[]
@ -287,7 +269,6 @@ class AmfController < ApplicationController
# ----- putway
# saves a way to the database
# in: [0] user token (string),
# [1] original way id (may be negative),
# [2] array of points (as getway/getway_old),
@ -300,7 +281,6 @@ class AmfController < ApplicationController
# out: [0] 0 (code for success), [1] original way id (unchanged),
# [2] new way id, [3] hash of renumbered nodes (old id=>new id),
# [4] xmin, [5] xmax, [6] ymin, [7] ymax (unprojected bbox)
def putway(args,renumberednodes)
RAILS_DEFAULT_LOGGER.info(" putway started")
usertoken,originalway,points,attributes,oldversion,baselong,basey,masterscale=args
@ -391,7 +371,6 @@ class AmfController < ApplicationController
end
end
# -- 6a. delete any nodes not in modified way
createuniquenodes(way,db_uqn,nodelist) # nodes which appear in this way but no other
@ -453,7 +432,6 @@ class AmfController < ApplicationController
# ----- putpoi
# save POI to the database
# in: [0] user token (string),
# [1] original node id (may be negative),
# [2] projected longitude, [3] projected latitude,
@ -463,7 +441,6 @@ class AmfController < ApplicationController
# refuses save if the node has since become part of a way
# out: [0] 0 (success), [1] original node id (unchanged),
# [2] new node id
def putpoi(args)
usertoken,id,x,y,tags,visible,baselong,basey,masterscale=args
uid=getuserid(usertoken)

View file

@ -74,6 +74,7 @@ class WayController < ApplicationController
way = Way.find(params[:id])
if way.visible
# omg FIXME
if RelationMember.find(:first, :joins => "INNER JOIN current_relations ON current_relations.id=current_relation_members.id", :conditions => [ "visible = 1 AND member_type='way' and member_id=?", params[:id]])
render :text => "", :status => :precondition_failed
else

View file

@ -1,2 +1 @@
Use this README file to introduce your application and point to useful places in the API for learning more.
Run "rake appdoc" to generate API documentation for your models and controllers.
This is the OpenStreetMap rails server codebase. Documentation is currently extremely incomplete. Please help by writing docs and moving any SQL you see to use models etc.