eagletree-log 0.0.5 → 0.0.6
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.
- data/LICENSE.txt +1 -1
- data/data/empty.fdr +5 -5
- data/data/funjet-gps.fdr +2936 -2936
- data/data/multi-session-1.fdr +11506 -11506
- data/data/multi-session-2.fdr +6698 -6698
- data/data/old-1.fdr +2215 -2215
- data/data/old-2.fdr +7794 -7794
- data/data/old-3.fdr +8723 -8723
- data/eagletree-log.gemspec +6 -0
- data/lib/eagletree/log/file.rb +5 -5
- data/lib/eagletree/log/session.rb +75 -8
- data/lib/eagletree/log/version.rb +1 -1
- data/spec/session_spec.rb +94 -0
- data/spec/spec_helper.rb +7 -0
- metadata +95 -6
- checksums.yaml +0 -7
data/eagletree-log.gemspec
CHANGED
@@ -18,8 +18,14 @@ 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_development_dependency 'awesome_print'
|
21
22
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
23
|
spec.add_development_dependency 'ci_reporter', '= 1.8.4'
|
23
24
|
spec.add_development_dependency 'rake', '~> 0.8'
|
24
25
|
spec.add_development_dependency 'rspec', '~> 2.12'
|
26
|
+
spec.add_development_dependency 'simplecov'
|
27
|
+
spec.add_development_dependency 'simplecov-gem-adapter'
|
28
|
+
spec.add_development_dependency 'simplecov-rcov'
|
29
|
+
|
30
|
+
spec.add_dependency 'ruby_kml', '~> 0.1'
|
25
31
|
end
|
data/lib/eagletree/log/file.rb
CHANGED
@@ -23,11 +23,11 @@ module EagleTree
|
|
23
23
|
@sessions = []
|
24
24
|
|
25
25
|
open(uri, 'rb') do |file|
|
26
|
-
@name = file.gets.
|
27
|
-
@meta = file.gets.
|
26
|
+
@name = file.gets.strip
|
27
|
+
@meta = file.gets.strip.split
|
28
28
|
session_count = @meta[27].to_i
|
29
29
|
|
30
|
-
if 'All Sessions' != file.gets.
|
30
|
+
if 'All Sessions' != file.gets.strip
|
31
31
|
raise RuntimeError, "No 'All Sessions' marker found"
|
32
32
|
end
|
33
33
|
|
@@ -37,7 +37,7 @@ module EagleTree
|
|
37
37
|
end
|
38
38
|
|
39
39
|
# read off the full file range
|
40
|
-
all_sessions_range = file.gets.
|
40
|
+
all_sessions_range = file.gets.strip.split.map(&:to_i)
|
41
41
|
|
42
42
|
session_count.times do |expected|
|
43
43
|
num = /Session (?<num>\d)/.match(file.gets)[:num].to_i
|
@@ -45,7 +45,7 @@ module EagleTree
|
|
45
45
|
raise RuntimeError, "Unexpected session marker encountered"
|
46
46
|
end
|
47
47
|
|
48
|
-
range = file.gets.
|
48
|
+
range = file.gets.strip.split.map(&:to_i).map { |v| v * @meta[22].to_i }
|
49
49
|
@sessions << Session.new(num, range)
|
50
50
|
end
|
51
51
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'ruby_kml'
|
2
|
+
|
1
3
|
module EagleTree
|
2
4
|
module Log
|
3
5
|
|
@@ -46,7 +48,7 @@ module EagleTree
|
|
46
48
|
end
|
47
49
|
|
48
50
|
def servo_currents
|
49
|
-
@servo_currents ||= float_fields('ServoCurrent*100'
|
51
|
+
@servo_currents ||= float_fields('ServoCurrent*100').map { |val| val / 100.0 }
|
50
52
|
end
|
51
53
|
|
52
54
|
def servo_currents?
|
@@ -62,7 +64,7 @@ module EagleTree
|
|
62
64
|
end
|
63
65
|
|
64
66
|
def pack_voltages
|
65
|
-
@pack_voltages ||= float_fields('PackVolt*100'
|
67
|
+
@pack_voltages ||= float_fields('PackVolt*100').map { |val| val / 100.0 }
|
66
68
|
end
|
67
69
|
|
68
70
|
def pack_voltages?
|
@@ -70,7 +72,7 @@ module EagleTree
|
|
70
72
|
end
|
71
73
|
|
72
74
|
def amps
|
73
|
-
@amps ||= float_fields('Amps*100'
|
75
|
+
@amps ||= float_fields('Amps*100').map { |val| val / 100.0 }
|
74
76
|
end
|
75
77
|
|
76
78
|
def amps?
|
@@ -78,7 +80,7 @@ module EagleTree
|
|
78
80
|
end
|
79
81
|
|
80
82
|
def temps1
|
81
|
-
@temps1 ||= float_fields('Temp1*10'
|
83
|
+
@temps1 ||= float_fields('Temp1*10').map { |val| val / 10.0 }
|
82
84
|
end
|
83
85
|
|
84
86
|
def temps1?
|
@@ -86,7 +88,7 @@ module EagleTree
|
|
86
88
|
end
|
87
89
|
|
88
90
|
def temps2
|
89
|
-
@temps2 ||= float_fields('Temp2*10'
|
91
|
+
@temps2 ||= float_fields('Temp2*10').map { |val| val / 10.0 }
|
90
92
|
end
|
91
93
|
|
92
94
|
def temps2?
|
@@ -94,7 +96,7 @@ module EagleTree
|
|
94
96
|
end
|
95
97
|
|
96
98
|
def temps3
|
97
|
-
@temps3 ||= float_fields('Temp3*10'
|
99
|
+
@temps3 ||= float_fields('Temp3*10').map { |val| val / 10.0 }
|
98
100
|
end
|
99
101
|
|
100
102
|
def temps3?
|
@@ -117,6 +119,71 @@ module EagleTree
|
|
117
119
|
nonzero?(self.rpms2)
|
118
120
|
end
|
119
121
|
|
122
|
+
def latitudes
|
123
|
+
@latitudes ||= float_fields('GPSLat')
|
124
|
+
end
|
125
|
+
|
126
|
+
def latitudes?
|
127
|
+
nonzero?(self.latitudes)
|
128
|
+
end
|
129
|
+
|
130
|
+
def longitudes
|
131
|
+
@longitudes ||= float_fields('GPSLon')
|
132
|
+
end
|
133
|
+
|
134
|
+
def longitudes?
|
135
|
+
nonzero?(self.longitudes)
|
136
|
+
end
|
137
|
+
|
138
|
+
def gps_altitudes
|
139
|
+
@gps_altitudes ||= float_fields('GPSAlt')
|
140
|
+
end
|
141
|
+
|
142
|
+
def gps_altitudes?
|
143
|
+
nonzero?(self.gps_altitudes)
|
144
|
+
end
|
145
|
+
|
146
|
+
def coords
|
147
|
+
@coords ||= longitudes.zip(latitudes, gps_altitudes)
|
148
|
+
end
|
149
|
+
|
150
|
+
def coords?
|
151
|
+
self.longitudes? || self.latitudes? || self.gps_altitudes?
|
152
|
+
end
|
153
|
+
|
154
|
+
def to_kml
|
155
|
+
unless coords?
|
156
|
+
raise RuntimeError, 'No coordinates available for KML path generation'
|
157
|
+
end
|
158
|
+
|
159
|
+
kml = KMLFile.new
|
160
|
+
kml.objects << KML::Document.new(
|
161
|
+
:name => 'NAME HERE',
|
162
|
+
:description => 'DESCRIPTION HERE',
|
163
|
+
:styles => [
|
164
|
+
KML::Style.new(
|
165
|
+
:id => 'yellowLineGreenPoly',
|
166
|
+
:line_style => KML::LineStyle.new(:color => '7f00ffff', :width => 4),
|
167
|
+
:poly_style => KML::PolyStyle.new(:color => '7f00ff00')
|
168
|
+
)
|
169
|
+
],
|
170
|
+
:features => [
|
171
|
+
KML::Placemark.new(
|
172
|
+
:name => 'Absolute Extruded',
|
173
|
+
:description => 'Transparent green wall with yellow outlines',
|
174
|
+
:style_url => '#yellowLineGreenPoly',
|
175
|
+
:geometry => KML::LineString.new(
|
176
|
+
:extrude => true,
|
177
|
+
:tessellate => true,
|
178
|
+
:altitude_mode => 'absolute',
|
179
|
+
:coordinates => coords.map { |c| c.join(',') }.join(' ')
|
180
|
+
)
|
181
|
+
)
|
182
|
+
]
|
183
|
+
)
|
184
|
+
kml.render
|
185
|
+
end
|
186
|
+
|
120
187
|
private
|
121
188
|
|
122
189
|
def nonzero? array
|
@@ -127,8 +194,8 @@ module EagleTree
|
|
127
194
|
fields(name).map(&:to_i)
|
128
195
|
end
|
129
196
|
|
130
|
-
def float_fields name
|
131
|
-
fields(name).map(&:to_f)
|
197
|
+
def float_fields name
|
198
|
+
fields(name).map(&:to_f)
|
132
199
|
end
|
133
200
|
|
134
201
|
def fields name
|
data/spec/session_spec.rb
CHANGED
@@ -2,6 +2,72 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EagleTree::Log::Session do
|
4
4
|
|
5
|
+
context 'data file funjet-gps.fdr' do
|
6
|
+
|
7
|
+
let(:file) { EagleTree::Log::File.new(data_file('funjet-gps.fdr')) }
|
8
|
+
|
9
|
+
subject { file }
|
10
|
+
|
11
|
+
it { should have(1).sessions }
|
12
|
+
|
13
|
+
context 'session 1' do
|
14
|
+
|
15
|
+
subject { file.sessions[0] }
|
16
|
+
|
17
|
+
it { should have(2929).rows }
|
18
|
+
|
19
|
+
its(:duration) { should be_within(0.1).of(732.3) }
|
20
|
+
|
21
|
+
its(:latitudes?) { should be_true }
|
22
|
+
|
23
|
+
it 'should have a few select latitudes' do
|
24
|
+
subject.latitudes[0].should be_within(0.0001).of(49.0775)
|
25
|
+
subject.latitudes[1242].should be_within(0.0001).of(49.0793)
|
26
|
+
subject.latitudes[1666].should be_within(0.0001).of(49.0750)
|
27
|
+
subject.latitudes[2077].should be_within(0.0001).of(49.0771)
|
28
|
+
end
|
29
|
+
|
30
|
+
its(:longitudes?) { should be_true }
|
31
|
+
|
32
|
+
it 'should have a few select longitudes' do
|
33
|
+
subject.longitudes[0].should be_within(0.0001).of(2.1545)
|
34
|
+
subject.longitudes[1356].should be_within(0.0001).of(2.1530)
|
35
|
+
subject.longitudes[1727].should be_within(0.0001).of(2.1560)
|
36
|
+
subject.longitudes[2317].should be_within(0.0001).of(2.1519)
|
37
|
+
end
|
38
|
+
|
39
|
+
its(:gps_altitudes?) { should be_true }
|
40
|
+
|
41
|
+
it 'should have a few select gps_altitudes' do
|
42
|
+
subject.gps_altitudes[864].should be_within(0.1).of(75.0)
|
43
|
+
subject.gps_altitudes[1566].should be_within(0.1).of(208.0)
|
44
|
+
subject.gps_altitudes[1879].should be_within(0.1).of(99.0)
|
45
|
+
subject.gps_altitudes[2317].should be_within(0.1).of(168.0)
|
46
|
+
end
|
47
|
+
|
48
|
+
its(:coords) { should be_true }
|
49
|
+
|
50
|
+
it 'should have a few select coords' do
|
51
|
+
subject.coords[0][0].should be_within(0.0001).of(2.1545)
|
52
|
+
subject.coords[0][1].should be_within(0.0001).of(49.0775)
|
53
|
+
subject.coords[0][2].should be_within(0.1).of(102.0)
|
54
|
+
subject.coords[500][0].should be_within(0.0001).of(2.1545)
|
55
|
+
subject.coords[500][1].should be_within(0.0001).of(49.0775)
|
56
|
+
subject.coords[500][2].should be_within(0.1).of(75.0)
|
57
|
+
subject.coords[1500][0].should be_within(0.0001).of(2.1531)
|
58
|
+
subject.coords[1500][1].should be_within(0.0001).of(49.0780)
|
59
|
+
subject.coords[1500][2].should be_within(0.1).of(121.0)
|
60
|
+
subject.coords[2500][0].should be_within(0.0001).of(2.1542)
|
61
|
+
subject.coords[2500][1].should be_within(0.0001).of(49.0778)
|
62
|
+
subject.coords[2500][2].should be_within(0.1).of(89.0)
|
63
|
+
end
|
64
|
+
|
65
|
+
its(:to_kml) { should_not be_nil }
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
5
71
|
context 'data file multi-session-1.fdr' do
|
6
72
|
|
7
73
|
let(:file) { EagleTree::Log::File.new(data_file('multi-session-1.fdr')) }
|
@@ -18,6 +84,14 @@ describe EagleTree::Log::Session do
|
|
18
84
|
|
19
85
|
its(:duration) { should be_within(0.1).of(355.5) }
|
20
86
|
|
87
|
+
its(:latitudes?) { should be_false }
|
88
|
+
|
89
|
+
its(:longitudes?) { should be_false }
|
90
|
+
|
91
|
+
its(:gps_altitudes?) { should be_false }
|
92
|
+
|
93
|
+
specify { expect { subject.to_kml }.to raise_error(RuntimeError) }
|
94
|
+
|
21
95
|
end
|
22
96
|
|
23
97
|
context 'session 2' do
|
@@ -58,6 +132,12 @@ describe EagleTree::Log::Session do
|
|
58
132
|
|
59
133
|
its(:duration) { should be_within(0.1).of(22.6) }
|
60
134
|
|
135
|
+
its(:latitudes?) { should be_false }
|
136
|
+
|
137
|
+
its(:longitudes?) { should be_false }
|
138
|
+
|
139
|
+
its(:gps_altitudes?) { should be_false }
|
140
|
+
|
61
141
|
end
|
62
142
|
|
63
143
|
context 'session 2' do
|
@@ -126,6 +206,12 @@ describe EagleTree::Log::Session do
|
|
126
206
|
|
127
207
|
its(:rpms2?) { should be_false }
|
128
208
|
|
209
|
+
its(:latitudes?) { should be_false }
|
210
|
+
|
211
|
+
its(:longitudes?) { should be_false }
|
212
|
+
|
213
|
+
its(:gps_altitudes?) { should be_false }
|
214
|
+
|
129
215
|
end
|
130
216
|
|
131
217
|
context 'data file t600-2.fdr' do
|
@@ -172,6 +258,14 @@ describe EagleTree::Log::Session do
|
|
172
258
|
|
173
259
|
its(:rpms2?) { should be_false }
|
174
260
|
|
261
|
+
its(:latitudes?) { should be_false }
|
262
|
+
|
263
|
+
its(:longitudes?) { should be_false }
|
264
|
+
|
265
|
+
its(:gps_altitudes?) { should be_false }
|
266
|
+
|
267
|
+
specify { expect { subject.to_kml }.to raise_error(RuntimeError) }
|
268
|
+
|
175
269
|
end
|
176
270
|
|
177
271
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'simplecov-gem-adapter'
|
3
|
+
require 'simplecov-rcov'
|
4
|
+
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
|
5
|
+
SimpleCov.start 'gem' if ENV['COVERAGE']
|
6
|
+
|
7
|
+
require 'awesome_print'
|
1
8
|
require 'pathname'
|
2
9
|
require 'eagletree/log'
|
3
10
|
|
metadata
CHANGED
@@ -1,18 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eagletree-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Nick Veys
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-14 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: awesome_print
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
13
30
|
- !ruby/object:Gem::Dependency
|
14
31
|
name: bundler
|
15
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
16
34
|
requirements:
|
17
35
|
- - ~>
|
18
36
|
- !ruby/object:Gem::Version
|
@@ -20,6 +38,7 @@ dependencies:
|
|
20
38
|
type: :development
|
21
39
|
prerelease: false
|
22
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
23
42
|
requirements:
|
24
43
|
- - ~>
|
25
44
|
- !ruby/object:Gem::Version
|
@@ -27,6 +46,7 @@ dependencies:
|
|
27
46
|
- !ruby/object:Gem::Dependency
|
28
47
|
name: ci_reporter
|
29
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
30
50
|
requirements:
|
31
51
|
- - '='
|
32
52
|
- !ruby/object:Gem::Version
|
@@ -34,6 +54,7 @@ dependencies:
|
|
34
54
|
type: :development
|
35
55
|
prerelease: false
|
36
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
37
58
|
requirements:
|
38
59
|
- - '='
|
39
60
|
- !ruby/object:Gem::Version
|
@@ -41,6 +62,7 @@ dependencies:
|
|
41
62
|
- !ruby/object:Gem::Dependency
|
42
63
|
name: rake
|
43
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
44
66
|
requirements:
|
45
67
|
- - ~>
|
46
68
|
- !ruby/object:Gem::Version
|
@@ -48,6 +70,7 @@ dependencies:
|
|
48
70
|
type: :development
|
49
71
|
prerelease: false
|
50
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
51
74
|
requirements:
|
52
75
|
- - ~>
|
53
76
|
- !ruby/object:Gem::Version
|
@@ -55,6 +78,7 @@ dependencies:
|
|
55
78
|
- !ruby/object:Gem::Dependency
|
56
79
|
name: rspec
|
57
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
58
82
|
requirements:
|
59
83
|
- - ~>
|
60
84
|
- !ruby/object:Gem::Version
|
@@ -62,10 +86,75 @@ dependencies:
|
|
62
86
|
type: :development
|
63
87
|
prerelease: false
|
64
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
65
90
|
requirements:
|
66
91
|
- - ~>
|
67
92
|
- !ruby/object:Gem::Version
|
68
93
|
version: '2.12'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: simplecov
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: simplecov-gem-adapter
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: simplecov-rcov
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: ruby_kml
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ~>
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0.1'
|
150
|
+
type: :runtime
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0.1'
|
69
158
|
description: Read and interpret Eagle Tree telemetry log files.
|
70
159
|
email:
|
71
160
|
- nick@codelever.com
|
@@ -99,29 +188,29 @@ files:
|
|
99
188
|
homepage: ''
|
100
189
|
licenses:
|
101
190
|
- MIT
|
102
|
-
metadata: {}
|
103
191
|
post_install_message:
|
104
192
|
rdoc_options: []
|
105
193
|
require_paths:
|
106
194
|
- lib
|
107
195
|
required_ruby_version: !ruby/object:Gem::Requirement
|
196
|
+
none: false
|
108
197
|
requirements:
|
109
198
|
- - ! '>='
|
110
199
|
- !ruby/object:Gem::Version
|
111
200
|
version: '0'
|
112
201
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
113
203
|
requirements:
|
114
204
|
- - ! '>='
|
115
205
|
- !ruby/object:Gem::Version
|
116
206
|
version: '0'
|
117
207
|
requirements: []
|
118
208
|
rubyforge_project:
|
119
|
-
rubygems_version:
|
209
|
+
rubygems_version: 1.8.22
|
120
210
|
signing_key:
|
121
|
-
specification_version:
|
211
|
+
specification_version: 3
|
122
212
|
summary: Eagle Tree telemetry log file reader
|
123
213
|
test_files:
|
124
214
|
- spec/file_spec.rb
|
125
215
|
- spec/session_spec.rb
|
126
216
|
- spec/spec_helper.rb
|
127
|
-
has_rdoc:
|