eagletree-log 0.0.2 → 0.0.3
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/.travis.yml +0 -1
- data/data/empty.fdr +5 -0
- data/data/funjet-gps.fdr +2936 -0
- data/data/multi-session-1.fdr +11506 -0
- data/data/multi-session-2.fdr +6698 -0
- data/data/old-1.fdr +2215 -0
- data/data/old-2.fdr +7794 -0
- data/data/old-3.fdr +8723 -0
- data/data/{trex_600.fdr → t600-1.fdr} +0 -0
- data/data/t600-2.fdr +872 -0
- data/lib/eagletree/log/file.rb +13 -11
- data/lib/eagletree/log/version.rb +1 -1
- data/spec/file_spec.rb +74 -2
- data/spec/session_spec.rb +129 -3
- metadata +10 -2
data/lib/eagletree/log/file.rb
CHANGED
@@ -19,19 +19,25 @@ module EagleTree
|
|
19
19
|
attr_reader :version
|
20
20
|
|
21
21
|
def initialize uri
|
22
|
+
@sessions = []
|
22
23
|
|
23
24
|
open(uri, 'rb') do |file|
|
24
25
|
@name = file.gets.chomp
|
25
26
|
@meta = file.gets.chomp.split
|
27
|
+
session_count = @meta[27].to_i
|
26
28
|
|
27
29
|
if 'All Sessions' != file.gets.chomp
|
28
30
|
raise RuntimeError, "No 'All Sessions' marker found"
|
29
31
|
end
|
30
32
|
|
31
|
-
|
33
|
+
# empty files are still valid, just have no sessions
|
34
|
+
if session_count.zero?
|
35
|
+
break
|
36
|
+
end
|
37
|
+
|
38
|
+
# read off the full file range
|
39
|
+
all_sessions_range = file.gets.chomp.split.map(&:to_i)
|
32
40
|
|
33
|
-
@sessions = []
|
34
|
-
session_count = @meta[27].to_i
|
35
41
|
session_count.times do |expected|
|
36
42
|
num = /Session (?<num>\d)/.match(file.gets)[:num].to_i
|
37
43
|
if (expected + 1) != num
|
@@ -42,15 +48,11 @@ module EagleTree
|
|
42
48
|
@sessions << Session.new(num, range)
|
43
49
|
end
|
44
50
|
|
45
|
-
if all_range != [@sessions.first.range[0], @sessions.last.range[1]]
|
46
|
-
raise RuntimeError, 'File did not appear to contain all sessions'
|
47
|
-
end
|
48
|
-
|
49
51
|
session_index = 0
|
50
52
|
session = @sessions[session_index]
|
51
53
|
session_rows = []
|
52
54
|
CSV.new(file, { :col_sep => ' ', :headers => true }).each do |csv|
|
53
|
-
if !((session.range[0]..session.range[1]).include? csv[0].to_i)
|
55
|
+
if !((session.range[0]..(session.range[1]-1)).include? csv[0].to_i)
|
54
56
|
session.rows = session_rows
|
55
57
|
session_index += 1
|
56
58
|
session = @sessions[session_index]
|
@@ -59,15 +61,15 @@ module EagleTree
|
|
59
61
|
|
60
62
|
session_rows << csv
|
61
63
|
end
|
62
|
-
session.rows = session_rows
|
64
|
+
session.rows = session_rows unless session.nil?
|
63
65
|
|
64
66
|
end
|
65
67
|
|
66
68
|
@hardware = @meta[23] # TODO interpret correctly
|
67
69
|
@version = @meta[25].to_f
|
68
70
|
|
69
|
-
rescue
|
70
|
-
|
71
|
+
#rescue
|
72
|
+
# raise ArgumentError, 'File does not appear to be an Eagle Tree log'
|
71
73
|
end
|
72
74
|
|
73
75
|
end
|
data/spec/file_spec.rb
CHANGED
@@ -2,12 +2,84 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EagleTree::Log::File do
|
4
4
|
|
5
|
-
context 'data file
|
5
|
+
context 'data file empty.fdr' do
|
6
6
|
|
7
|
-
subject { EagleTree::Log::File.new(data_file('
|
7
|
+
subject { EagleTree::Log::File.new(data_file('empty.fdr')) }
|
8
|
+
|
9
|
+
it { should have(0).sessions }
|
10
|
+
|
11
|
+
its(:name) { should eql('Skywalker') }
|
12
|
+
|
13
|
+
its(:hardware) { should eql('74') }
|
14
|
+
|
15
|
+
its(:version) { should eql(10.04) }
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'data file funjet-gps.fdr' do
|
20
|
+
|
21
|
+
subject { EagleTree::Log::File.new(data_file('funjet-gps.fdr')) }
|
22
|
+
|
23
|
+
it { should have(1).sessions }
|
24
|
+
|
25
|
+
its(:name) { should eql('FunJet') }
|
26
|
+
|
27
|
+
its(:hardware) { should eql('73') }
|
28
|
+
|
29
|
+
its(:version) { should eql(8.03) }
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'data file multi-session-1.fdr' do
|
34
|
+
|
35
|
+
subject { EagleTree::Log::File.new(data_file('multi-session-1.fdr')) }
|
36
|
+
|
37
|
+
it { should have(3).sessions }
|
38
|
+
|
39
|
+
its(:name) { should eql('Helis') }
|
40
|
+
|
41
|
+
its(:hardware) { should eql('73') }
|
42
|
+
|
43
|
+
its(:version) { should eql(6.93) }
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'data file multi-session-2.fdr' do
|
48
|
+
|
49
|
+
subject { EagleTree::Log::File.new(data_file('multi-session-2.fdr')) }
|
50
|
+
|
51
|
+
it { should have(3).sessions }
|
52
|
+
|
53
|
+
its(:name) { should eql('Losi XXX4') }
|
54
|
+
|
55
|
+
its(:hardware) { should eql('71') }
|
56
|
+
|
57
|
+
its(:version) { should eql(6.02) }
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
context 'data file t600-1.fdr' do
|
62
|
+
|
63
|
+
subject { EagleTree::Log::File.new(data_file('t600-1.fdr')) }
|
8
64
|
|
9
65
|
it { should have(1).sessions }
|
10
66
|
|
67
|
+
its(:name) { should eql('T-Rex 600') }
|
68
|
+
|
69
|
+
its(:hardware) { should eql('73') }
|
70
|
+
|
71
|
+
its(:version) { should eql(6.93) }
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'data file t600-2.fdr' do
|
76
|
+
|
77
|
+
subject { EagleTree::Log::File.new(data_file('t600-2.fdr')) }
|
78
|
+
|
79
|
+
it { should have(1).sessions }
|
80
|
+
|
81
|
+
its(:name) { should eql('T-Rex 600') }
|
82
|
+
|
11
83
|
its(:hardware) { should eql('73') }
|
12
84
|
|
13
85
|
its(:version) { should eql(6.93) }
|
data/spec/session_spec.rb
CHANGED
@@ -2,13 +2,93 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EagleTree::Log::Session do
|
4
4
|
|
5
|
-
context 'data file
|
5
|
+
context 'data file multi-session-1.fdr' do
|
6
6
|
|
7
|
-
|
7
|
+
let(:file) { EagleTree::Log::File.new(data_file('multi-session-1.fdr')) }
|
8
|
+
|
9
|
+
subject { file }
|
10
|
+
|
11
|
+
it { should have(3).sessions }
|
12
|
+
|
13
|
+
context 'session 1' do
|
14
|
+
|
15
|
+
subject { file.sessions[0] }
|
16
|
+
|
17
|
+
it { should have(3555).rows }
|
18
|
+
|
19
|
+
its(:duration) { should be_within(0.1).of(355.5) }
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'session 2' do
|
24
|
+
|
25
|
+
subject { file.sessions[1] }
|
26
|
+
|
27
|
+
it { should have(3699).rows }
|
28
|
+
|
29
|
+
its(:duration) { should be_within(0.1).of(369.9) }
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'session 3' do
|
34
|
+
|
35
|
+
subject { file.sessions[2] }
|
36
|
+
|
37
|
+
it { should have(4241).rows }
|
38
|
+
|
39
|
+
its(:duration) { should be_within(0.1).of(424.0) }
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'data file multi-session-2.fdr' do
|
46
|
+
|
47
|
+
let(:file) { EagleTree::Log::File.new(data_file('multi-session-2.fdr')) }
|
48
|
+
|
49
|
+
subject { file }
|
50
|
+
|
51
|
+
it { should have(3).sessions }
|
52
|
+
|
53
|
+
context 'session 1' do
|
54
|
+
|
55
|
+
subject { file.sessions[0] }
|
56
|
+
|
57
|
+
it { should have(226).rows }
|
58
|
+
|
59
|
+
its(:duration) { should be_within(0.1).of(22.6) }
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'session 2' do
|
64
|
+
|
65
|
+
subject { file.sessions[1] }
|
66
|
+
|
67
|
+
it { should have(124).rows }
|
68
|
+
|
69
|
+
its(:duration) { should be_within(0.1).of(12.4) }
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'session 3' do
|
74
|
+
|
75
|
+
subject { file.sessions[2] }
|
76
|
+
|
77
|
+
it { should have(6336).rows }
|
78
|
+
|
79
|
+
its(:duration) { should be_within(0.1).of(633.5) }
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'data file t600-1.fdr' do
|
86
|
+
|
87
|
+
subject { EagleTree::Log::File.new(data_file('t600-1.fdr')).sessions[0] }
|
8
88
|
|
9
89
|
it { should have(692).rows }
|
10
90
|
|
11
|
-
its(:duration) { should
|
91
|
+
its(:duration) { should be_within(0.1).of(69.2) }
|
12
92
|
|
13
93
|
its(:altitudes?) { should be_false }
|
14
94
|
|
@@ -48,4 +128,50 @@ describe EagleTree::Log::Session do
|
|
48
128
|
|
49
129
|
end
|
50
130
|
|
131
|
+
context 'data file t600-2.fdr' do
|
132
|
+
|
133
|
+
subject { EagleTree::Log::File.new(data_file('t600-2.fdr')).sessions[0] }
|
134
|
+
|
135
|
+
it { should have(865).rows }
|
136
|
+
|
137
|
+
its(:duration) { should be_within(0.1).of(86.5) }
|
138
|
+
|
139
|
+
its(:altitudes?) { should be_false }
|
140
|
+
|
141
|
+
its(:airspeeds?) { should be_false }
|
142
|
+
|
143
|
+
its(:servo_currents?) { should be_false }
|
144
|
+
|
145
|
+
its(:throttles?) { should be_false }
|
146
|
+
|
147
|
+
its(:pack_voltages?) { should be_true }
|
148
|
+
|
149
|
+
it 'should have a few select pack voltages' do
|
150
|
+
subject.pack_voltages[0].should be_within(0.1).of(46.6)
|
151
|
+
subject.pack_voltages[100].should be_within(0.1).of(46.6)
|
152
|
+
subject.pack_voltages[250].should be_within(0.1).of(46.6)
|
153
|
+
subject.pack_voltages[500].should be_within(0.1).of(42.3)
|
154
|
+
end
|
155
|
+
|
156
|
+
its(:amps?) { should be_true }
|
157
|
+
|
158
|
+
it 'should have a few select amps' do
|
159
|
+
subject.amps[0].should be_within(0.01).of(0.18)
|
160
|
+
subject.amps[100].should be_within(0.01).of(0.0)
|
161
|
+
subject.amps[250].should be_within(0.01).of(0.0)
|
162
|
+
subject.amps[500].should be_within(0.01).of(19.9)
|
163
|
+
end
|
164
|
+
|
165
|
+
its(:temps1?) { should be_false }
|
166
|
+
|
167
|
+
its(:temps2?) { should be_false }
|
168
|
+
|
169
|
+
its(:temps3?) { should be_false }
|
170
|
+
|
171
|
+
its(:rpms?) { should be_true }
|
172
|
+
|
173
|
+
its(:rpms2?) { should be_false }
|
174
|
+
|
175
|
+
end
|
176
|
+
|
51
177
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -88,7 +88,15 @@ files:
|
|
88
88
|
- LICENSE.txt
|
89
89
|
- README.md
|
90
90
|
- Rakefile
|
91
|
-
- data/
|
91
|
+
- data/empty.fdr
|
92
|
+
- data/funjet-gps.fdr
|
93
|
+
- data/multi-session-1.fdr
|
94
|
+
- data/multi-session-2.fdr
|
95
|
+
- data/old-1.fdr
|
96
|
+
- data/old-2.fdr
|
97
|
+
- data/old-3.fdr
|
98
|
+
- data/t600-1.fdr
|
99
|
+
- data/t600-2.fdr
|
92
100
|
- eagletree-log.gemspec
|
93
101
|
- lib/eagletree/log.rb
|
94
102
|
- lib/eagletree/log/file.rb
|