antw-dyno 0.1.2 → 0.1.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.
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 1
3
- :patch: 2
3
+ :patch: 3
4
4
  :major: 0
@@ -3,7 +3,7 @@ module Dyno::Parsers
3
3
  # Parses a Race 07 results file which are almost identical to Race 07 files.
4
4
  #
5
5
  class GTR2Parser < Race07Parser
6
- def self.parse_file( filename )
6
+ def self.parse_file( filename, mode = :race )
7
7
  # GTR2 files start with a line which isn't valid INI; remove it.
8
8
  parse( IniParse.parse(
9
9
  File.read( filename ).sub!(/^.*\n/, '')
@@ -7,10 +7,14 @@ module Dyno::Parsers
7
7
  ##
8
8
  # Takes a file path and parses it.
9
9
  #
10
- # @param [String] filename The path to the results file.
10
+ # @param [String] filename
11
+ # The path to the results file.
12
+ # @param [Symbol] mode
13
+ # The order in which competitors should be ordered. Race mode uses the
14
+ # normal means, while :lap will order by their fastest lap.
11
15
  #
12
- def self.parse_file( filename )
13
- parse( IniParse.open( filename ) )
16
+ def self.parse_file( filename, mode = :race )
17
+ parse( IniParse.open( filename ), mode )
14
18
  end
15
19
 
16
20
  ##
@@ -20,8 +24,8 @@ module Dyno::Parsers
20
24
  # @param [IniParse::Document] results The results.
21
25
  # @return [Dyno::Event]
22
26
  #
23
- def self.parse( results )
24
- new( results ).parse
27
+ def self.parse( results, mode = :race )
28
+ new( results, mode ).parse
25
29
  end
26
30
 
27
31
  ##
@@ -42,8 +46,8 @@ module Dyno::Parsers
42
46
  #
43
47
  # @param [IniParse::Document] results The results.
44
48
  #
45
- def initialize( results )
46
- @raw = results
49
+ def initialize( results, mode = :race )
50
+ @raw, @mode = results, mode
47
51
  end
48
52
 
49
53
  ##
@@ -105,9 +109,16 @@ module Dyno::Parsers
105
109
  end
106
110
  end
107
111
 
108
- # Sort finished competitors by their race time, lowest (P1) first.
109
- finished_competitors = finished_competitors.sort_by do |c|
110
- [ - c.laps, c.race_time ]
112
+ if @mode == :race
113
+ # Sort finished competitors by their race time, lowest (P1) first.
114
+ finished_competitors = finished_competitors.sort_by do |c|
115
+ [ - c.laps, c.race_time ]
116
+ end
117
+ else
118
+ # Sort finished competitors by their best lap time.
119
+ finished_competitors = finished_competitors.sort_by do |c|
120
+ c.best_lap
121
+ end
111
122
  end
112
123
 
113
124
  # ... and DNF'ed competitors by how many laps they've done.
@@ -8,9 +8,8 @@ module Dyno::Parsers
8
8
  #
9
9
  # @param [String] filename The path to the results file.
10
10
  #
11
- def self.parse_file( filename )
12
- xmlparser = LibXML::XML::Parser.new
13
- xmlparser.file = filename
11
+ def self.parse_file( filename, mode = nil )
12
+ xmlparser = LibXML::XML::Parser.file( filename )
14
13
  parse( xmlparser.parse )
15
14
  end
16
15
 
@@ -21,7 +20,7 @@ module Dyno::Parsers
21
20
  # @param [LibXML::XML::Document] results The results.
22
21
  # @return [Dyno::Event]
23
22
  #
24
- def self.parse( results )
23
+ def self.parse( results, mode = nil )
25
24
  new( results ).parse
26
25
  end
27
26
 
@@ -119,27 +119,6 @@ describe Dyno::Parsers::Race07Parser do
119
119
  ]
120
120
  end
121
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
122
  it 'should set a competitor as "did not finish" when necessary' do
144
123
  Dyno::Parsers::Race07Parser.parse_file(
145
124
  'spec/fixtures/race07/single_driver_dnf.ini'
@@ -151,5 +130,54 @@ describe Dyno::Parsers::Race07Parser do
151
130
  'spec/fixtures/race07/single_driver_dsq.ini'
152
131
  ).competitors[0].should be_dsq
153
132
  end
133
+
134
+ describe 'when in race mode' do
135
+ it 'should sort drivers by their finishing time, and assign '\
136
+ 'their position' do
137
+ event = Dyno::Parsers::Race07Parser.parse_file(
138
+ 'spec/fixtures/race07/full.ini'
139
+ )
140
+
141
+ event.competitors[0].name.should == 'Gabriel Lloyd'
142
+ event.competitors[0].position.should == 1
143
+
144
+ event.competitors[1].name.should == 'Jerry Lalich'
145
+ event.competitors[1].position.should == 2
146
+
147
+ event.competitors[2].name.should == 'Mark Voss'
148
+ event.competitors[2].position.should == 3
149
+
150
+ event.competitors[3].name.should == 'Corey Ball'
151
+ event.competitors[3].position.should == 4
152
+
153
+ event.competitors[4].name.should == 'Reino Lintula'
154
+ event.competitors[4].position.should == 5
155
+ end
156
+ end
157
+
158
+ describe 'when in lap mode' do
159
+ it 'should sort drivers by their fastest lap, and assign their ' \
160
+ 'position' do
161
+ event = Dyno::Parsers::Race07Parser.parse_file(
162
+ 'spec/fixtures/race07/full.ini', :lap
163
+ )
164
+
165
+ event.competitors[0].name.should == 'Jerry Lalich'
166
+ event.competitors[0].position.should == 1
167
+
168
+ event.competitors[1].name.should == 'Gabriel Lloyd'
169
+ event.competitors[1].position.should == 2
170
+
171
+ event.competitors[2].name.should == 'Mark Voss'
172
+ event.competitors[2].position.should == 3
173
+
174
+ event.competitors[3].name.should == 'Corey Ball'
175
+ event.competitors[3].position.should == 4
176
+
177
+ event.competitors[4].name.should == 'Reino Lintula'
178
+ event.competitors[4].position.should == 5
179
+ end
180
+ end
181
+
154
182
  end
155
183
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antw-dyno
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Williams
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-08 00:00:00 -07:00
12
+ date: 2009-05-11 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency