gpx 0.6 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a9b34462ca830301f69200682dfcf151ab8ffb0b
4
+ data.tar.gz: 5be1f021827ad63d9374fa7aca82a33bbfb0738d
5
+ SHA512:
6
+ metadata.gz: df4469f3dae0f31aa753637f6d77f8dc9a45e6f70f419cea351b7976f16297f12fd06fda990ef42025181b497c403aa4e0e3a9911fca64c8ae3401d0a9591383
7
+ data.tar.gz: 40433303bd14de58e1f9b6c9d5891429d90d71a65b60f8ba8cf00cc01e59c3b55bf50ac9fbff2b9d207603b6b0eb8e9ee65065d8154e45f4a56dc9b0bd79a4c7
@@ -0,0 +1,23 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gpx (0.8)
5
+ nokogiri
6
+ rake
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ mini_portile (0.6.2)
12
+ minitest (5.6.1)
13
+ nokogiri (1.6.6.2)
14
+ mini_portile (~> 0.6.0)
15
+ rake (10.4.2)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ bundler
22
+ gpx!
23
+ minitest
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ require './lib/gpx/gpx' # load this just to get GPX::VERSION
2
+ require 'rake' # For FileList
3
+ Gem::Specification.new do |s|
4
+ s.name = 'gpx'
5
+ s.version = GPX::VERSION
6
+ s.summary = %q{A basic API for reading and writing GPX files.}
7
+ s.description = %q{A basic API for reading and writing GPX files.}
8
+ s.files = FileList[ "lib/**/*", "bin/*", "tests/**/*", "[A-Z]*", "Rakefile", "doc/**/*" ]
9
+ s.require_path = 'lib'
10
+ s.has_rdoc = true
11
+ s.author = "Doug Fales"
12
+ s.email = "doug.fales@gmail.com"
13
+ s.homepage = "http://dougfales.github.com/gpx/"
14
+ s.rubyforge_project = "gpx"
15
+ s.add_dependency('hpricot')
16
+ end
data/lib/gpx.rb CHANGED
@@ -22,7 +22,7 @@
22
22
  #++
23
23
  $:.unshift(File.dirname(__FILE__))
24
24
  require 'rubygems'
25
- require 'xml/libxml'
25
+ require 'hpricot'
26
26
  require 'date'
27
27
  require 'time'
28
28
  require 'csv'
@@ -21,12 +21,11 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
  module GPX
24
- VERSION = "0.6"
24
+ VERSION = "0.7"
25
25
 
26
26
  # A common base class which provides a useful initializer method to many
27
27
  # class in the GPX library.
28
28
  class Base
29
- include XML
30
29
 
31
30
  # This initializer can take an XML::Node and scrape out any text
32
31
  # elements with the names given in the "text_elements" array. Each
@@ -35,11 +34,11 @@ module GPX
35
34
  # have to pick out individual text elements in each initializer of each
36
35
  # class (Route, TrackPoint, Track, etc). Just pass an array of possible
37
36
  # attributes to this method.
38
- def instantiate_with_text_elements(parent, text_elements, ns)
37
+ def instantiate_with_text_elements(parent, text_elements)
39
38
  text_elements.each do |el|
40
- child_xpath = "gpx:#{el}"
41
- unless parent.find(child_xpath, ns).empty?
42
- val = parent.find(child_xpath, ns).first.content
39
+ child_xpath = "//#{el}"
40
+ unless parent.at(child_xpath).nil?
41
+ val = parent.at(child_xpath).inner_text
43
42
  self.send("#{el}=", val)
44
43
  end
45
44
  end
@@ -52,20 +52,19 @@ module GPX
52
52
  # gpx_file = File.open(gpx_file)
53
53
  #end
54
54
  gpx_file = gpx_file.name if gpx_file.is_a?(File)
55
- @xml = XML::Document.file(gpx_file)
55
+ @xml = Hpricot(File.open(gpx_file))
56
56
  else
57
- parser = XML::Parser.string(opts[:gpx_data])
58
- @xml = parser.parse
57
+ @xml = Hpricot(opts[:gpx_data])
59
58
  end
60
59
  # set XML namespace for XML find
