antw-dyno 0.1.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.
- data/LICENSE +19 -0
- data/README.markdown +68 -0
- data/Rakefile +45 -0
- data/VERSION.yml +4 -0
- data/lib/dyno.rb +22 -0
- data/lib/dyno/competitor.rb +55 -0
- data/lib/dyno/event.rb +16 -0
- data/lib/dyno/parsers/gtr2_parser.rb +13 -0
- data/lib/dyno/parsers/race07_parser.rb +130 -0
- data/lib/dyno/parsers/rfactor_parser.rb +138 -0
- data/spec/competitor_spec.rb +129 -0
- data/spec/event_spec.rb +59 -0
- data/spec/fixtures/gtr2/full.ini +0 -0
- data/spec/fixtures/gtr2/header_no_track.ini +0 -0
- data/spec/fixtures/gtr2/header_only.ini +0 -0
- data/spec/fixtures/gtr2/no_header_section.ini +0 -0
- data/spec/fixtures/gtr2/single_driver.ini +0 -0
- data/spec/fixtures/race07/full.ini +131 -0
- data/spec/fixtures/race07/header_no_track.ini +11 -0
- data/spec/fixtures/race07/header_only.ini +12 -0
- data/spec/fixtures/race07/no_header_section.ini +6 -0
- data/spec/fixtures/race07/no_steam_id.ini +37 -0
- data/spec/fixtures/race07/single_driver.ini +37 -0
- data/spec/fixtures/race07/single_driver_dnf.ini +34 -0
- data/spec/fixtures/race07/single_driver_dsq.ini +34 -0
- data/spec/fixtures/readme.markdown +5 -0
- data/spec/fixtures/rfactor/arca.xml +187 -0
- data/spec/fixtures/rfactor/event_only.xml +43 -0
- data/spec/fixtures/rfactor/full.xml +1023 -0
- data/spec/fixtures/rfactor/missing_root.xml +6 -0
- data/spec/fixtures/rfactor/single_driver.xml +85 -0
- data/spec/fixtures/rfactor/single_driver_dnf.xml +80 -0
- data/spec/fixtures/rfactor/single_driver_dsq.xml +79 -0
- data/spec/parsers/gtr2_parser_spec.rb +199 -0
- data/spec/parsers/race07_parser_spec.rb +155 -0
- data/spec/parsers/rfactor_parser_spec.rb +158 -0
- data/spec/spec_helper.rb +3 -0
- metadata +107 -0
@@ -0,0 +1,155 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'spec_helper' )
|
2
|
+
|
3
|
+
describe Dyno::Parsers::Race07Parser do
|
4
|
+
|
5
|
+
it 'should respond to .parse' do
|
6
|
+
Dyno::Parsers::Race07Parser.should respond_to(:parse)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should respond to .parse_file' do
|
10
|
+
Dyno::Parsers::Race07Parser.should respond_to(:parse_file)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should respond to #parse' do
|
14
|
+
Dyno::Parsers::Race07Parser.public_instance_methods.should include('parse')
|
15
|
+
end
|
16
|
+
|
17
|
+
# --------------
|
18
|
+
# Event parsing.
|
19
|
+
|
20
|
+
describe 'parse_event!' do
|
21
|
+
before(:all) do
|
22
|
+
@event = Dyno::Parsers::Race07Parser.parse_file(
|
23
|
+
'spec/fixtures/race07/header_only.ini'
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should set the game' do
|
28
|
+
@event.game.should == 'RACE 07'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should correctly set the game version' do
|
32
|
+
# 1.1.1.14
|
33
|
+
@event.game_version.should == '1.1.1.14'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should correctly set the event time' do
|
37
|
+
# 2008/09/13 23:00:50
|
38
|
+
@event.time.should == Time.local(2008, 9, 13, 23, 00, 50)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should correctly set the track' do
|
42
|
+
@event.track.should == 'Anderstorp 2007'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should not set the track if one could not be discerned' do
|
46
|
+
event = Dyno::Parsers::Race07Parser.parse_file(
|
47
|
+
'spec/fixtures/race07/header_no_track.ini'
|
48
|
+
)
|
49
|
+
|
50
|
+
event.track.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should whine loudly if there is no "Header" section' do
|
54
|
+
lambda {
|
55
|
+
Dyno::Parsers::Race07Parser.parse_file(
|
56
|
+
'spec/fixtures/race07/no_header_section.ini'
|
57
|
+
)
|
58
|
+
}.should raise_error(Dyno::MalformedInputError)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# -------------------
|
63
|
+
# Competitor parsing.
|
64
|
+
|
65
|
+
describe 'parse_competitors!' do
|
66
|
+
before(:all) do
|
67
|
+
@event = Dyno::Parsers::Race07Parser.parse_file(
|
68
|
+
'spec/fixtures/race07/single_driver.ini'
|
69
|
+
)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should set the driver name correctly' do
|
73
|
+
@event.competitors.first.name.should == 'Gabriel Lloyd'
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should set the vehicle correctly' do
|
77
|
+
@event.competitors.first.vehicle.should == 'Chevrolet Lacetti 2007'
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should set the steam id (uid) correctly' do
|
81
|
+
@event.competitors.first.uid.should == 635
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'should not set the steam id if one is not present' do
|
85
|
+
event = Dyno::Parsers::Race07Parser.parse_file(
|
86
|
+
'spec/fixtures/race07/no_steam_id.ini'
|
87
|
+
)
|
88
|
+
|
89
|
+
event.competitors.first.uid.should be_nil
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should set the lap count correctly' do
|
93
|
+
@event.competitors.first.laps.should == 13
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should convert the race time to a float' do
|
97
|
+
@event.competitors.first.race_time.should == 1296.73
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should convert the best lap time to a float' do
|
101
|
+
@event.competitors.first.best_lap.should == 97.825
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should correctly set the competitors lap times" do
|
105
|
+
@event.competitors.first.lap_times.should == [
|
106
|
+
110.816, # Lap=(0, -1.000, 1:50.816)
|
107
|
+
98.835, # Lap=(1, 89.397, 1:38.835)
|
108
|
+
98.082, # Lap=(2, 200.213, 1:38.082)
|
109
|
+
98.367, # Lap=(3, 299.048, 1:38.367)
|
110
|
+
97.825, # Lap=(4, 397.131, 1:37.825)
|
111
|
+
98.757, # Lap=(5, 495.497, 1:38.757)
|
112
|
+
98.718, # Lap=(6, 593.322, 1:38.718)
|
113
|
+
98.478, # Lap=(7, 692.080, 1:38.478)
|
114
|
+
99.347, # Lap=(8, 790.797, 1:39.347)
|
115
|
+
98.713, # Lap=(9, 889.275, 1:38.713)
|
116
|
+
98.952, # Lap=(10, 988.622, 1:38.952)
|
117
|
+
99.285, # Lap=(11, 1087.336, 1:39.285)
|
118
|
+
100.555 # Lap=(12, 1186.288, 1:40.555)
|
119
|
+
]
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should correctly sort drivers by their finishing time, and assign their position' do
|
123
|
+
event = Dyno::Parsers::Race07Parser.parse_file(
|
124
|
+
'spec/fixtures/race07/full.ini'
|
125
|
+
)
|
126
|
+
|
127
|
+
event.competitors[0].name.should == 'Gabriel Lloyd'
|
128
|
+
event.competitors[0].position.should == 1
|
129
|
+
|
130
|
+
event.competitors[1].name.should == 'Jerry Lalich'
|
131
|
+
event.competitors[1].position.should == 2
|
132
|
+
|
133
|
+
event.competitors[2].name.should == 'Mark Voss'
|
134
|
+
event.competitors[2].position.should == 3
|
135
|
+
|
136
|
+
event.competitors[3].name.should == 'Corey Ball'
|
137
|
+
event.competitors[3].position.should == 4
|
138
|
+
|
139
|
+
event.competitors[4].name.should == 'Reino Lintula'
|
140
|
+
event.competitors[4].position.should == 5
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'should set a competitor as "did not finish" when necessary' do
|
144
|
+
Dyno::Parsers::Race07Parser.parse_file(
|
145
|
+
'spec/fixtures/race07/single_driver_dnf.ini'
|
146
|
+
).competitors[0].should be_dnf
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should set a competitor as "disqualified" when necessary' do
|
150
|
+
Dyno::Parsers::Race07Parser.parse_file(
|
151
|
+
'spec/fixtures/race07/single_driver_dsq.ini'
|
152
|
+
).competitors[0].should be_dsq
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), '..', 'spec_helper' )
|
2
|
+
|
3
|
+
describe Dyno::Parsers::RFactorParser do
|
4
|
+
|
5
|
+
it 'should respond to .parse' do
|
6
|
+
Dyno::Parsers::RFactorParser.should respond_to(:parse)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should respond to .parse_file' do
|
10
|
+
Dyno::Parsers::RFactorParser.should respond_to(:parse_file)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should respond to #parse' do
|
14
|
+
Dyno::Parsers::RFactorParser.public_instance_methods.should include('parse')
|
15
|
+
end
|
16
|
+
|
17
|
+
# --------------
|
18
|
+
# Event parsing.
|
19
|
+
|
20
|
+
describe 'parse_event!' do
|
21
|
+
before(:all) do
|
22
|
+
@event = Dyno::Parsers::RFactorParser.parse_file(
|
23
|
+
'spec/fixtures/rfactor/event_only.xml'
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should set the game' do
|
28
|
+
@event.game.should == 'JF3 2007'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should correctly set the game version' do
|
32
|
+
# 1.255
|
33
|
+
@event.game_version.should == '1.255'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should correctly set the event time' do
|
37
|
+
# 2008/12/21 21:56:13
|
38
|
+
@event.time.should == Time.local(2008, 12, 21, 21, 56, 13)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should correctly set the track' do
|
42
|
+
@event.track.should == 'Suzuka 2005'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should whine loudly if there is no "RaceResults" node' do
|
46
|
+
lambda {
|
47
|
+
Dyno::Parsers::RFactorParser.parse_file(
|
48
|
+
'spec/fixtures/rfactor/missing_root.xml'
|
49
|
+
)
|
50
|
+
}.should raise_error(Dyno::MalformedInputError)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# -------------------
|
55
|
+
# Competitor parsing.
|
56
|
+
|
57
|
+
describe 'parse_competitors!' do
|
58
|
+
before(:all) do
|
59
|
+
@event = Dyno::Parsers::RFactorParser.parse_file(
|
60
|
+
'spec/fixtures/rfactor/single_driver.xml'
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should set the driver name correctly' do
|
65
|
+
@event.competitors.first.name.should == 'Zach Evans'
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should set the vehicle correctly' do
|
69
|
+
@event.competitors.first.vehicle.should == 'JF3 2007'
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should set the lap count correctly' do
|
73
|
+
@event.competitors.first.laps.should == 17
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should convert the race time to a float' do
|
77
|
+
@event.competitors.first.race_time.should == 2049.6411
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should convert the best lap time to a float' do
|
81
|
+
@event.competitors.first.best_lap.should == 119.3561
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should correctly set the competitors lap times" do
|
85
|
+
@event.competitors.first.lap_times.should == [
|
86
|
+
130.5218, # <Lap num="1" [...] >130.5218</Lap>
|
87
|
+
119.7023, # <Lap num="2" [...] >119.7023</Lap>
|
88
|
+
120.2195, # <Lap num="3" [...] >120.2195</Lap>
|
89
|
+
119.6123, # <Lap num="4" [...] >119.6123</Lap>
|
90
|
+
120.2735, # <Lap num="5" [...] >120.2735</Lap>
|
91
|
+
119.6417, # <Lap num="6" [...] >119.6417</Lap>
|
92
|
+
119.6810, # <Lap num="7" [...] >119.6810</Lap>
|
93
|
+
119.9735, # <Lap num="8" [...] >119.9735</Lap>
|
94
|
+
120.0426, # <Lap num="9" [...] >120.0426</Lap>
|
95
|
+
120.0213, # <Lap num="10" [...] >120.0213</Lap>
|
96
|
+
120.5605, # <Lap num="11" [...] >120.5605</Lap>
|
97
|
+
119.3561, # <Lap num="12" [...] >119.3561</Lap>
|
98
|
+
120.2949, # <Lap num="13" [...] >120.2949</Lap>
|
99
|
+
120.5171, # <Lap num="14" [...] >120.5171</Lap>
|
100
|
+
120.1576, # <Lap num="15" [...] >120.1576</Lap>
|
101
|
+
119.3593, # <Lap num="16" [...] >119.3593</Lap>
|
102
|
+
119.7063 # <Lap num="17" [...] >119.7063</Lap>
|
103
|
+
]
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should correctly sort drivers by their finishing time, and assign their position' do
|
107
|
+
event = Dyno::Parsers::RFactorParser.parse_file(
|
108
|
+
'spec/fixtures/rfactor/full.xml'
|
109
|
+
)
|
110
|
+
|
111
|
+
[ [ "Zach Evans", 1 ],
|
112
|
+
[ "Archie Gray", 2 ],
|
113
|
+
[ "Jonathan Mistry", 3 ],
|
114
|
+
[ "Sjef Petersen", 4 ],
|
115
|
+
[ "Topi Keskinen", 5 ],
|
116
|
+
[ "Evan Hanson", 6 ],
|
117
|
+
[ "Tom M. Hall", 7 ],
|
118
|
+
[ "Oliver Baker", 8 ],
|
119
|
+
[ "Jamie Norman", 9 ],
|
120
|
+
[ "Haruaki Gotou", 10 ],
|
121
|
+
[ "Hiromitsu Kishimoto", 11 ],
|
122
|
+
[ "Edgar Est\303\251vez Guajardo", 12 ],
|
123
|
+
[ "Sabahudin Smerkolj", 13 ]
|
124
|
+
].each do |(name, position)|
|
125
|
+
event.competitors[position - 1].name.should == name
|
126
|
+
event.competitors[position - 1].position.should == position
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should set a competitor as "did not finish" when necessary' do
|
131
|
+
Dyno::Parsers::RFactorParser.parse_file(
|
132
|
+
'spec/fixtures/rfactor/single_driver_dnf.xml'
|
133
|
+
).competitors.first.should be_dnf
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should set a competitor as "disqualified" when necessary' do
|
137
|
+
Dyno::Parsers::RFactorParser.parse_file(
|
138
|
+
'spec/fixtures/rfactor/single_driver_dsq.xml'
|
139
|
+
).competitors.first.should be_dsq
|
140
|
+
end
|
141
|
+
|
142
|
+
describe 'when parsing ARCA results' do
|
143
|
+
it 'should not raise an error' do
|
144
|
+
lambda{
|
145
|
+
Dyno::Parsers::RFactorParser.parse_file(
|
146
|
+
'spec/fixtures/rfactor/arca.xml'
|
147
|
+
)
|
148
|
+
}.should_not raise_error
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should have the correct number of competitors' do
|
152
|
+
Dyno::Parsers::RFactorParser.parse_file(
|
153
|
+
'spec/fixtures/rfactor/arca.xml'
|
154
|
+
).competitors.size.should == 3
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: antw-dyno
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anthony Williams
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-05-08 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: iniparse
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.2.0
|
24
|
+
version:
|
25
|
+
description: A rubygem for parsing sim-racing results files.
|
26
|
+
email: anthony@ninecraft.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README.markdown
|
33
|
+
- LICENSE
|
34
|
+
files:
|
35
|
+
- LICENSE
|
36
|
+
- README.markdown
|
37
|
+
- Rakefile
|
38
|
+
- VERSION.yml
|
39
|
+
- lib/dyno
|
40
|
+
- lib/dyno/competitor.rb
|
41
|
+
- lib/dyno/event.rb
|
42
|
+
- lib/dyno/parsers
|
43
|
+
- lib/dyno/parsers/gtr2_parser.rb
|
44
|
+
- lib/dyno/parsers/race07_parser.rb
|
45
|
+
- lib/dyno/parsers/rfactor_parser.rb
|
46
|
+
- lib/dyno.rb
|
47
|
+
- spec/competitor_spec.rb
|
48
|
+
- spec/event_spec.rb
|
49
|
+
- spec/fixtures
|
50
|
+
- spec/fixtures/gtr2
|
51
|
+
- spec/fixtures/gtr2/full.ini
|
52
|
+
- spec/fixtures/gtr2/header_no_track.ini
|
53
|
+
- spec/fixtures/gtr2/header_only.ini
|
54
|
+
- spec/fixtures/gtr2/no_header_section.ini
|
55
|
+
- spec/fixtures/gtr2/single_driver.ini
|
56
|
+
- spec/fixtures/race07
|
57
|
+
- spec/fixtures/race07/full.ini
|
58
|
+
- spec/fixtures/race07/header_no_track.ini
|
59
|
+
- spec/fixtures/race07/header_only.ini
|
60
|
+
- spec/fixtures/race07/no_header_section.ini
|
61
|
+
- spec/fixtures/race07/no_steam_id.ini
|
62
|
+
- spec/fixtures/race07/single_driver.ini
|
63
|
+
- spec/fixtures/race07/single_driver_dnf.ini
|
64
|
+
- spec/fixtures/race07/single_driver_dsq.ini
|
65
|
+
- spec/fixtures/readme.markdown
|
66
|
+
- spec/fixtures/rfactor
|
67
|
+
- spec/fixtures/rfactor/arca.xml
|
68
|
+
- spec/fixtures/rfactor/event_only.xml
|
69
|
+
- spec/fixtures/rfactor/full.xml
|
70
|
+
- spec/fixtures/rfactor/missing_root.xml
|
71
|
+
- spec/fixtures/rfactor/single_driver.xml
|
72
|
+
- spec/fixtures/rfactor/single_driver_dnf.xml
|
73
|
+
- spec/fixtures/rfactor/single_driver_dsq.xml
|
74
|
+
- spec/parsers
|
75
|
+
- spec/parsers/gtr2_parser_spec.rb
|
76
|
+
- spec/parsers/race07_parser_spec.rb
|
77
|
+
- spec/parsers/rfactor_parser_spec.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
has_rdoc: true
|
80
|
+
homepage: http://github.com/anthonyw/dyno
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options:
|
83
|
+
- --inline-source
|
84
|
+
- --charset=UTF-8
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: "0"
|
92
|
+
version:
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: "0"
|
98
|
+
version:
|
99
|
+
requirements: []
|
100
|
+
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 1.2.0
|
103
|
+
signing_key:
|
104
|
+
specification_version: 2
|
105
|
+
summary: A rubygem for parsing sim-racing results files.
|
106
|
+
test_files: []
|
107
|
+
|