include LibXML
- attr_reader :possible_points
- attr_reader :actual_points
- attr_reader :tracksegs
+ attr_reader :possible_points, :actual_points, :tracksegs
def initialize(file)
@file = file
point = nil
while reader.read
- if reader.node_type == XML::Reader::TYPE_ELEMENT
+ case reader.node_type
+ when XML::Reader::TYPE_ELEMENT
if reader.name == "trkpt"
point = TrkPt.new(@tracksegs, reader["lat"].to_f, reader["lon"].to_f)
@possible_points += 1
elsif reader.name == "time" && point
point.timestamp = Time.parse(reader.read_string)
end
- elsif reader.node_type == XML::Reader::TYPE_END_ELEMENT
+ when XML::Reader::TYPE_END_ELEMENT
if reader.name == "trkpt" && point && point.valid?
point.altitude ||= 0
yield point
end
def points(&block)
- return enum_for(:points) unless block_given?
+ return enum_for(:points) unless block
@possible_points = 0
@actual_points = 0
@tracksegs = 0
begin
- Archive::Reader.open_filename(@file).each_entry_with_data do |_entry, data|
- parse_file(XML::Reader.string(data), &block)
+ Archive::Reader.open_filename(@file).each_entry_with_data do |entry, data|
+ parse_file(XML::Reader.string(data), &block) if entry.regular?
end
rescue Archive::Error
io = ::File.open(@file)
- case MimeMagic.by_magic(io)&.type
+ case Marcel::MimeType.for(io)
when "application/gzip" then io = Zlib::GzipReader.open(@file)
when "application/x-bzip" then io = Bzip2::FFI::Reader.open(@file)
end