61
- if @xml.root.namespaces.namespace
62
- @ns = 'gpx:' + @xml.root.namespaces.namespace.href
63
- else
64
- @ns = 'gpx:http://www.topografix.com/GPX/1/1' # default to GPX 1.1
65
- end
60
+ #if @xml.root.namespaces.namespace
61
+ # @ns = 'gpx:' + @xml.root.namespaces.namespace.href
62
+ #else
63
+ # @ns = 'gpx:http://www.topografix.com/GPX/1/1' # default to GPX 1.1
64
+ #end
66
65
 
67
66
  reset_meta_data
68
- bounds_element = (@xml.find("//gpx:gpx/gpx:metadata/gpx:bounds", @ns).to_a.first rescue nil)
67
+ bounds_element = (@xml.at("//metadata/bounds") rescue nil)
69
68
  if bounds_element
70
69
  @bounds.min_lat = get_bounds_attr_value(bounds_element, %w{ min_lat minlat minLat })
71
70
  @bounds.min_lon = get_bounds_attr_value(bounds_element, %w{ min_lon minlon minLon})
@@ -75,20 +74,18 @@ module GPX
75
74
  get_bounds = true
76
75
  end
77
76
 
78
- @time = Time.parse(@xml.find("//gpx:gpx/gpx:metadata/gpx:time", @ns).first.content) rescue nil
79
- @name = @xml.find("//gpx:gpx/gpx:metadata/gpx:name", @ns).first.content rescue nil
80
-
77
+ @time = Time.parse(@xml.at("//metadata/time").inner_text) rescue nil
78
+ @name = @xml.at("//metadata/name").inner_text rescue nil
81
79
  @tracks = []
82
- @xml.find("//gpx:gpx/gpx:trk", @ns).each do |trk|
80
+ @xml.search("//trk").each do |trk|
83
81
  trk = Track.new(:element => trk, :gpx_file => self)
84
82
  update_meta_data(trk, get_bounds)
85
83
  @tracks << trk
86
84
  end
87
85
  @waypoints = []
88
- @xml.find("//gpx:gpx/gpx:wpt", @ns).each { |wpt| @waypoints << Waypoint.new(:element => wpt, :gpx_file => self) }
86
+ @xml.search("//wpt").each { |wpt| @waypoints << Waypoint.new(:element => wpt, :gpx_file => self) }
89
87
  @routes = []
90
- @xml.find("//gpx:gpx/gpx:rte", @ns).each { |rte| @routes << Route.new(:element => rte, :gpx_file => self) }
91
-
88
+ @xml.search("//rte").each { |rte| @routes << Route.new(:element => rte, :gpx_file => self) }
92
89
  @tracks.delete_if { |t| t.empty? }
93
90
 
94
91
  calculate_duration
@@ -222,7 +219,7 @@ module GPX
222
219
  doc = Document.new
223
220
  doc.root = Node.new('gpx')
224
221
  gpx_elem = doc.root
225
- gpx_elem['xmlns:xsi'] = "http://www.w3.org/2001/XMLSchema-instance"
222
+ gpx_elem['xsi'] = "http://www.w3.org/2001/XMLSchema-instance"
226
223
  @version = '1.1' if (@version.nil? || !(['1.0', '1.1'].include?(@version))) # default to version 1.1 of the schema (only version 1.0 and 1.1 of the schema exist)
227
224
  version_dir = @version.gsub('.','/')
228
225
  gpx_elem['xmlns'] = @ns || "http://www.topografix.com/GPX/#{version_dir}"
@@ -60,11 +60,11 @@ module GPX
60
60
 
61
61
  # Takes the name of a magellan file, converts the contents to GPX, and
62
62
  # writes the result to gpx_filename.
63
- def convert_to_gpx(magellan_filename, gpx_filename)
63
+ def convert_to_gpx(magellan_filename, gpx_filename)
64
64
 
65
65
  segment = Segment.new
66
66
 
67
- CSV.open(magellan_filename, "r") do |row|
67
+ CSV.open(magellan_filename, "r").each do |row|
68
68
  next if(row.size < 10 or row[INVALID_FLAG] == 'V')
69
69
 
70
70
  lat_deg = row[LAT][0..1]
@@ -38,9 +38,9 @@ module GPX
38
38
  @lat, @lon = elem["lat"].to_f, elem["lon"].to_f
39
39
  @latr, @lonr = (D_TO_R * @lat), (D_TO_R * @lon)
40
40
  #'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?
