API 0.4 Updates - work on traces pages + pagination, edit tab, some API testing
[rails.git] / app / controllers / way_controller.rb
1 class WayController < ApplicationController\r
2   require 'xml/libxml'
3
4   before_filter :authorize
5   after_filter :compress_output
6 \r
7   def create
8     if request.put?
9       way = Way.from_xml(request.raw_post, true)
10
11       if way
12         way.user_id = @user.id
13         unless way.preconditions_ok? # are the segments (and their nodes) visible?
14           render :nothing => true, :status => 412
15           return
16         end
17
18         if way.save_with_history
19           render :text => way.id.to_s
20           return
21         else
22           render :nothing => true, :status => 500
23           return
24         end
25         return
26       else
27         render :nothing => true, :status => 400 # if we got here the doc didnt parse
28         return
29       end
30     end
31
32     render :nothing => true, :status => 500 # something went very wrong
33   end
34
35   def rest\r
36     unless Way.exists?(params[:id])
37       render :nothing => true, :status => 404
38       return
39     end
40
41     way = Way.find(params[:id])
42     case request.method
43
44     when :get\r
45       unless way.visible
46         render :nothing => true, :status => 410
47         return
48       end
49       render :text => way.to_xml.to_s
50
51     when :delete
52       unless way.visible
53         render :nothing => true, :status => 410
54         return
55       end
56
57       way.visible = false
58       way.save_with_history
59       render :nothing => true
60       return
61     when :put
62       way = Way.from_xml(request.raw_post)
63
64       if way
65         way_in_db = Way.find(way.id)
66         if way_in_db
67           way_in_db.user_id = @user.id
68           way_in_db.tags = way.tags
69           way_in_db.segs = way.segs
70           way_in_db.timestamp = way.timestamp
71           way_in_db.visible = true
72           if way_in_db.save_with_history
73             render :text => way.id
74           else
75             render :nothing => true, :status => 500
76           end
77           return
78         else
79           render :nothing => true, :status => 404 # way doesn't exist yet
80         end
81       else
82         render :nothing => true, :status => 400 # if we got here the doc didnt parse
83         return
84       end
85     end
86   end
87
88   def ways
89     response.headers["Content-Type"] = 'application/xml'
90     ids = params['ways'].split(',').collect {|w| w.to_i }
91     if ids.length > 0
92       waylist = Way.find(ids)
93       doc = get_xml_doc
94       waylist.each do |way|
95         doc.root << way.to_xml_node
96       end 
97       render :text => doc.to_s
98     else
99       render :nothing => true, :status => 400
100     end
101   end
102
103 end