# (cf http://www.ruby-forum.com/topic/122163)
req.read(2) # Skip version indicator and client ID
results={} # Results of each body
+ renumberednodes={} # Shared across repeated putways
# -------------
# Parse request
when 'getway'; results[index]=putdata(index,getway(args))
when 'getway_old'; results[index]=putdata(index,getway_old(args))
when 'getway_history'; results[index]=putdata(index,getway_history(args))
- when 'putway'; results[index]=putdata(index,putway(args))
+ when 'putway'; r=putway(args,renumberednodes)
+ 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))
# returns current way ID, new way ID, hash of renumbered nodes,
# xmin,xmax,ymin,ymax
- def putway(args)
+ def putway(args,renumberednodes)
RAILS_DEFAULT_LOGGER.info(" putway started")
usertoken,originalway,points,attributes,oldversion,baselong,basey,masterscale=args
uid=getuserid(usertoken)
xmin=ymin= 999999
xmax=ymax=-999999
insertsql=''
- renumberednodes={}
nodelist=[]
points.each_index do |i|
def sqlescape(a)
- a.gsub(/[\000-\037]/,"").gsub("'","''").gsub(92.chr,92.chr+92.chr)
+ a.gsub(/[\000-\037]/,"").gsub("'","''").gsub(92.chr) {92.chr+92.chr}
end
def tag2array(a)
tags={}
- a.gsub(';;;','#%').split(';').each do |b|
- b.gsub!('#%',';;;')
- b.gsub!('===','#%')
- k,v=b.split('=')
- if k.nil? then k='' end
- if v.nil? then v='' end
- tags[k.gsub('#%','=').gsub(':','|')]=v.gsub('#%','=')
+ Tags.split(a) do |k, v|
+ tags[k.gsub(':','|')]=v
end
tags
end
def array2tag(a)
- str=''
+ tags = []
a.each do |k,v|
if v=='' then next end
if v[0,6]=='(type ' then next end
- if str!='' then str+=';' end
- str+=k.gsub(';',';;;').gsub('=','===').gsub('|',':')+'='+v.gsub(';',';;;').gsub('=','===')
+ tags << [k.gsub('|',':'), v]
end
- str
+ return Tags.join(tags)
end
def getuserid(token)