41
- @time = (Time.xmlschema(elem.find("gpx:time", @gpx_file.ns).first.content) rescue nil)
42
- @elevation = elem.find("gpx:ele", @gpx_file.ns).first.content.to_f unless elem.find("gpx:ele", @gpx_file.ns).empty?
43
- @speed = elem.find("gpx:speed", @gpx_file.ns).first.content.to_f unless elem.find("gpx:speed", @gpx_file.ns).empty?
41
+ @time = (Time.xmlschema(elem.at("time").inner_text) rescue nil)
42
+ @elevation = elem.at("ele").inner_text.to_f unless elem.at("ele").nil?
43
+ @speed = elem.at("speed").inner_text.to_f unless elem.at("speed").nil?
44
44
  else
45
45
  @lat = opts[:lat]
46
46
  @lon = opts[:lon]
@@ -34,9 +34,9 @@ module GPX
34
34
  if(opts[:gpx_file] and opts[:element])
35
35
  rte_element = opts[:element]
36
36
  @gpx_file = opts[:gpx_file]
37
- @name = rte_element.find("child::gpx:name", @gpx_file.ns).first.content
37
+ @name = rte_element.at("//name").inner_text
38
38
  @points = []
39
- rte_element.find("child::gpx:rtept", @gpx_file.ns).each do |point|
39
+ rte_element.search("//rtept").each do |point|
40
40
  @points << Point.new(:element => point, :gpx_file => @gpx_file)
41
41
  end
42
42
  else
@@ -46,8 +46,8 @@ module GPX
46
46
  if(opts[:element])
47
47
  segment_element = opts[:element]
48
48
  last_pt = nil
49
- if segment_element.is_a?(XML::Node)
50
- segment_element.find("child::gpx:trkpt", @gpx_file.ns).each do |trkpt|
49
+ if segment_element.is_a?(Hpricot::Elem)
50
+ segment_element.search("//trkpt").each do |trkpt|
51
51
  pt = TrackPoint.new(:element => trkpt, :segment => self, :gpx_file => @gpx_file)
52
52
  unless pt.time.nil?
53
53
  @earliest_point = pt if(@earliest_point.nil? or pt.time < @earliest_point.time)
@@ -41,8 +41,8 @@ module GPX
41
41
  reset_meta_data
42
42
  if(opts[:element])
43
43
  trk_element = opts[:element]
44
- @name = (trk_element.find("child::gpx:name", @gpx_file.ns).first.content rescue "")
45
- trk_element.find("child::gpx:trkseg", @gpx_file.ns).each do |seg_element|
44
+ @name = (trk_element.at("//name").inner_text rescue "")
45
+ trk_element.search("//trkseg").each do |seg_element|
46
46
  seg = Segment.new(:element => seg_element, :track => self, :gpx_file => @gpx_file)
47
47
  update_meta_data(seg)
48
48
  @segments << seg
@@ -69,8 +69,8 @@ module GPX
69
69
  # correlating things like pictures, video, and other events, if you are
70
70
  # working with a timestamp.
71
71
  def closest_point(time)
72
- segment = segments.find { |s| s.contains_time?(time) }
73
- segment.closest_point(time)
72
+ segment = segments.select { |s| s.contains_time?(time) }
73
+ segment.first
74
74
  end
75
75
 
76
76
  # Removes all points outside of a given area and updates the meta data.
@@ -114,6 +114,7 @@ module GPX
114
114
 
115
115
  # Prints out a friendly summary of this track (sans points). Useful for
116
116
  # debugging and sanity checks.
117
+
117
118
  def to_s
118
119
  result = "Track \n"
119
120
  result << "\tName: #{name}\n"
@@ -46,7 +46,7 @@ module GPX
46
46
  wpt_elem = opts[:element]
47
47
  @gpx_file = opts[:gpx_file]
48
48
  super(:element => wpt_elem, :gpx_file => @gpx_file)
49
- instantiate_with_text_elements(wpt_elem, SUB_ELEMENTS, @gpx_file.ns)
49
+ instantiate_with_text_elements(wpt_elem, SUB_ELEMENTS)
50
50
  else
51
51
  opts.each do |key, value|
52
52
  assignment_method = "#{key}="
@@ -1,12 +1,16 @@
1
1
  <?xml version="1.0"?>
2
- <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="gpx:http://www.topografix.com/GPX/1/1" version="1.1" creator="GPX RubyGem 0.6 Copyright 2006-2009 Doug Fales -- http://gpx.rubyforge.org/" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
2
+ <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="Link2GPS - 2.0.2 - http://www.hiketech.com" xsi:schemaLocation="ttp://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
3
3
  <metadata>
