]> git.openstreetmap.org Git - rails.git/blob - app/models/old_node.rb
Avoid mass assignment error in spam observer
[rails.git] / app / models / old_node.rb
1 class OldNode < ActiveRecord::Base
2   include GeoRecord
3   include ConsistencyValidations
4
5   self.table_name = "nodes"
6   self.primary_keys = "node_id", "version"
7
8   validates_presence_of :changeset_id, :timestamp
9   validates_inclusion_of :visible, :in => [ true, false ]
10   validates_numericality_of :latitude, :longitude
11   validate :validate_position
12   validates_associated :changeset
13
14   belongs_to :changeset
15  
16   def validate_position
17     errors.add(:base, "Node is not in the world") unless in_world?
18   end
19
20   def self.from_node(node)
21     old_node = OldNode.new
22     old_node.latitude = node.latitude
23     old_node.longitude = node.longitude
24     old_node.visible = node.visible
25     old_node.tags = node.tags
26     old_node.timestamp = node.timestamp
27     old_node.changeset_id = node.changeset_id
28     old_node.node_id = node.id
29     old_node.version = node.version
30     return old_node
31   end
32   
33   def to_xml
34     doc = OSM::API.new.get_xml_doc
35     doc.root << to_xml_node()
36     return doc
37   end
38
39   def to_xml_node
40     el1 = XML::Node.new 'node'
41     el1['id'] = self.node_id.to_s
42     el1['lat'] = self.lat.to_s
43     el1['lon'] = self.lon.to_s
44     el1['changeset'] = self.changeset.id.to_s
45     if self.changeset.user.data_public?
46       el1['user'] = self.changeset.user.display_name
47       el1['uid'] = self.changeset.user.id.to_s
48     end
49
50     self.tags.each do |k,v|
51       el2 = XML::Node.new('tag')
52       el2['k'] = k.to_s
53       el2['v'] = v.to_s
54       el1 << el2
55     end
56
57     el1['visible'] = self.visible.to_s
58     el1['timestamp'] = self.timestamp.xmlschema
59     el1['version'] = self.version.to_s
60     return el1
61   end
62
63   def save_with_dependencies!
64     save!
65     #not sure whats going on here
66     clear_aggregation_cache
67     clear_association_cache
68     #ok from here
69     @attributes.update(OldNode.where(:node_id => self.node_id, :timestamp => self.timestamp, :version => self.version).first.instance_variable_get('@attributes'))
70    
71     self.tags.each do |k,v|
72       tag = OldNodeTag.new
73       tag.k = k
74       tag.v = v
75       tag.node_id = self.node_id
76       tag.version = self.version
77       tag.save!
78     end
79   end
80
81   def tags
82     unless @tags
83       @tags = Hash.new
84       OldNodeTag.where(:node_id => self.node_id, :version => self.version).each do |tag|
85         @tags[tag.k] = tag.v
86       end
87     end
88     @tags = Hash.new unless @tags
89     @tags
90   end
91
92   def tags=(t)
93     @tags = t 
94   end
95
96   def tags_as_hash 
97     return self.tags
98   end 
99  
100   # Pretend we're not in any ways 
101   def ways 
102     return [] 
103   end 
104  
105   # Pretend we're not in any relations 
106   def containing_relation_members 
107     return [] 
108   end 
109 end