X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9a9b045372a6f48420a9a6dacfde52c34ab7abce..4fb775d6d516857066e0d3cc86877ead3f6cae08:/app/models/trace.rb diff --git a/app/models/trace.rb b/app/models/trace.rb index b13ce84d2..2d055fd28 100644 --- a/app/models/trace.rb +++ b/app/models/trace.rb @@ -28,20 +28,20 @@ class Trace < ActiveRecord::Base end def tagstring=(s) - if s.include? "," - self.tags = s.split(/\s*,\s*/).select { |tag| tag !~ /^\s*$/ }.collect {|tag| - tt = Tracetag.new - tt.tag = tag - tt - } - else - # do as before for backwards compatibility: - self.tags = s.split.collect {|tag| - tt = Tracetag.new - tt.tag = tag - tt - } - end + self.tags = if s.include? "," + s.split(/\s*,\s*/).select { |tag| tag !~ /^\s*$/ }.collect do |tag| + tt = Tracetag.new + tt.tag = tag + tt + end + else + # do as before for backwards compatibility: + s.split.collect do |tag| + tt = Tracetag.new + tt.tag = tag + tt + end + end end def public? @@ -95,49 +95,49 @@ class Trace < ActiveRecord::Base end def mime_type - filetype = `/usr/bin/file -bz #{trace_name}`.chomp + filetype = `/usr/bin/file -Lbz #{trace_name}`.chomp gzipped = filetype =~ /gzip compressed/ bzipped = filetype =~ /bzip2 compressed/ zipped = filetype =~ /Zip archive/ tarred = filetype =~ /tar archive/ - if gzipped - mimetype = "application/x-gzip" - elsif bzipped - mimetype = "application/x-bzip2" - elsif zipped - mimetype = "application/x-zip" - elsif tarred - mimetype = "application/x-tar" - else - mimetype = "application/gpx+xml" - end + mimetype = if gzipped + "application/x-gzip" + elsif bzipped + "application/x-bzip2" + elsif zipped + "application/x-zip" + elsif tarred + "application/x-tar" + else + "application/gpx+xml" + end mimetype end def extension_name - filetype = `/usr/bin/file -bz #{trace_name}`.chomp + filetype = `/usr/bin/file -Lbz #{trace_name}`.chomp gzipped = filetype =~ /gzip compressed/ bzipped = filetype =~ /bzip2 compressed/ zipped = filetype =~ /Zip archive/ tarred = filetype =~ /tar archive/ - if tarred && gzipped - extension = ".tar.gz" - elsif tarred && bzipped - extension = ".tar.bz2" - elsif tarred - extension = ".tar" - elsif gzipped - extension = ".gpx.gz" - elsif bzipped - extension = ".gpx.bz2" - elsif zipped - extension = ".zip" - else - extension = ".gpx" - end + extension = if tarred && gzipped + ".tar.gz" + elsif tarred && bzipped + ".tar.bz2" + elsif tarred + ".tar" + elsif gzipped + ".gpx.gz" + elsif bzipped + ".gpx.bz2" + elsif zipped + ".zip" + else + ".gpx" + end extension end @@ -156,7 +156,7 @@ class Trace < ActiveRecord::Base el1["lon"] = longitude.to_s if inserted el1["user"] = user.display_name el1["visibility"] = visibility - el1["pending"] = (!inserted).to_s + el1["pending"] = inserted ? "false" : "true" el1["timestamp"] = timestamp.xmlschema el2 = XML::Node.new "description" @@ -174,14 +174,14 @@ class Trace < ActiveRecord::Base # Read in xml as text and return it's Node object representation def self.from_xml(xml, create = false) - p = XML::Parser.string(xml) + p = XML::Parser.string(xml, :options => XML::Parser::Options::NOERROR) doc = p.parse doc.find("//osm/gpx_file").each do |pt| return Trace.from_xml_node(pt, create) end - fail OSM::APIBadXMLError.new("trace", xml, "XML doesn't contain an osm/gpx_file element.") + raise OSM::APIBadXMLError.new("trace", xml, "XML doesn't contain an osm/gpx_file element.") rescue LibXML::XML::Error, ArgumentError => ex raise OSM::APIBadXMLError.new("trace", xml, ex.message) end @@ -189,15 +189,15 @@ class Trace < ActiveRecord::Base def self.from_xml_node(pt, create = false) trace = Trace.new - fail OSM::APIBadXMLError.new("trace", pt, "visibility missing") if pt["visibility"].nil? + raise OSM::APIBadXMLError.new("trace", pt, "visibility missing") if pt["visibility"].nil? trace.visibility = pt["visibility"] unless create - fail OSM::APIBadXMLError.new("trace", pt, "ID is required when updating.") if pt["id"].nil? + raise OSM::APIBadXMLError.new("trace", pt, "ID is required when updating.") if pt["id"].nil? trace.id = pt["id"].to_i # .to_i will return 0 if there is no number that can be parsed. # We want to make sure that there is no id with zero anyway - fail OSM::APIBadUserInput.new("ID of trace cannot be zero when updating.") if trace.id == 0 + raise OSM::APIBadUserInput.new("ID of trace cannot be zero when updating.") if trace.id.zero? end # We don't care about the time, as it is explicitly set on create/update/delete @@ -206,7 +206,7 @@ class Trace < ActiveRecord::Base trace.visible = true description = pt.find("description").first - fail OSM::APIBadXMLError.new("trace", pt, "description missing") if description.nil? + raise OSM::APIBadXMLError.new("trace", pt, "description missing") if description.nil? trace.description = description.content pt.find("tag").each do |tag| @@ -218,7 +218,7 @@ class Trace < ActiveRecord::Base def xml_file # TODO: *nix specific, could do to work on windows... would be functionally inferior though - check for '.gz' - filetype = `/usr/bin/file -bz #{trace_name}`.chomp + filetype = `/usr/bin/file -Lbz #{trace_name}`.chomp gzipped = filetype =~ /gzip compressed/ bzipped = filetype =~ /bzip2 compressed/ zipped = filetype =~ /Zip archive/ @@ -297,7 +297,7 @@ class Trace < ActiveRecord::Base self.icon_picture = gpx.icon(min_lat, min_lon, max_lat, max_lon) self.size = gpx.actual_points self.inserted = true - self.save! + save! end logger.info "done trace #{id}"