4
- <name>active_log.gpx</name>
5
- <time>2010-02-28T08:35:38-07:00</time>
6
- <bounds minlat="38.681488" minlon="-109.606948" maxlat="38.791759" maxlon="-109.447045"/>
4
+ <name>
5
+ active_log.gpx
6
+ </name>
7
+ <time>2015-01-08T15:09:14-08:00</time>
8
+ <bound minlat="38.681488" minlon="-109.606948" maxlat="38.791759" maxlon="-109.447045"/>
7
9
  </metadata>
8
10
  <trk>
9
- <name>ACTIVE LOG</name>
11
+ <name>
12
+ ACTIVE LOG
13
+ </name>
10
14
  <trkseg>
11
15
  <trkpt lat="38.782575" lon="-109.595146">
12
16
  <time>2006-04-08T18:25:33Z</time>
@@ -1,9 +1,9 @@
1
1
  <?xml version="1.0"?>
2
- <gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="GPX RubyGem 0.6 Copyright 2006-2009 Doug Fales -- http://gpx.rubyforge.org/" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
2
+ <gpx version="1.1" creator="GPX RubyGem 0.8 -- http://dougfales.github.io/gpx/" xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
3
3
  <metadata>
4
4
  <name>new_gpx_file_from_scratch.gpx</name>
5
- <time>2010-02-28T08:35:34-07:00</time>
6
- <bounds minlat="90.0" minlon="180.0" maxlat="-90.0" maxlon="-180.0"/>
5
+ <time>2015-01-08T15:09:06-08:00</time>
6
+ <bound minlat="90.0" minlon="180.0" maxlat="-90.0" maxlon="-180.0"/>
7
7
  </metadata>
8
8
  <trk>
9
9
  <name/>
@@ -12,11 +12,11 @@ class SegmentTest < Test::Unit::TestCase
12
12
 
13
13
  def test_segment_read
14
14
  assert_equal(189, @segment.points.size)
15
- assert_equal("Fri Apr 07 18:12:05 UTC 2006", @segment.earliest_point.time.to_s)
16
- assert_equal("Fri Apr 07 19:26:31 UTC 2006", @segment.latest_point.time.to_s)
15
+ assert_equal(1144433525, @segment.earliest_point.time.to_i)
16
+ assert_equal(1144437991, @segment.latest_point.time.to_i)
17
17
  assert_equal(1334.447, @segment.lowest_point.elevation)
18
18
  assert_equal(1480.087, @segment.highest_point.elevation)
19
- assert_equal("6.98803359528853", @segment.distance.to_s)
19
+ assert_in_delta(6.98803359528853, @segment.distance, 0.001)
20
20
  end
21
21
 
22
22
  def test_segment_crop
@@ -27,9 +27,9 @@ class SegmentTest < Test::Unit::TestCase
27
27
  @segment.crop(crop_rectangle)
28
28
 
29
29
  assert_equal(106, @segment.points.size)
30
- assert_equal("4.11422061733046", @segment.distance.to_s)
31
- assert_equal("Fri Apr 07 18:37:21 UTC 2006", @segment.earliest_point.time.to_s)
32
- assert_equal("Fri Apr 07 19:22:32 UTC 2006", @segment.latest_point.time.to_s)
30
+ assert_in_delta(4.11422061733046, @segment.distance, 0.001)
31
+ assert_equal(1144435041, @segment.earliest_point.time.to_i)
32
+ assert_equal(1144437752, @segment.latest_point.time.to_i)
33
33
  assert_equal(1407.027, @segment.lowest_point.elevation)
34
34
  assert_equal(1480.087, @segment.highest_point.elevation)
35
35
  assert_equal(39.173834, @segment.bounds.min_lat)
@@ -45,9 +45,9 @@ class SegmentTest < Test::Unit::TestCase
45
45
  :max_lon=> -108.999000)
46
46
  @segment.delete_area(delete_rectangle)
47
47
  assert_equal(83, @segment.points.size)
48
- assert_equal("3.35967118153605", @segment.distance.to_s)
49
- assert_equal("Fri Apr 07 18:12:05 UTC 2006", @segment.earliest_point.time.to_s)
50
- assert_equal("Fri Apr 07 19:26:31 UTC 2006", @segment.latest_point.time.to_s)
48
+ assert_in_delta(3.35967118153605, @segment.distance, 0.001)
49
+ assert_equal(1144433525, @segment.earliest_point.time.to_i)
50
+ assert_equal(1144437991, @segment.latest_point.time.to_i)
51
51
  assert_equal(1334.447, @segment.lowest_point.elevation)
