icu_tournament 1.3.7 → 1.3.8
Sign up to get free protection for your applications and to get access to all the features.
@@ -94,20 +94,25 @@ module ICU
|
|
94
94
|
#
|
95
95
|
# t.validate(:rerank => true)
|
96
96
|
#
|
97
|
-
# Ranking is inconsistent if
|
98
|
-
#
|
97
|
+
# Ranking is inconsistent if not all players have a rank or at least one pair of players exist
|
98
|
+
# where one has a higher score but a lower rank.
|
99
99
|
#
|
100
|
-
# To rank the players requires
|
101
|
-
#
|
102
|
-
#
|
100
|
+
# To rank the players requires one or more tie break methods for ordering players on the same score.
|
101
|
+
# Methods can be specified by supplying an array of methods names (strings or symbols) in order of
|
102
|
+
# precedence to the _tie_breaks_ setter. Examples:
|
103
103
|
#
|
104
104
|
# t.tie_breaks = ['Sonneborn-Berger']
|
105
105
|
# t.tie_breaks = [:buchholz, :neustadtl, :blacks, :wins]
|
106
|
-
# t.tie_breaks = [] #
|
106
|
+
# t.tie_breaks = [] # use the default - see below
|
107
107
|
#
|
108
|
-
#
|
108
|
+
# If the first method fails to differentiate two tied players, the second is tried, and then the
|
109
|
+
# third and so on. See ICU::TieBreak for the full list of supported tie break methods.
|
109
110
|
#
|
110
|
-
#
|
111
|
+
# Unless explicity specified, the _name_ tie break (which orders alphabetically by last name
|
112
|
+
# then first name) is implicitly used as a method of last resort. Thus, in the absence of any
|
113
|
+
# tie break methods being specified at all, alphabetical ordering is the default.
|
114
|
+
#
|
115
|
+
# The return value from _rerank_ is the tournament object itself, to allow method chaining, for example:
|
111
116
|
#
|
112
117
|
# t.rerank.renumber
|
113
118
|
#
|
@@ -43,23 +43,25 @@ module ICU
|
|
43
43
|
# daffy = tournament.player(2)
|
44
44
|
# daffy.title # => "IM"
|
45
45
|
# daffy.rating # => 2200
|
46
|
+
# daffy.fide_rating # => nil
|
46
47
|
# daffy.fed # => "IRL"
|
47
|
-
# daffy.id # =>
|
48
|
-
# daffy.
|
48
|
+
# daffy.id # => nil
|
49
|
+
# daffy.fide_id # => 7654321
|
49
50
|
# daffy.dob # => "1937-04-17"
|
50
51
|
#
|
51
|
-
# By default,
|
52
|
-
# FIDE
|
52
|
+
# By default, ratings are interpreted as ICU. If, instead, they should be interpreted as
|
53
|
+
# FIDE ratings, add the _fide_ option:
|
53
54
|
#
|
54
|
-
# tournament = parser.parse_file('tournament.tab', :
|
55
|
+
# tournament = parser.parse_file('tournament.tab', :fide => true)
|
55
56
|
# daffy = tournament.player(2)
|
56
|
-
# daffy.id # => nil
|
57
|
-
# daffy.fide # => 7654321
|
58
57
|
# daffy.rating # => nil
|
59
58
|
# daffy.fide_rating # => 2200
|
60
59
|
#
|
60
|
+
# ID numbers, on the other hand, are automatically classified as either FIDE or ICU on the basis of size,
|
61
|
+
# since all FIDE IDs are greater than 100000 whereas ICU IDs are much smaller.
|
62
|
+
#
|
61
63
|
# If the ranking numbers are missing from the file or inconsistent (e.g. player A is ranked above player B
|
62
|
-
# but has less points
|
64
|
+
# but has less points) they are recalculated as a side effect of the parse.
|
63
65
|
#
|
64
66
|
# daffy.rank # => 1
|
65
67
|
# minnie.rank # => 2
|
@@ -87,8 +89,8 @@ module ICU
|
|
87
89
|
# By default, local (ICU) IDs and ratings are used for the serialization, but both methods accept an option that
|
88
90
|
# causes FIDE IDs and ratings to be used instead:
|
89
91
|
#
|
90
|
-
# krause = parser.serialize(tournament, :
|
91
|
-
# krause = tournament.serialize('Krause', :
|
92
|
+
# krause = parser.serialize(tournament, :fide => true)
|
93
|
+
# krause = tournament.serialize('Krause', :fide => true)
|
92
94
|
#
|
93
95
|
# The following lists Krause data identification numbers, their description and, where available, their corresponding
|
94
96
|
# attributes in an ICU::Tournament instance.
|
@@ -316,7 +318,7 @@ module ICU
|
|
316
318
|
@tournament.start = @data
|
317
319
|
@start_set = true
|
318
320
|
end
|
319
|
-
|
321
|
+
|
320
322
|
# Split text into lines but also pad the player lines (those beginning "001 ").
|
321
323
|
def get_lines(text)
|
322
324
|
lines = text.split(/\s*\n/)
|
@@ -352,17 +354,15 @@ module ICU
|
|
352
354
|
:dob => @data[65, 10],
|
353
355
|
:rank => @data[81, 4],
|
354
356
|
}
|
355
|
-
|
356
|
-
#
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
opt.delete(rtype) if opt.has_key?(rtype) && opt[rtype].to_i == 0
|
365
|
-
|
357
|
+
|
358
|
+
# Ratings are assumed to be local unless otherwise specified.
|
359
|
+
rating = @data[44, 4].to_i
|
360
|
+
opt[arg[:fide] ? :fide_rating : :rating] = rating if rating > 0 && rating < 4000
|
361
|
+
|
362
|
+
# IDs can be determined to be FIDE or ICU on the basis of their size.
|
363
|
+
id = @data[53, 11].to_i
|
364
|
+
opt[id >= 100000 ? :fide_id : :id] = id if id > 0
|
365
|
+
|
366
366
|
# Options to remove other bad data.
|
367
367
|
opt.delete(:fed) if arg[:fed].to_s == 'ignore'
|
368
368
|
opt.delete(:fed) if arg[:fed].to_s == 'skip' && !ICU::Federation.find(opt[:fed])
|
@@ -414,7 +414,7 @@ module ICU
|
|
414
414
|
end
|
415
415
|
result.points
|
416
416
|
end
|
417
|
-
|
417
|
+
|
418
418
|
# See if byes can be used to make the sum of scores match the declared total.
|
419
419
|
def fix_sum(player, full_byes, half_byes, total, sum)
|
420
420
|
return false unless total > sum
|
@@ -131,9 +131,9 @@ KRAUSE
|
|
131
131
|
|
132
132
|
it "should have players and their details" do
|
133
133
|
@t.should have(3).players
|
134
|
-
check_player(1, 'Minerva', 'Mouse', :gender => 'F', :rating => 1900, :fed => 'USA', :
|
135
|
-
check_player(2, 'Daffy', 'Duck', :gender => 'M', :rating => 2200, :fed => 'IRL', :
|
136
|
-
check_player(3, 'Mickey', 'Mouse', :gender => 'M', :rating => 2600, :fed => 'USA', :
|
134
|
+
check_player(1, 'Minerva', 'Mouse', :gender => 'F', :rating => 1900, :fed => 'USA', :fide_id => 1234567, :dob => '1928-05-15', :rank => 2)
|
135
|
+
check_player(2, 'Daffy', 'Duck', :gender => 'M', :rating => 2200, :fed => 'IRL', :fide_id => 7654321, :dob => '1937-04-17', :rank => 1, :title => 'IM')
|
136
|
+
check_player(3, 'Mickey', 'Mouse', :gender => 'M', :rating => 2600, :fed => 'USA', :fide_id => 1726354, :dob => '1928-05-15', :rank => 3, :title => 'GM')
|
137
137
|
end
|
138
138
|
|
139
139
|
it "should have correct results for each player" do
|
@@ -193,13 +193,13 @@ KRAUSE
|
|
193
193
|
end
|
194
194
|
|
195
195
|
it "should serialize back to the original if the input is fully canonicalised" do
|
196
|
-
t = @p.parse!(@krause)
|
197
|
-
ICU::Tournament::Krause.new.serialize(t).should == @krause
|
196
|
+
t = @p.parse!(@krause, :fide => true)
|
197
|
+
ICU::Tournament::Krause.new.serialize(t, :fide => true).should == @krause
|
198
198
|
end
|
199
199
|
|
200
200
|
it "should serialize using the convenience method of the tournament object" do
|
201
|
-
t = @p.parse!(@krause)
|
202
|
-
t.serialize('Krause').should == @krause
|
201
|
+
t = @p.parse!(@krause, :fide => true)
|
202
|
+
t.serialize('Krause', :fide => true).should == @krause
|
203
203
|
end
|
204
204
|
|
205
205
|
it "should serialize only if :fide option is used correctly" do
|
@@ -208,16 +208,10 @@ KRAUSE
|
|
208
208
|
t.serialize('Krause').should_not == @krause
|
209
209
|
end
|
210
210
|
|
211
|
-
it "should not serialize
|
211
|
+
it "should not serialize correctly if mixed rating types are used" do
|
212
212
|
t = @p.parse!(@krause, :fide => true)
|
213
213
|
t.serialize('Krause').should_not == @krause
|
214
214
|
end
|
215
|
-
|
216
|
-
it "should serialize coorectly if FIDE IDs are used consistently" do
|
217
|
-
t = @p.parse!(@krause, :fide => true)
|
218
|
-
t.serialize('Krause', :fide => true).should == @krause
|
219
|
-
end
|
220
|
-
|
221
215
|
end
|
222
216
|
|
223
217
|
context "auto-ranking" do
|
@@ -240,30 +234,39 @@ KRAUSE
|
|
240
234
|
end
|
241
235
|
end
|
242
236
|
|
243
|
-
context "local or FIDE IDs" do
|
237
|
+
context "local or FIDE ratings and IDs" do
|
244
238
|
before(:each) do
|
245
239
|
@krause = <<KRAUSE
|
246
240
|
012 Las Vegas National Open
|
247
241
|
042 2008-06-07
|
248
242
|
001 1 w Ui Laighleis,Gearoidin 1985 IRL 2501171 1964-06-10 1.0 2 b 0 3 w 1
|
249
|
-
001 2 m m Orr,Mark 2258 IRL
|
243
|
+
001 2 m m Orr,Mark 2258 IRL 1350 1955-11-09 2.0 1 w 1 3 b 1
|
250
244
|
001 3 m g Bologan,Viktor 2663 MDA 1971-01-01 0.0 1 b 0 2 w 0
|
251
245
|
KRAUSE
|
252
246
|
@p = ICU::Tournament::Krause.new
|
253
247
|
end
|
254
248
|
|
255
|
-
it "should have local
|
249
|
+
it "should have local ratings by default" do
|
256
250
|
@t = @p.parse(@krause)
|
257
|
-
check_player(1, 'Gearoidin', 'Ui Laighleis', :
|
258
|
-
check_player(2, 'Mark', 'Orr', :
|
259
|
-
check_player(3, 'Viktor', 'Bologan', :
|
251
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :rating => 1985, :fide_rating => nil)
|
252
|
+
check_player(2, 'Mark', 'Orr', :rating => 2258, :fide_rating => nil)
|
253
|
+
check_player(3, 'Viktor', 'Bologan', :rating => 2663, :fide_rating => nil)
|
260
254
|
end
|
261
255
|
|
262
|
-
it "should have FIDE
|
256
|
+
it "should have FIDE ratings if option is specified" do
|
257
|
+
@t = @p.parse(@krause, :fide => true)
|
258
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :rating => nil, :fide_rating => 1985)
|
259
|
+
check_player(2, 'Mark', 'Orr', :rating => nil, :fide_rating => 2258)
|
260
|
+
check_player(3, 'Viktor', 'Bologan', :rating => nil, :fide_rating => 2663)
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should auto-detect FIDE or ICU IDs based on size, the option has no effect" do
|
264
|
+
@t = @p.parse(@krause)
|
265
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :id => nil, :fide_id => 2501171)
|
266
|
+
check_player(2, 'Mark', 'Orr', :id => 1350, :fide_id => nil)
|
263
267
|
@t = @p.parse(@krause, :fide => true)
|
264
|
-
check_player(1, 'Gearoidin', 'Ui Laighleis', :
|
265
|
-
check_player(2, 'Mark', 'Orr', :
|
266
|
-
check_player(3, 'Viktor', 'Bologan', :fide => nil, :id => nil)
|
268
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :id => nil, :fide_id => 2501171)
|
269
|
+
check_player(2, 'Mark', 'Orr', :id => 1350, :fide_id => nil)
|
267
270
|
end
|
268
271
|
end
|
269
272
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 1.3.
|
8
|
+
- 8
|
9
|
+
version: 1.3.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark Orr
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-03-
|
17
|
+
date: 2011-03-06 00:00:00 +00:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|