gpx_track 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.ruby-version +1 -1
- data/.simplecov +2 -1
- data/README.md +7 -4
- data/gpx.gemspec +2 -2
- data/lib/gpx/exceptions.rb +4 -3
- data/lib/gpx/gpx.rb +31 -24
- data/lib/gpx/haversine.rb +11 -10
- data/lib/gpx/version.rb +1 -1
- data/spec/lib/gpx_spec.rb +59 -45
- data/spec/lib/haversine_spec.rb +9 -9
- data/spec/spec_helper.rb +2 -1
- metadata +30 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d47aea20143f27cbd7ad88244d1c64a2d05316f7
|
4
|
+
data.tar.gz: de1a1003bbe17086ba9d82e5f14147ff48c7a962
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a2548e0c4444ac6d17804624647e84b4eef1e1f624894ef85493cbf544fcb6d1a76a6e1c0022e5a06fac3893a3d9865d4429b12505861a7b0ed9cb52c7cc7cd
|
7
|
+
data.tar.gz: 0c1454faffd3e4b08edb2dab88d7a623075435059ec26922542286a2ed9afbc85dbcaefa3bae29e7d740f932cee74545725af0a74a5ec95d7c73f8a3268acad5
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0-p247
|
data/.simplecov
CHANGED
data/README.md
CHANGED
@@ -26,11 +26,14 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
gpx.points_count # get count of track points
|
28
28
|
|
29
|
-
gpx.
|
29
|
+
gpx.duration # get track duration [s]
|
30
|
+
gpx.length # get track length [km]
|
31
|
+
|
32
|
+
gpx.times[n][:t] # get time delta for n-th and n-1-th track point
|
30
33
|
gpx.times[n][:dt] # get time delta for n-th and n-1-th track point
|
31
34
|
|
32
|
-
gpx.
|
33
|
-
gpx.
|
35
|
+
gpx.distances[n][:s] # get distance between track start and n-th track point
|
36
|
+
gpx.distances[n][:ds] # get distance delta for track n-th and n-1-th track point
|
34
37
|
|
35
38
|
gpx.max_speed # get max value from all partial speeds (ds/dt)
|
36
39
|
gpx.average_speed # get average speed for track
|
@@ -38,7 +41,7 @@ Or install it yourself as:
|
|
38
41
|
gpx.speeds # get partial speeds
|
39
42
|
|
40
43
|
gpx.start_date # date when track begins
|
41
|
-
gpx.end_date
|
44
|
+
gpx.end_date # date when track ends
|
42
45
|
|
43
46
|
## Contributing
|
44
47
|
|
data/gpx.gemspec
CHANGED
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "nokogiri"
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
24
|
spec.add_development_dependency "rake"
|
23
25
|
spec.add_development_dependency "rspec"
|
24
26
|
spec.add_development_dependency "simplecov"
|
25
|
-
|
26
|
-
spec.add_dependency "nokogiri"
|
27
27
|
end
|
data/lib/gpx/exceptions.rb
CHANGED
data/lib/gpx/gpx.rb
CHANGED
@@ -2,8 +2,9 @@ require 'time'
|
|
2
2
|
require 'nokogiri'
|
3
3
|
|
4
4
|
module GPX
|
5
|
-
|
6
|
-
# Class is responsible for parsing GPX files
|
5
|
+
|
6
|
+
# Class is responsible for parsing GPX files
|
7
|
+
# and calculate track statistics
|
7
8
|
class GPX
|
8
9
|
attr_reader :points_count,
|
9
10
|
:points,
|
@@ -14,25 +15,25 @@ module GPX
|
|
14
15
|
:max_speed,
|
15
16
|
:start_date,
|
16
17
|
:end_date
|
17
|
-
|
18
|
+
|
18
19
|
def points_count
|
19
20
|
(@points) ? @points.count : 0
|
20
21
|
end
|
21
|
-
|
22
|
+
|
22
23
|
def start_date
|
23
24
|
@dates.first
|
24
25
|
end
|
25
|
-
|
26
|
+
|
26
27
|
def end_date
|
27
28
|
@dates.last
|
28
29
|
end
|
29
|
-
|
30
|
+
|
30
31
|
def speeds
|
31
32
|
unless @speeds
|
32
33
|
@speeds = self.distances.zip(self.times).collect do |dist,time|
|
33
34
|
dt = time[:dt]
|
34
35
|
unless dt == 0
|
35
|
-
next dist[:ds]/dt*3600
|
36
|
+
next dist[:ds]/dt*3600
|
36
37
|
else
|
37
38
|
next 0
|
38
39
|
end
|
@@ -40,14 +41,14 @@ module GPX
|
|
40
41
|
end
|
41
42
|
@speeds
|
42
43
|
end
|
43
|
-
|
44
|
+
|
44
45
|
def max_speed
|
45
46
|
unless @max_speed
|
46
47
|
@max_speed = self.speeds.sort_by{|speed| speed}.last
|
47
48
|
end
|
48
49
|
@max_speed
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
def average_speed
|
52
53
|
unless @average_speed
|
53
54
|
@average_speed = 0
|
@@ -56,33 +57,39 @@ module GPX
|
|
56
57
|
end
|
57
58
|
@average_speed
|
58
59
|
end
|
59
|
-
|
60
|
+
|
60
61
|
def times
|
61
62
|
calculate_times unless @times
|
62
63
|
@times
|
63
64
|
end
|
64
|
-
|
65
|
+
|
66
|
+
def duration
|
67
|
+
self.times.last[:t]
|
68
|
+
end
|
69
|
+
|
65
70
|
def distances
|
66
71
|
calculate_distances unless @distances
|
67
72
|
@distances
|
68
73
|
end
|
69
|
-
|
74
|
+
|
75
|
+
def length
|
76
|
+
self.distances.last[:s]
|
77
|
+
end
|
78
|
+
|
70
79
|
def initialize(path)
|
71
80
|
@doc = nil
|
72
|
-
|
81
|
+
|
73
82
|
begin
|
74
83
|
path = open(path)
|
75
84
|
doc = Nokogiri::XML(path)
|
76
85
|
rescue
|
77
86
|
raise GPXInvalidFileException
|
78
87
|
end
|
79
|
-
|
80
|
-
# raise GPXInvalidFileException if doc.children.empty?
|
81
|
-
|
88
|
+
|
82
89
|
@points = []
|
83
90
|
@dates = []
|
84
|
-
|
85
|
-
doc.search('trkpt').map do |el|
|
91
|
+
|
92
|
+
doc.search('trkpt').map do |el|
|
86
93
|
@dates.push Time.parse(el.at('time').text)
|
87
94
|
@points.push GeoPoint.new(
|
88
95
|
latitude: el['lat'].to_f,
|
@@ -91,9 +98,9 @@ module GPX
|
|
91
98
|
)
|
92
99
|
end
|
93
100
|
end
|
94
|
-
|
101
|
+
|
95
102
|
private
|
96
|
-
|
103
|
+
|
97
104
|
def calculate_times
|
98
105
|
@times = [ { dt: 0.0, t: 0.0 } ]
|
99
106
|
@dates.each_cons(2) do |date|
|
@@ -104,18 +111,18 @@ module GPX
|
|
104
111
|
@times.push time
|
105
112
|
end
|
106
113
|
end
|
107
|
-
|
114
|
+
|
108
115
|
def calculate_distances
|
109
116
|
@distances = [ {ds: 0.0, s: 0.0} ]
|
110
117
|
@points.each_cons(2) do |point|
|
111
|
-
distance = {
|
118
|
+
distance = {
|
112
119
|
ds: difference = Haversine.distance(point[0], point[1]),
|
113
120
|
s: difference + @distances.last[:s]
|
114
121
|
}
|
115
122
|
@distances.push distance
|
116
123
|
end
|
117
124
|
end
|
118
|
-
|
125
|
+
|
119
126
|
end
|
120
|
-
|
127
|
+
|
121
128
|
end
|
data/lib/gpx/haversine.rb
CHANGED
@@ -1,31 +1,32 @@
|
|
1
1
|
module GPX
|
2
|
-
|
2
|
+
|
3
3
|
# Class is responsible for calculating distance between two geo points (it considers point height)
|
4
4
|
class Haversine
|
5
5
|
RADIAN_PER_DEGREE = Math::PI/180.0
|
6
6
|
EARTH_RADIUS = 6371.00079
|
7
|
-
|
7
|
+
|
8
8
|
def self.distance(first_point, second_point)
|
9
9
|
first_latitude_rad = first_point.latitude.to_f * RADIAN_PER_DEGREE
|
10
10
|
second_latitude_rad = second_point.latitude.to_f * RADIAN_PER_DEGREE
|
11
|
-
|
11
|
+
|
12
12
|
delta_longitude = (second_point.longitude.to_f - first_point.longitude.to_f) * RADIAN_PER_DEGREE
|
13
13
|
delta_latitude = (second_point.latitude.to_f - first_point.latitude.to_f) * RADIAN_PER_DEGREE
|
14
|
-
|
14
|
+
|
15
15
|
elevation = (first_point.elevation.to_f / 1000.0 - second_point.elevation.to_f / 1000.0).abs
|
16
|
-
|
17
|
-
|
16
|
+
|
17
|
+
distance = calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude)
|
18
|
+
triangulate(EARTH_RADIUS * distance, elevation)
|
18
19
|
end
|
19
|
-
|
20
|
+
|
20
21
|
private
|
21
22
|
def self.calculate_distance(first_latitude_rad, second_latitude_rad, delta_latitude, delta_longitude)
|
22
23
|
coefficient = (Math::sin(delta_latitude/2.0)**2.0) +
|
23
24
|
Math::cos(first_latitude_rad) * Math::cos(second_latitude_rad) * (Math::sin(delta_longitude/2.0)**2.0)
|
24
|
-
|
25
|
+
|
25
26
|
2.0 * Math::atan2(Math::sqrt(coefficient), Math::sqrt(1.0-coefficient))
|
26
27
|
end
|
27
|
-
|
28
|
-
def self.triangulate (distance, height)
|
28
|
+
|
29
|
+
def self.triangulate (distance, height)
|
29
30
|
Math::sqrt(distance**2 + height**2)
|
30
31
|
end
|
31
32
|
end
|
data/lib/gpx/version.rb
CHANGED
data/spec/lib/gpx_spec.rb
CHANGED
@@ -1,78 +1,84 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe GPX do
|
4
|
-
|
4
|
+
|
5
5
|
describe "file with one point" do
|
6
6
|
before do
|
7
7
|
@gpx = GPX::GPX.new 'spec/assets/one_point.gpx'
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
subject { @gpx }
|
11
|
-
|
11
|
+
|
12
12
|
it { should respond_to :points }
|
13
13
|
it { should_not respond_to :points= }
|
14
|
-
|
14
|
+
|
15
15
|
it { should respond_to :points_count }
|
16
16
|
it { should_not respond_to :points_count= }
|
17
|
-
|
17
|
+
|
18
18
|
it { should_not respond_to :elevations }
|
19
19
|
it { should_not respond_to :elevations= }
|
20
|
-
|
20
|
+
|
21
21
|
it { should respond_to :times }
|
22
22
|
it { should_not respond_to :times= }
|
23
|
-
|
23
|
+
|
24
|
+
it { should respond_to :duration }
|
25
|
+
it { should_not respond_to :duration= }
|
26
|
+
|
24
27
|
it { should respond_to :speeds }
|
25
28
|
it { should_not respond_to :speeds= }
|
26
|
-
|
29
|
+
|
27
30
|
it { should respond_to :distances }
|
28
31
|
it { should_not respond_to :distances= }
|
29
|
-
|
32
|
+
|
33
|
+
it { should respond_to :length }
|
34
|
+
it { should_not respond_to :length= }
|
35
|
+
|
30
36
|
it { should_not respond_to :times_cumulated }
|
31
37
|
it { should_not respond_to :times_cumulated= }
|
32
|
-
|
38
|
+
|
33
39
|
it { should_not respond_to :distances_cumulated }
|
34
40
|
it { should_not respond_to :distances_cumulated= }
|
35
|
-
|
41
|
+
|
36
42
|
it { should respond_to :average_speed }
|
37
43
|
it { should_not respond_to :average_speed= }
|
38
|
-
|
44
|
+
|
39
45
|
it { should respond_to :max_speed }
|
40
46
|
it { should_not respond_to :max_speed= }
|
41
|
-
|
47
|
+
|
42
48
|
it { should respond_to :start_date }
|
43
49
|
it { should_not respond_to :start_date= }
|
44
|
-
|
50
|
+
|
45
51
|
it { should respond_to :end_date }
|
46
52
|
it { should_not respond_to :end_date= }
|
47
|
-
|
53
|
+
|
48
54
|
it "should return one point" do
|
49
55
|
@gpx.points_count.should eq 1
|
50
56
|
end
|
51
|
-
|
57
|
+
|
52
58
|
it "should return point time" do
|
53
59
|
@gpx.times.first[:dt].should eq 0
|
54
60
|
end
|
55
|
-
|
61
|
+
|
56
62
|
it "should return point cumulated time" do
|
57
63
|
@gpx.times.first[:t].should eq 0
|
58
64
|
end
|
59
|
-
|
65
|
+
|
60
66
|
it "average speed should be zero" do
|
61
67
|
@gpx.average_speed.should eq 0
|
62
68
|
end
|
63
|
-
|
69
|
+
|
64
70
|
it "max speed should be zero" do
|
65
71
|
@gpx.max_speed.should eq 0
|
66
72
|
end
|
67
|
-
|
73
|
+
|
68
74
|
it "start date should not be nil" do
|
69
75
|
@gpx.start_date.should_not eq nil
|
70
76
|
end
|
71
|
-
|
77
|
+
|
72
78
|
it "start date should equals end date" do
|
73
79
|
@gpx.start_date.should eq @gpx.end_date
|
74
80
|
end
|
75
|
-
|
81
|
+
|
76
82
|
describe "should return one zero distance (because of one point)" do
|
77
83
|
it "distances count should equals one" do
|
78
84
|
@gpx.distances.count.should eq 1
|
@@ -84,7 +90,7 @@ describe GPX do
|
|
84
90
|
@gpx.distances.first[:s].should eq 0
|
85
91
|
end
|
86
92
|
end
|
87
|
-
|
93
|
+
|
88
94
|
describe "should return one zero speed (because of one point)" do
|
89
95
|
it "speeds count should equals one" do
|
90
96
|
@gpx.speeds.count.should eq 1
|
@@ -93,53 +99,53 @@ describe GPX do
|
|
93
99
|
@gpx.speeds[0].should eq 0
|
94
100
|
end
|
95
101
|
end
|
96
|
-
|
102
|
+
|
97
103
|
it "should have proper latitude" do
|
98
104
|
@gpx.points.first.latitude.should eq 47.644548
|
99
105
|
end
|
100
106
|
end
|
101
|
-
|
107
|
+
|
102
108
|
describe "file with more than one track point" do
|
103
109
|
POINTS_COUNT = 6
|
104
|
-
|
110
|
+
|
105
111
|
before do
|
106
112
|
@gpx = GPX::GPX.new 'spec/assets/two_tracks.gpx'
|
107
113
|
end
|
108
|
-
|
114
|
+
|
109
115
|
subject { @gpx }
|
110
|
-
|
116
|
+
|
111
117
|
it "should return all points in one array" do
|
112
118
|
@gpx.points_count.should eq POINTS_COUNT
|
113
119
|
end
|
114
|
-
|
120
|
+
|
115
121
|
it "last point should not be nil" do
|
116
122
|
@gpx.points.last.should_not eq nil
|
117
123
|
end
|
118
|
-
|
124
|
+
|
119
125
|
it "should return same count of distances elements as points" do
|
120
126
|
@gpx.distances.count.should eq POINTS_COUNT
|
121
127
|
end
|
122
|
-
|
128
|
+
|
123
129
|
it "should return same count of speeds elements as points" do
|
124
130
|
@gpx.speeds.count.should eq POINTS_COUNT
|
125
131
|
end
|
126
|
-
|
132
|
+
|
127
133
|
it "last point speed should not be nil" do
|
128
134
|
@gpx.speeds.last.should_not eq nil
|
129
135
|
end
|
130
|
-
|
136
|
+
|
131
137
|
it "should return same count of time elements as points" do
|
132
138
|
@gpx.times.count.should eq POINTS_COUNT
|
133
139
|
end
|
134
|
-
|
140
|
+
|
135
141
|
it "last point time should not be nil" do
|
136
142
|
@gpx.times.last.should_not eq nil
|
137
143
|
end
|
138
|
-
|
144
|
+
|
139
145
|
it "last point cumulated time should be positive" do
|
140
146
|
@gpx.times.last[:t].should > 0
|
141
147
|
end
|
142
|
-
|
148
|
+
|
143
149
|
it "last point distance should not be zero" do
|
144
150
|
@gpx.distances.last[:ds].should_not eq 0
|
145
151
|
end
|
@@ -147,39 +153,47 @@ describe GPX do
|
|
147
153
|
it "last point cumulated distance should not be zero" do
|
148
154
|
@gpx.distances.last[:s].should_not eq 0
|
149
155
|
end
|
150
|
-
|
156
|
+
|
157
|
+
it "cumulated time should equals duration" do
|
158
|
+
@gpx.times.last[:t].should eq @gpx.duration
|
159
|
+
end
|
160
|
+
|
161
|
+
it "cumulated distance should equals track length" do
|
162
|
+
@gpx.distances.last[:s].should eq @gpx.length
|
163
|
+
end
|
164
|
+
|
151
165
|
it "average speed should be positive" do
|
152
166
|
@gpx.average_speed.should > 0
|
153
167
|
end
|
154
|
-
|
168
|
+
|
155
169
|
it "max speed should be positive" do
|
156
170
|
@gpx.max_speed.should > 0
|
157
171
|
end
|
158
|
-
|
172
|
+
|
159
173
|
it "start date should not equals end date" do
|
160
174
|
@gpx.start_date.should_not eq @gpx.end_date
|
161
175
|
end
|
162
176
|
end
|
163
|
-
|
177
|
+
|
164
178
|
it "return exeption for non-existing file" do
|
165
179
|
expect {
|
166
|
-
|
180
|
+
GPX::GPX.new 'spec/assets/some_filt_that_not_exists_25363.gpx'
|
167
181
|
}.to raise_error( GPX::GPXInvalidFileException )
|
168
182
|
end
|
169
|
-
|
183
|
+
|
170
184
|
let(:wrong_file_type_gpx) {GPX::GPX.new 'spec/assets/blank.gif'}
|
171
185
|
it "return no points for wrong file type" do
|
172
186
|
wrong_file_type_gpx.points_count.should eq 0
|
173
187
|
end
|
174
|
-
|
188
|
+
|
175
189
|
let(:blank_file_gpx) {GPX::GPX.new 'spec/assets/blank.gpx'}
|
176
190
|
it "return no points for blank file" do
|
177
191
|
blank_file_gpx.points_count.should eq 0
|
178
192
|
end
|
179
|
-
|
193
|
+
|
180
194
|
it "should return zero points for file with no track point" do
|
181
195
|
gpx = GPX::GPX.new 'spec/assets/empty.gpx'
|
182
196
|
gpx.points_count.should eq(0)
|
183
197
|
end
|
184
|
-
|
198
|
+
|
185
199
|
end
|
data/spec/lib/haversine_spec.rb
CHANGED
@@ -5,26 +5,26 @@ PRECISION = 0.002 # 0.01%
|
|
5
5
|
describe GPX::Haversine do
|
6
6
|
def should_equals_distance_with_precision(checked_distance, real_distance)
|
7
7
|
(checked_distance-real_distance).abs.should < real_distance * PRECISION
|
8
|
-
|
9
|
-
|
8
|
+
end
|
9
|
+
|
10
10
|
let(:zabrze) { GPX::GeoPoint.new(latitude: 50.3167, longitude: 18.7833, elevation: 0) }
|
11
11
|
let(:katowice) { GPX::GeoPoint.new(latitude: 50.2667, longitude: 19.0167, elevation: 0) }
|
12
12
|
let(:katowice_distance) { 17.47 }
|
13
|
-
|
13
|
+
|
14
14
|
it "should return proper distance from Zabrze, PL to Katowice, PL" do
|
15
15
|
distance = GPX::Haversine.distance(zabrze, katowice)
|
16
16
|
should_equals_distance_with_precision(distance, katowice_distance)
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "should return proper distance from Katowice, PL to Zabrze, PL" do
|
20
20
|
distance = GPX::Haversine.distance(katowice, zabrze)
|
21
21
|
should_equals_distance_with_precision(distance, katowice_distance)
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
let(:tokyo) { GPX::GeoPoint.new(latitude: 35.6850, longitude: 139.7514, elevation: 0) }
|
25
25
|
let(:london) { GPX::GeoPoint.new(latitude: 51.5000, longitude: -0.1167, elevation: 0) }
|
26
26
|
let(:london_distance) { 9554.72 }
|
27
|
-
|
27
|
+
|
28
28
|
it "should return proper distance from Tokyo, JP to London, GB" do
|
29
29
|
distance = GPX::Haversine.distance(tokyo, london)
|
30
30
|
should_equals_distance_with_precision(distance, london_distance)
|
@@ -37,17 +37,17 @@ describe GPX::Haversine do
|
|
37
37
|
)
|
38
38
|
should_equals_distance_with_precision(distance, 20038)
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
let(:same_point) { GPX::GeoPoint.new(latitude: 44.654, longitude: 44.654, elevation: 0) }
|
42
42
|
it "should return 0 for same lat/lon" do
|
43
43
|
distance = GPX::Haversine.distance(same_point,same_point)
|
44
44
|
distance.should eq 0
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
let(:height) { GPX::GeoPoint.new(latitude: 44.654, longitude: 44.654, elevation: 1233.54) }
|
48
48
|
it "should return proper height for same lat/lon" do
|
49
49
|
distance = GPX::Haversine.distance(same_point, height)
|
50
50
|
distance.should eq height.elevation/1000
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpx_track
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dawid Dziurdzia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: nokogiri
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: simplecov
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
|
-
type: :
|
76
|
+
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: Provide GPX file parsing
|
@@ -87,10 +87,10 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .gitignore
|
91
|
-
- .ruby-gemset
|
92
|
-
- .ruby-version
|
93
|
-
- .simplecov
|
90
|
+
- ".gitignore"
|
91
|
+
- ".ruby-gemset"
|
92
|
+
- ".ruby-version"
|
93
|
+
- ".simplecov"
|
94
94
|
- Gemfile
|
95
95
|
- LICENSE.txt
|
96
96
|
- README.md
|
@@ -121,17 +121,17 @@ require_paths:
|
|
121
121
|
- lib
|
122
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- -
|
124
|
+
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
126
|
version: '0'
|
127
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
requirements: []
|
133
133
|
rubyforge_project:
|
134
|
-
rubygems_version: 2.
|
134
|
+
rubygems_version: 2.1.10
|
135
135
|
signing_key:
|
136
136
|
specification_version: 4
|
137
137
|
summary: Provide GPX file parsing
|