52
52
  assert_equal(1428.176, @segment.highest_point.elevation)
53
53
  assert_equal(39.180572, @segment.bounds.min_lat)
@@ -13,7 +13,7 @@ class TrackTest < Test::Unit::TestCase
13
13
  assert_equal("ACTIVE LOG", @track.name)
14
14
  assert_equal( 182, @track.points.size)
15
15
  assert_equal(8, @track.segments.size)
16
- assert_equal("3.07249668492626", @track.distance.to_s)
16
+ assert_in_delta(3.07249668492626, @track.distance, 0.001)
17
17
  assert_equal(1267.155, @track.lowest_point.elevation)
18
18
  assert_equal(1594.003, @track.highest_point.elevation)
19
19
  assert_equal(38.681488, @track.bounds.min_lat)
@@ -32,7 +32,7 @@ class TrackTest < Test::Unit::TestCase
32
32
  assert_equal("ACTIVE LOG", @track.name)
33
33
  assert_equal( 111, @track.points.size)
34
34
  assert_equal(4, @track.segments.size)
35
- assert_equal("1.62136024923607", @track.distance.to_s)
35
+ assert_in_delta(1.62136024923607, @track.distance, 0.001)
36
36
  assert_equal(1557.954, @track.lowest_point.elevation)
37
37
  assert_equal(1582.468, @track.highest_point.elevation)
38
38
  assert_equal(38.782511, @track.bounds.min_lat)
metadata CHANGED
@@ -1,31 +1,42 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gpx
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 6
8
- version: "0.6"
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.7'
9
5
  platform: ruby
10
- authors:
6
+ authors:
11
7
  - Doug Fales
12
8
  autorequire:
13
9
  bindir: bin
14
10
  cert_chain: []
15
-
16
- date: 2010-02-28 00:00:00 -07:00
17
- default_executable:
18
- dependencies: []
19
-
11
+ date: 2015-08-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hpricot
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
20
27
  description: A basic API for reading and writing GPX files.
21
28
  email: doug.fales@gmail.com
22
29
  executables: []
23
-
24
30
  extensions: []
25
-
26
31
  extra_rdoc_files: []
27
-
28
- files:
32
+ files:
33
+ - ChangeLog
34
+ - Gemfile.lock
35
+ - LICENSE.txt
36
+ - README.rdoc
37
+ - Rakefile
38
+ - gpx.gemspec
39
+ - lib/gpx.rb
29
40
  - lib/gpx/bounds.rb
30
41
  - lib/gpx/gpx.rb
31
42
  - lib/gpx/gpx_file.rb
@@ -36,7 +47,6 @@ files:
36
47
  - lib/gpx/track.rb
37
48
  - lib/gpx/trackpoint.rb
38
49
  - lib/gpx/waypoint.rb
39
- - lib/gpx.rb
40
50
  - tests/gpx10_test.rb
41
51
  - tests/gpx_file_test.rb
42
52
  - tests/gpx_files/arches.gpx
@@ -58,38 +68,27 @@ files:
58
68
  - tests/track_file_test.rb
59
69
  - tests/track_test.rb
60
70
  - tests/waypoint_test.rb
61
- - ChangeLog
62
- - Rakefile
63
- - README.rdoc
64
- has_rdoc: true
65
71
  homepage: http://dougfales.github.com/gpx/
66
72
  licenses: []
67
-
73
+ metadata: {}
68
74
  post_install_message:
69
75
  rdoc_options: []
70
-
71
- require_paths:
76
+ require_paths:
72
77
  - lib
73
- required_ruby_version: !ruby/object:Gem::Requirement
74
- requirements:
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
75
80
  - - ">="
76
- - !ruby/object:Gem::Version
77
- segments:
78
- - 0
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
81
- requirements:
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
82
85
  - - ">="
83
- - !ruby/object:Gem::Version
84
- segments:
85
- - 0
86
- version: "0"
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
87
88
  requirements: []
88
-
89
89
  rubyforge_project: gpx
90
- rubygems_version: 1.3.6
90
+ rubygems_version: 2.4.5
91
91
  signing_key:
92
- specification_version: 3
92
+ specification_version: 4
93
93
  summary: A basic API for reading and writing GPX files.
94
94
  test_files: []
95
-