gpx 1.0.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +37 -0
- data/.rubocop +1 -0
- data/.rubocop.yml +2 -5
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/README.md +21 -5
- data/Rakefile +7 -0
- data/UPGRADING.md +7 -0
- data/bin/gpx_distance +2 -0
- data/bin/gpx_smooth +5 -2
- data/gpx.gemspec +2 -2
- data/lib/gpx/bounds.rb +3 -0
- data/lib/gpx/geo_json.rb +199 -0
- data/lib/gpx/gpx.rb +2 -0
- data/lib/gpx/gpx_file.rb +53 -51
- data/lib/gpx/magellan_track_log.rb +3 -1
- data/lib/gpx/point.rb +5 -1
- data/lib/gpx/route.rb +4 -1
- data/lib/gpx/segment.rb +14 -9
- data/lib/gpx/track.rb +11 -4
- data/lib/gpx/track_point.rb +2 -0
- data/lib/gpx/version.rb +3 -1
- data/lib/gpx/waypoint.rb +3 -0
- data/lib/gpx.rb +3 -1
- data/tests/geojson_files/combined_data.json +68 -0
- data/tests/geojson_files/line_string_data.json +83 -0
- data/tests/geojson_files/multi_line_string_data.json +74 -0
- data/tests/geojson_files/multi_point_data.json +14 -0
- data/tests/geojson_files/point_data.json +22 -0
- data/tests/geojson_test.rb +92 -0
- data/tests/gpx10_test.rb +2 -0
- data/tests/gpx_file_test.rb +2 -0
- data/tests/gpx_files/one_segment_mixed_times.gpx +884 -0
- data/tests/gpx_files/routes_without_names.gpx +29 -0
- data/tests/magellan_test.rb +2 -0
- data/tests/output_test.rb +3 -1
- data/tests/route_test.rb +52 -0
- data/tests/segment_test.rb +13 -1
- data/tests/track_file_test.rb +3 -0
- data/tests/track_point_test.rb +2 -0
- data/tests/track_test.rb +2 -0
- data/tests/waypoint_test.rb +2 -0
- metadata +25 -9
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
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
|
+
<metadata>
|
4
|
+
<name><![CDATA[routes.gpx]]></name>
|
5
|
+
<time>2006-01-02T08:55:34Z</time>
|
6
|
+
<bounds min_lat="39.989739" min_lon="-105.295285" max_lat="39.999840" max_lon="-105.214696"/>
|
7
|
+
</metadata>
|
8
|
+
<extensions/>
|
9
|
+
<rte>
|
10
|
+
<rtept lat="39.997298" lon="-105.292674">
|
11
|
+
<sym>Waypoint</sym>
|
12
|
+
<ele>1766.535</ele>
|
13
|
+
</rtept>
|
14
|
+
<rtept lat="39.995700" lon="-105.292805">
|
15
|
+
<sym>Waypoint</sym>
|
16
|
+
<ele>1854.735</ele>
|
17
|
+
</rtept>
|
18
|
+
<rtept lat="39.989739" lon="-105.295285">
|
19
|
+
<sym>Waypoint</sym>
|
20
|
+
<ele>2163.556</ele>
|
21
|
+
</rtept>
|
22
|
+
</rte>
|
23
|
+
<rte>
|
24
|
+
<rtept lat="39.999840" lon="-105.214696">
|
25
|
+
<sym>Waypoint</sym>
|
26
|
+
<ele>1612.965</ele>
|
27
|
+
</rtept>
|
28
|
+
</rte>
|
29
|
+
</gpx>
|
data/tests/magellan_test.rb
CHANGED
data/tests/output_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'fileutils'
|
3
5
|
require 'gpx'
|
@@ -109,5 +111,5 @@ class OutputTest < Minitest::Test
|
|
109
111
|
File.join(File.dirname(__FILE__), "output/#{test_name}.gpx")
|
110
112
|
end
|
111
113
|
|
112
|
-
THE_WORKS = "<?xml version=\"1.0\"?>\n<gpx xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"GPX RubyGem #{GPX::VERSION} 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\">\n <metadata>\n <name>new_gpx_file_from_scratch.gpx</name>\n <time>%s</time>\n <bounds minlat=\"90.0\" minlon=\"180.0\" maxlat=\"-90.0\" maxlon=\"-180.0\"/>\n </metadata>\n <trk>\n <name/>\n <trkseg>\n <trkpt lat=\"40.036926\" lon=\"-105.253487\">\n <time>2005-12-31T22:01:24Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.036604\" lon=\"-105.253487\">\n <time>2005-12-31T22:02:01Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.036347\" lon=\"-105.25383\">\n <time>2005-12-31T22:02:08Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.035574\" lon=\"-105.254045\">\n <time>2005-12-31T22:02:20Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:54Z</time>\n <ele>1739.643</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:08Z</time>\n <ele>1732.433</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:09Z</time>\n <ele>1726.665</ele>\n </trkpt>\n </trkseg>\n </trk>\n <wpt lat=\"39.997298\" lon=\"-105.292674\">\n <name>GRG-CA</name>\n <sym>Waypoint</sym>\n <ele>1766.535</ele>\n </wpt>\n <wpt lat=\"33.33019\" lon=\"-111.94611\">\n <name>GRMPHX</name>\n <cmt>Hey here's a comment.</cmt>\n <desc>Somewhere in my backyard.</desc>\n <sym>Waypoint</sym>\n <fix>3d</fix>\n <sat>8</sat>\n <hdop>50.5</hdop>\n <vdop>6.8</vdop>\n <pdop>7.6</pdop>\n <ele>361.0981</ele>\n </wpt>\n <wpt lat=\"25.061783\" lon=\"121.640267\">\n <name>GRMTWN</name>\n <sym>Waypoint</sym>\n <ele>38.09766</ele>\n </wpt>\n <wpt lat=\"39.99984\" lon=\"-105.214696\">\n <name>SBDR</name>\n <sym>Waypoint</sym>\n <ele>1612.965</ele>\n </wpt>\n <wpt lat=\"39.989739\" lon=\"-105.295285\">\n <name>TO</name>\n <sym>Waypoint</sym>\n <ele>2163.556</ele>\n </wpt>\n <wpt lat=\"40.035301\" lon=\"-105.254443\">\n <name>VICS</name>\n <sym>Waypoint</sym>\n <ele>1535.34</ele>\n </wpt>\n <rte>\n <name/>\n <rtept lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </rtept>\n </rte>\n</gpx>\n"
|
114
|
+
THE_WORKS = "<?xml version=\"1.0\"?>\n<gpx xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"GPX RubyGem #{GPX::VERSION} 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\">\n <metadata>\n <name>new_gpx_file_from_scratch.gpx</name>\n <time>%s</time>\n <bounds minlat=\"90.0\" minlon=\"180.0\" maxlat=\"-90.0\" maxlon=\"-180.0\"/>\n </metadata>\n <trk>\n <name/>\n <trkseg>\n <trkpt lat=\"40.036926\" lon=\"-105.253487\">\n <time>2005-12-31T22:01:24Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.036604\" lon=\"-105.253487\">\n <time>2005-12-31T22:02:01Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.036347\" lon=\"-105.25383\">\n <time>2005-12-31T22:02:08Z</time>\n <ele>1738.682</ele>\n </trkpt>\n <trkpt lat=\"40.035574\" lon=\"-105.254045\">\n <time>2005-12-31T22:02:20Z</time>\n <ele>1737.24</ele>\n </trkpt>\n <trkpt lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </trkpt>\n <trkpt lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:54Z</time>\n <ele>1739.643</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:08Z</time>\n <ele>1732.433</ele>\n </trkpt>\n <trkpt lat=\"40.035317\" lon=\"-105.254431\">\n <time>2005-12-31T22:05:09Z</time>\n <ele>1726.665</ele>\n </trkpt>\n </trkseg>\n </trk>\n <wpt lat=\"39.997298\" lon=\"-105.292674\">\n <name>GRG-CA</name>\n <sym>Waypoint</sym>\n <ele>1766.535</ele>\n </wpt>\n <wpt lat=\"33.33019\" lon=\"-111.94611\">\n <name>GRMPHX</name>\n <cmt>Hey here's a comment.</cmt>\n <desc>Somewhere in my backyard.</desc>\n <sym>Waypoint</sym>\n <fix>3d</fix>\n <sat>8</sat>\n <hdop>50.5</hdop>\n <vdop>6.8</vdop>\n <pdop>7.6</pdop>\n <ele>361.0981</ele>\n </wpt>\n <wpt lat=\"25.061783\" lon=\"121.640267\">\n <name>GRMTWN</name>\n <sym>Waypoint</sym>\n <ele>38.09766</ele>\n </wpt>\n <wpt lat=\"39.99984\" lon=\"-105.214696\">\n <name>SBDR</name>\n <sym>Waypoint</sym>\n <ele>1612.965</ele>\n </wpt>\n <wpt lat=\"39.989739\" lon=\"-105.295285\">\n <name>TO</name>\n <sym>Waypoint</sym>\n <ele>2163.556</ele>\n </wpt>\n <wpt lat=\"40.035301\" lon=\"-105.254443\">\n <name>VICS</name>\n <sym>Waypoint</sym>\n <ele>1535.34</ele>\n </wpt>\n <rte>\n <name/>\n <rtept lat=\"40.035467\" lon=\"-105.254366\">\n <time>2005-12-31T22:02:29Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035317\" lon=\"-105.254388\">\n <time>2005-12-31T22:02:33Z</time>\n <ele>1735.798</ele>\n </rtept>\n <rtept lat=\"40.035274\" lon=\"-105.254431\">\n <time>2005-12-31T22:02:49Z</time>\n <ele>1736.278</ele>\n </rtept>\n </rte>\n</gpx>\n"
|
113
115
|
end
|
data/tests/route_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'gpx'
|
3
5
|
|
@@ -53,4 +55,54 @@ class RouteTest < Minitest::Test
|
|
53
55
|
assert_equal(-105.214696, second_route.points[0].lon)
|
54
56
|
assert_equal(1612.965, second_route.points[0].elevation)
|
55
57
|
end
|
58
|
+
|
59
|
+
def test_read_routes_without_name_fields
|
60
|
+
file = File.join(File.dirname(__FILE__), 'gpx_files/routes_without_names.gpx')
|
61
|
+
gpx = GPX::GPXFile.new(gpx_file: file)
|
62
|
+
assert_equal(2, gpx.routes.size)
|
63
|
+
first_route = gpx.routes.first
|
64
|
+
assert_equal(3, first_route.points.size)
|
65
|
+
assert_nil(first_route.name)
|
66
|
+
|
67
|
+
# Route 1, First Point
|
68
|
+
# <rtept lat="39.997298" lon="-105.292674">
|
69
|
+
# <sym>Waypoint</sym>
|
70
|
+
# <ele>1766.535</ele>
|
71
|
+
# </rtept>
|
72
|
+
assert_equal(39.997298, first_route.points[0].lat)
|
73
|
+
assert_equal(-105.292674, first_route.points[0].lon)
|
74
|
+
assert_equal(1766.535, first_route.points[0].elevation)
|
75
|
+
|
76
|
+
# Route 1, Second Point
|
77
|
+
# <rtept lat="39.995700" lon="-105.292805">
|
78
|
+
# <name><![CDATA[AMPTHT]]></name>
|
79
|
+
# <sym>Waypoint</sym>
|
80
|
+
# <ele>1854.735</ele>
|
81
|
+
# </rtept>
|
82
|
+
assert_equal(39.995700, first_route.points[1].lat)
|
83
|
+
assert_equal(-105.292805, first_route.points[1].lon)
|
84
|
+
assert_equal(1854.735, first_route.points[1].elevation)
|
85
|
+
|
86
|
+
# Route 1, Third Point
|
87
|
+
# <rtept lat="39.989739" lon="-105.295285">
|
88
|
+
# <sym>Waypoint</sym>
|
89
|
+
# <ele>2163.556</ele>
|
90
|
+
# </rtept>
|
91
|
+
assert_equal(39.989739, first_route.points[2].lat)
|
92
|
+
assert_equal(-105.295285, first_route.points[2].lon)
|
93
|
+
assert_equal(2163.556, first_route.points[2].elevation)
|
94
|
+
|
95
|
+
second_route = gpx.routes[1]
|
96
|
+
assert_equal(1, second_route.points.size)
|
97
|
+
assert_nil(second_route.name)
|
98
|
+
|
99
|
+
# Route 2, Only Point
|
100
|
+
# <rtept lat="39.999840" lon="-105.214696">
|
101
|
+
# <sym>Waypoint</sym>
|
102
|
+
# <ele>1612.965</ele>
|
103
|
+
# </rtept>
|
104
|
+
assert_equal(39.999840, second_route.points[0].lat)
|
105
|
+
assert_equal(-105.214696, second_route.points[0].lon)
|
106
|
+
assert_equal(1612.965, second_route.points[0].elevation)
|
107
|
+
end
|
56
108
|
end
|
data/tests/segment_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'minitest/autorun'
|
3
4
|
require 'yaml'
|
4
5
|
require 'gpx'
|
@@ -6,6 +7,7 @@ require 'gpx'
|
|
6
7
|
class SegmentTest < Minitest::Test
|
7
8
|
ONE_SEGMENT = File.join(File.dirname(__FILE__), 'gpx_files/one_segment.gpx')
|
8
9
|
ONE_SEGMENT_NO_TIME = File.join(File.dirname(__FILE__), 'gpx_files/one_segment_no_time.gpx')
|
10
|
+
ONE_SEGMENT_MIXED_TIMES = File.join(File.dirname(__FILE__), 'gpx_files/one_segment_mixed_times.gpx')
|
9
11
|
|
10
12
|
def setup
|
11
13
|
@gpx_file = GPX::GPXFile.new(gpx_file: ONE_SEGMENT)
|
@@ -105,4 +107,14 @@ class SegmentTest < Minitest::Test
|
|
105
107
|
assert_in_delta(6.900813095, @segment.distance, 0.001)
|
106
108
|
assert_equal(4466.0, @segment.duration)
|
107
109
|
end
|
110
|
+
|
111
|
+
def test_segment_mixed_times
|
112
|
+
gpx_file_mixed_times = GPX::GPXFile.new(gpx_file: ONE_SEGMENT_MIXED_TIMES)
|
113
|
+
segment_mixed_times = gpx_file_mixed_times.tracks.first.segments.first
|
114
|
+
assert_equal(588, segment_mixed_times.points.size)
|
115
|
+
assert_equal(0, segment_mixed_times.earliest_point.time.to_i)
|
116
|
+
assert_equal(0, segment_mixed_times.latest_point.time.to_i)
|
117
|
+
assert_in_delta(40.763726054, segment_mixed_times.distance, 0.001)
|
118
|
+
assert_equal(0.0, segment_mixed_times.duration)
|
119
|
+
end
|
108
120
|
end
|
data/tests/track_file_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'gpx'
|
3
5
|
|
@@ -8,6 +10,7 @@ class TrackFileTest < Minitest::Test
|
|
8
10
|
def setup
|
9
11
|
@track_file = GPX::GPXFile.new(gpx_file: TRACK_FILE)
|
10
12
|
@other_track_file = GPX::GPXFile.new(gpx_file: OTHER_TRACK_FILE)
|
13
|
+
FileUtils.mkdir_p(File.join(File.dirname(__FILE__), 'output'))
|
11
14
|
end
|
12
15
|
|
13
16
|
def test_track_read
|
data/tests/track_point_test.rb
CHANGED
data/tests/track_test.rb
CHANGED
data/tests/waypoint_test.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillaume Dott
|
8
8
|
- Doug Fales
|
9
9
|
- Andrew Hao
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2023-05-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -91,19 +91,25 @@ executables: []
|
|
91
91
|
extensions: []
|
92
92
|
extra_rdoc_files: []
|
93
93
|
files:
|
94
|
+
- ".github/workflows/ruby.yml"
|
94
95
|
- ".gitignore"
|
96
|
+
- ".rubocop"
|
95
97
|
- ".rubocop.yml"
|
98
|
+
- ".ruby-version"
|
99
|
+
- ".tool-versions"
|
96
100
|
- ".travis.yml"
|
97
101
|
- CHANGELOG.md
|
98
102
|
- Gemfile
|
99
103
|
- LICENSE.txt
|
100
104
|
- README.md
|
101
105
|
- Rakefile
|
106
|
+
- UPGRADING.md
|
102
107
|
- bin/gpx_distance
|
103
108
|
- bin/gpx_smooth
|
104
109
|
- gpx.gemspec
|
105
110
|
- lib/gpx.rb
|
106
111
|
- lib/gpx/bounds.rb
|
112
|
+
- lib/gpx/geo_json.rb
|
107
113
|
- lib/gpx/gpx.rb
|
108
114
|
- lib/gpx/gpx_file.rb
|
109
115
|
- lib/gpx/magellan_track_log.rb
|
@@ -114,6 +120,12 @@ files:
|
|
114
120
|
- lib/gpx/track_point.rb
|
115
121
|
- lib/gpx/version.rb
|
116
122
|
- lib/gpx/waypoint.rb
|
123
|
+
- tests/geojson_files/combined_data.json
|
124
|
+
- tests/geojson_files/line_string_data.json
|
125
|
+
- tests/geojson_files/multi_line_string_data.json
|
126
|
+
- tests/geojson_files/multi_point_data.json
|
127
|
+
- tests/geojson_files/point_data.json
|
128
|
+
- tests/geojson_test.rb
|
117
129
|
- tests/gpx10_test.rb
|
118
130
|
- tests/gpx_file_test.rb
|
119
131
|
- tests/gpx_files/arches.gpx
|
@@ -121,9 +133,11 @@ files:
|
|
121
133
|
- tests/gpx_files/gpx10.gpx
|
122
134
|
- tests/gpx_files/magellan_track.log
|
123
135
|
- tests/gpx_files/one_segment.gpx
|
136
|
+
- tests/gpx_files/one_segment_mixed_times.gpx
|
124
137
|
- tests/gpx_files/one_segment_no_time.gpx
|
125
138
|
- tests/gpx_files/one_track.gpx
|
126
139
|
- tests/gpx_files/routes.gpx
|
140
|
+
- tests/gpx_files/routes_without_names.gpx
|
127
141
|
- tests/gpx_files/tracks.gpx
|
128
142
|
- tests/gpx_files/waypoints.gpx
|
129
143
|
- tests/gpx_files/with_empty_tracks.gpx
|
@@ -139,24 +153,26 @@ files:
|
|
139
153
|
homepage: http://www.github.com/dougfales/gpx
|
140
154
|
licenses: []
|
141
155
|
metadata: {}
|
142
|
-
post_install_message:
|
156
|
+
post_install_message:
|
143
157
|
rdoc_options: []
|
144
158
|
require_paths:
|
145
159
|
- lib
|
146
160
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
161
|
requirements:
|
148
|
-
- - "
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '2.7'
|
165
|
+
- - "<"
|
149
166
|
- !ruby/object:Gem::Version
|
150
|
-
version: '
|
167
|
+
version: '4'
|
151
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
169
|
requirements:
|
153
170
|
- - ">="
|
154
171
|
- !ruby/object:Gem::Version
|
155
172
|
version: '0'
|
156
173
|
requirements: []
|
157
|
-
|
158
|
-
|
159
|
-
signing_key:
|
174
|
+
rubygems_version: 3.4.10
|
175
|
+
signing_key:
|
160
176
|
specification_version: 4
|
161
177
|
summary: A basic API for reading and writing GPX files.
|
162
178
|
test_files: []
|