way stuff
[rails.git] / app / models / way.rb
1 class Way < ActiveRecord::Base
2   require 'xml/libxml'
3   
4   belongs_to :user
5   set_table_name 'current_ways'
6
7   def self.from_xml(xml, create=false)
8     p = XML::Parser.new
9     p.string = xml
10     doc = p.parse
11
12     way = Way.new
13
14     doc.find('//osm/way').each do |pt|
15       if !create and pt['id'] != '0'
16         way.id = pt['id'].to_i
17       end
18
19       if create
20         way.timestamp = Time.now
21         way.visible = true
22       else
23         if pt['timestamp']
24           way.timestamp = Time.parse(pt['timestamp'])
25         end
26       end
27
28       pt.find('tag').each do |tag|
29         way.add_tag_keyval(tag['k'], tag['v'])
30       end
31
32       pt.find('seg').each do |seg|
33         way.add_seg_num(seg['id'])
34       end
35  
36
37     end
38
39     return way
40   end
41
42   def segs
43     @segs = Array.new unless @segs
44     @segs
45   end
46
47   def tags
48     @tags = Hash.new unless @tags
49     @tags
50   end
51
52   def add_seg_num(n)
53     @segs = Array.new unless @segs
54     @segs << n.to_i
55   end
56
57   def add_tag_keyval(k, v)
58     @tags = Hash.new unless @tags
59     @tags[k] = v
60   end
61
62   def save_with_history
63     t = Time.now
64     self.timestamp = t
65     self.save
66     
67     WayTag.delete_all(['id = ?', self.id])
68
69     self.tags.each do |k,v|
70       tag = WayTag.new
71       tag.k = k
72       tag.v = v
73       tag.id = self.id
74       tag.save
75     end
76
77     old_way = OldWay.from_way(self)
78     old_way.save
79   end
80
81 end