icu_tournament 1.3.1 → 1.3.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/lib/icu_tournament/player.rb +4 -4
- data/lib/icu_tournament/tournament_krause.rb +5 -5
- data/lib/icu_tournament/tournament_sp.rb +2 -2
- data/lib/icu_tournament/tournament_spx.rb +10 -10
- data/lib/icu_tournament/version.rb +1 -1
- data/spec/player_spec.rb +7 -7
- data/spec/tournament_krause_spec.rb +7 -7
- data/spec/tournament_sp_spec.rb +1 -1
- data/spec/tournament_spx_spec.rb +7 -7
- metadata +2 -2
|
@@ -84,7 +84,7 @@ module ICU
|
|
|
84
84
|
class Player
|
|
85
85
|
extend ICU::Accessor
|
|
86
86
|
attr_integer :num
|
|
87
|
-
attr_positive_or_nil :id, :
|
|
87
|
+
attr_positive_or_nil :id, :fide_id, :rating, :fide_rating, :rank
|
|
88
88
|
attr_date_or_nil :dob
|
|
89
89
|
|
|
90
90
|
attr_reader :results, :first_name, :last_name, :fed, :title, :gender
|
|
@@ -94,7 +94,7 @@ module ICU
|
|
|
94
94
|
self.first_name = first_name
|
|
95
95
|
self.last_name = last_name
|
|
96
96
|
self.num = num
|
|
97
|
-
[:id, :
|
|
97
|
+
[:id, :fide_id, :fed, :title, :rating, :fide_rating, :rank, :dob, :gender].each do |atr|
|
|
98
98
|
self.send("#{atr}=", opt[atr]) unless opt[atr].nil?
|
|
99
99
|
end
|
|
100
100
|
@results = []
|
|
@@ -192,7 +192,7 @@ module ICU
|
|
|
192
192
|
def eql?(other)
|
|
193
193
|
return true if equal?(other)
|
|
194
194
|
return false unless self == other
|
|
195
|
-
[:id, :
|
|
195
|
+
[:id, :fide_id, :rating, :fide_rating, :title, :gender].each do |m|
|
|
196
196
|
return false if self.send(m) && other.send(m) && self.send(m) != other.send(m)
|
|
197
197
|
end
|
|
198
198
|
true
|
|
@@ -201,7 +201,7 @@ module ICU
|
|
|
201
201
|
# Merge in some of the details of another player.
|
|
202
202
|
def merge(other)
|
|
203
203
|
raise "cannot merge two players that are not equal" unless self == other
|
|
204
|
-
[:id, :
|
|
204
|
+
[:id, :fide_id, :rating, :fide_rating, :title, :fed, :gender].each do |m|
|
|
205
205
|
self.send("#{m}=", other.send(m)) unless self.send(m)
|
|
206
206
|
end
|
|
207
207
|
end
|
|
@@ -51,7 +51,7 @@ module ICU
|
|
|
51
51
|
# By default, ID numbers and ratings in the input are interpreted as local IDs and ratings. If, instead, they should be interpreted as
|
|
52
52
|
# FIDE IDs and ratings, add the following option:
|
|
53
53
|
#
|
|
54
|
-
# tournament = parser.parse_file('tournament.tab', :
|
|
54
|
+
# tournament = parser.parse_file('tournament.tab', :fide_id => true)
|
|
55
55
|
# daffy = tournament.player(2)
|
|
56
56
|
# daffy.id # => nil
|
|
57
57
|
# daffy.fide # => 7654321
|
|
@@ -87,8 +87,8 @@ module ICU
|
|
|
87
87
|
# By default, local (ICU) IDs and ratings are used for the serialization, but both methods accept an option that
|
|
88
88
|
# causes FIDE IDs and ratings to be used instead:
|
|
89
89
|
#
|
|
90
|
-
# krause = parser.serialize(tournament, :
|
|
91
|
-
# krause = tournament.serialize('Krause', :
|
|
90
|
+
# krause = parser.serialize(tournament, :fide_id => true)
|
|
91
|
+
# krause = tournament.serialize('Krause', :fide_id => true)
|
|
92
92
|
#
|
|
93
93
|
# The following lists Krause data identification numbers, their description and, where available, their corresponding
|
|
94
94
|
# attributes in an ICU::Tournament instance.
|
|
@@ -270,7 +270,7 @@ module ICU
|
|
|
270
270
|
:dob => @data[65, 10],
|
|
271
271
|
:rank => @data[81, 4],
|
|
272
272
|
}
|
|
273
|
-
opt[arg[:fide] ? :
|
|
273
|
+
opt[arg[:fide] ? :fide_id : :id] = @data[53, 11]
|
|
274
274
|
opt[arg[:fide] ? :fide_rating : :rating] = @data[44, 4]
|
|
275
275
|
player = Player.new(nam.first, nam.last, num, opt)
|
|
276
276
|
@tournament.add_player(player)
|
|
@@ -342,7 +342,7 @@ module ICU
|
|
|
342
342
|
krause << sprintf(' %-33s', "#{@last_name},#{@first_name}")
|
|
343
343
|
krause << sprintf(' %4s', arg[:fide] ? @fide_rating : @rating)
|
|
344
344
|
krause << sprintf(' %3s', @fed)
|
|
345
|
-
krause << sprintf(' %11s', arg[:fide] ? @
|
|
345
|
+
krause << sprintf(' %11s', arg[:fide] ? @fide_id : @id)
|
|
346
346
|
krause << sprintf(' %10s', @dob)
|
|
347
347
|
krause << sprintf(' %4.1f', points)
|
|
348
348
|
krause << sprintf(' %4s', @rank)
|
|
@@ -68,7 +68,7 @@ module ICU
|
|
|
68
68
|
:first_name => "FIRSTNAME",
|
|
69
69
|
:gender => "SEX",
|
|
70
70
|
:id => "LOC_ID",
|
|
71
|
-
:
|
|
71
|
+
:fide_id => "INTL_ID",
|
|
72
72
|
:last_name => "SURNAME",
|
|
73
73
|
:num => "ID",
|
|
74
74
|
:rank => "ORDER",
|
|
@@ -249,7 +249,7 @@ module ICU
|
|
|
249
249
|
when :fed then val = val && val.match(/^[A-Z]{3}$/i) ? val.upcase : nil
|
|
250
250
|
when :gender then val = val.to_i > 0 ? %w(M F)[val.to_i-1] : nil
|
|
251
251
|
when :id then val = val.to_i > 0 ? val : nil
|
|
252
|
-
when :
|
|
252
|
+
when :fide_id then val = val.to_i > 0 ? val : nil
|
|
253
253
|
when :rating then val = val.to_i > 0 ? val : nil
|
|
254
254
|
when :fide_rating then val = val.to_i > 0 ? val : nil
|
|
255
255
|
when :title then val = val.to_i > 0 ? %w(GM WGM IM WIM FM WFM)[val.to_i-1] : nil
|
|
@@ -78,7 +78,7 @@ module ICU
|
|
|
78
78
|
#
|
|
79
79
|
# Or supply whatever columns you want, for example:
|
|
80
80
|
#
|
|
81
|
-
# tournament.serialize('SPExport', :columns => [:
|
|
81
|
+
# tournament.serialize('SPExport', :columns => [:fide_id, :fide_rating])
|
|
82
82
|
#
|
|
83
83
|
# Note that the column order in the serialised string is the same as it is in the SwissPerfect application.
|
|
84
84
|
# The order of column names in the _columns_ hash has no effect.
|
|
@@ -189,7 +189,7 @@ module ICU
|
|
|
189
189
|
columns = Array.new
|
|
190
190
|
columns.push(:num)
|
|
191
191
|
columns.push(:name)
|
|
192
|
-
[:fed, :
|
|
192
|
+
[:fed, :fide_id, :id, :fide_rating, :rating, :title, :points].each { |x| columns.push(x) if optional.include?(x) }
|
|
193
193
|
|
|
194
194
|
# SwissPerfect headers for each column (other than the rounds, which are treated separately).
|
|
195
195
|
header = Hash.new
|
|
@@ -198,7 +198,7 @@ module ICU
|
|
|
198
198
|
when :num then "No"
|
|
199
199
|
when :name then "Name"
|
|
200
200
|
when :fed then "Feder"
|
|
201
|
-
when :
|
|
201
|
+
when :fide_id then "Intl Id"
|
|
202
202
|
when :id then "Loc Id"
|
|
203
203
|
when :fide_rating then "Rtg"
|
|
204
204
|
when :rating then "Loc"
|
|
@@ -259,13 +259,13 @@ module ICU
|
|
|
259
259
|
key = case item
|
|
260
260
|
when 'No' then :num
|
|
261
261
|
when 'Name' then :name
|
|
262
|
-
when 'Total' then :total
|
|
263
|
-
when 'Loc Id' then :id
|
|
264
|
-
when 'Intl Id' then :fide
|
|
265
|
-
when 'Title' then :title
|
|
266
262
|
when 'Feder' then :fed
|
|
267
|
-
when '
|
|
263
|
+
when 'Intl Id' then :fide_id
|
|
264
|
+
when 'Loc Id' then :id
|
|
268
265
|
when 'Rtg' then :fide_rating
|
|
266
|
+
when 'Loc' then :rating
|
|
267
|
+
when 'Title' then :title
|
|
268
|
+
when 'Total' then :points
|
|
269
269
|
when /^[1-9]\d*$/
|
|
270
270
|
round = item.to_i
|
|
271
271
|
@rounds = round if round > @rounds
|
|
@@ -287,7 +287,7 @@ module ICU
|
|
|
287
287
|
num = items[@header[:num]]
|
|
288
288
|
name = Name.new(items[@header[:name]])
|
|
289
289
|
opt = Hash.new
|
|
290
|
-
[:fed, :title, :id, :
|
|
290
|
+
[:fed, :title, :id, :fide_id, :rating, :fide_rating].each do |key|
|
|
291
291
|
if @header[key]
|
|
292
292
|
val = items[@header[key]]
|
|
293
293
|
opt[key] = val unless val.nil? || val == ''
|
|
@@ -299,7 +299,7 @@ module ICU
|
|
|
299
299
|
@tournament.add_player(player)
|
|
300
300
|
|
|
301
301
|
# Save the results for later processing.
|
|
302
|
-
points = items[@header[:
|
|
302
|
+
points = items[@header[:points]] if @header[:points]
|
|
303
303
|
points = nil if points == ''
|
|
304
304
|
points = points.to_f if points
|
|
305
305
|
total = 0.0;
|
data/spec/player_spec.rb
CHANGED
|
@@ -77,13 +77,13 @@ module ICU
|
|
|
77
77
|
|
|
78
78
|
context "FIDE ID" do
|
|
79
79
|
it "defaults to nil" do
|
|
80
|
-
Player.new('Stephen', 'Brady', 1).
|
|
80
|
+
Player.new('Stephen', 'Brady', 1).fide_id.should be_nil
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
it "should be a positive integer" do
|
|
84
|
-
Player.new('Stephen', 'Brady', 1, :
|
|
85
|
-
Player.new('Gary', 'Kasparov', 2, :
|
|
86
|
-
lambda { Player.new('Mark', 'Orr', 3, :
|
|
84
|
+
Player.new('Stephen', 'Brady', 1, :fide_id => 2500124).fide_id.should == 2500124
|
|
85
|
+
Player.new('Gary', 'Kasparov', 2, :fide_id => '4100018').fide_id.should == 4100018
|
|
86
|
+
lambda { Player.new('Mark', 'Orr', 3, :fide_id => ' 0 ') }.should raise_error(/invalid positive integer/)
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
@@ -238,8 +238,8 @@ module ICU
|
|
|
238
238
|
context "merge" do
|
|
239
239
|
before(:each) do
|
|
240
240
|
@p1 = Player.new('Mark', 'Orr', 1, :id => 1350)
|
|
241
|
-
@p2 = Player.new('Mark', 'Orr', 2, :rating => 2100, :title => 'IM', :fed => 'IRL', :
|
|
242
|
-
@p3 = Player.new('Gearoidin', 'Ui Laighleis', 3, :rating => 1600, :title => 'WIM', :fed => 'IRL', :
|
|
241
|
+
@p2 = Player.new('Mark', 'Orr', 2, :rating => 2100, :title => 'IM', :fed => 'IRL', :fide_id => 2500035)
|
|
242
|
+
@p3 = Player.new('Gearoidin', 'Ui Laighleis', 3, :rating => 1600, :title => 'WIM', :fed => 'IRL', :fide_id => 2501171)
|
|
243
243
|
end
|
|
244
244
|
|
|
245
245
|
it "takes on the ID, rating, title and fed of the other player but not the player number" do
|
|
@@ -249,7 +249,7 @@ module ICU
|
|
|
249
249
|
@p1.rating.should == 2100
|
|
250
250
|
@p1.title.should == 'IM'
|
|
251
251
|
@p1.fed.should == 'IRL'
|
|
252
|
-
@p1.
|
|
252
|
+
@p1.fide_id.should == 2500035
|
|
253
253
|
end
|
|
254
254
|
|
|
255
255
|
it "should have a kind of symmetry" do
|
|
@@ -8,7 +8,7 @@ module ICU
|
|
|
8
8
|
p = @t.player(num)
|
|
9
9
|
p.first_name.should == first
|
|
10
10
|
p.last_name.should == last
|
|
11
|
-
[:gender, :title, :rating, :fide_rating, :fed, :id, :
|
|
11
|
+
[:gender, :title, :rating, :fide_rating, :fed, :id, :fide_id, :dob, :rank].each do |key|
|
|
12
12
|
p.send(key).should == other[key] if other.has_key?(key)
|
|
13
13
|
end
|
|
14
14
|
end
|
|
@@ -71,9 +71,9 @@ KRAUSE
|
|
|
71
71
|
|
|
72
72
|
it "should have players and their details" do
|
|
73
73
|
@t.should have(3).players
|
|
74
|
-
check_player(1, 'Gearoidin', 'Ui Laighleis', :gender => 'F', :fide_rating => 1985, :fed => 'IRL', :
|
|
75
|
-
check_player(2, 'Mark', 'Orr', :gender => 'M', :fide_rating => 2258, :fed => 'IRL', :
|
|
76
|
-
check_player(3, 'Viktor', 'Bologan', :gender => 'M', :fide_rating => 2663, :fed => 'MDA', :
|
|
74
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :gender => 'F', :fide_rating => 1985, :fed => 'IRL', :fide_id => 2501171, :dob => '1964-06-10', :rank => 2)
|
|
75
|
+
check_player(2, 'Mark', 'Orr', :gender => 'M', :fide_rating => 2258, :fed => 'IRL', :fide_id => 2500035, :dob => '1955-11-09', :rank => 1, :title => 'IM')
|
|
76
|
+
check_player(3, 'Viktor', 'Bologan', :gender => 'M', :fide_rating => 2663, :fed => 'MDA', :fide_id => 13900048, :dob => '1971-01-01', :rank => 3, :title => 'GM')
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
it "should have correct results for each player" do
|
|
@@ -254,9 +254,9 @@ KRAUSE
|
|
|
254
254
|
|
|
255
255
|
it "should have local IDs by default" do
|
|
256
256
|
@t = @p.parse(@krause)
|
|
257
|
-
check_player(1, 'Gearoidin', 'Ui Laighleis', :id => 2501171, :
|
|
258
|
-
check_player(2, 'Mark', 'Orr', :id => 2500035, :
|
|
259
|
-
check_player(3, 'Viktor', 'Bologan', :id => nil, :
|
|
257
|
+
check_player(1, 'Gearoidin', 'Ui Laighleis', :id => 2501171, :fide_id => nil)
|
|
258
|
+
check_player(2, 'Mark', 'Orr', :id => 2500035, :fide_id => nil)
|
|
259
|
+
check_player(3, 'Viktor', 'Bologan', :id => nil, :fide_id => nil)
|
|
260
260
|
end
|
|
261
261
|
|
|
262
262
|
it "should have FIDE IDs if option is used" do
|
data/spec/tournament_sp_spec.rb
CHANGED
|
@@ -11,7 +11,7 @@ module ICU
|
|
|
11
11
|
class Player
|
|
12
12
|
def sp_signature
|
|
13
13
|
[
|
|
14
|
-
name, id,
|
|
14
|
+
name, id, fide_id, rating, fide_rating, points, rank,
|
|
15
15
|
results.map{ |r| r.round }.join(''),
|
|
16
16
|
results.map{ |r| r.score }.join(''),
|
|
17
17
|
results.map{ |r| r.colour || "-" }.join(''),
|
data/spec/tournament_spx_spec.rb
CHANGED
|
@@ -70,9 +70,9 @@ EXPORT
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
it "players should have correct FIDE IDs" do
|
|
73
|
-
@t.player(1).
|
|
74
|
-
@t.player(2).
|
|
75
|
-
@t.player(3).
|
|
73
|
+
@t.player(1).fide_id.should be_nil
|
|
74
|
+
@t.player(2).fide_id.should == 1234568
|
|
75
|
+
@t.player(3).fide_id.should == 1234567
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
it "players should have correct ICU ratings" do
|
|
@@ -125,7 +125,7 @@ EXPORT
|
|
|
125
125
|
@t = ICU::Tournament.new(name, start)
|
|
126
126
|
@t.add_player(ICU::Player.new('Bobby', 'Fischer', 10))
|
|
127
127
|
@t.add_player(ICU::Player.new('Garry', 'Kasparov', 20))
|
|
128
|
-
@t.add_player(ICU::Player.new('Mark', 'Orr', 30, :id => 1350, :
|
|
128
|
+
@t.add_player(ICU::Player.new('Mark', 'Orr', 30, :id => 1350, :fide_id => 2500035, :fed => 'IRL', :rating => 2200, :fide_rating => 2250))
|
|
129
129
|
@t.add_result(ICU::Result.new(1, 10, 'D', :opponent => 30))
|
|
130
130
|
@t.add_result(ICU::Result.new(2, 20, 'W', :opponent => 30))
|
|
131
131
|
@t.add_result(ICU::Result.new(3, 20, 'L', :opponent => 10))
|
|
@@ -156,11 +156,11 @@ EXPORT
|
|
|
156
156
|
@x.should match(/^No\s*Name\s*Loc Id\s*Total\s*1\s*2\s*3\s*/)
|
|
157
157
|
@x = @t.serialize('SPExport', :columns => [:points, :id, :fed])
|
|
158
158
|
@x.should match(/^No\s*Name\s*Feder\s*Loc Id\s*Total\s*1\s*2\s*3\s*/)
|
|
159
|
-
@x = @t.serialize('SPExport', :columns => [:points, :id, :fed, :fed, :rubbish, :
|
|
159
|
+
@x = @t.serialize('SPExport', :columns => [:points, :id, :fed, :fed, :rubbish, :fide_id])
|
|
160
160
|
@x.should match(/^No\s*Name\s*Feder\s*Intl Id\s*Loc Id\s*Total\s*1\s*2\s*3\s*/)
|
|
161
|
-
@x = @t.serialize('SPExport', :columns => [:fed, :
|
|
161
|
+
@x = @t.serialize('SPExport', :columns => [:fed, :fide_id, :points, :id, :rating])
|
|
162
162
|
@x.should match(/^No\s*Name\s*Feder\s*Intl Id\s*Loc Id\s*Loc\s*Total\s*1\s*2\s*3\s*/)
|
|
163
|
-
@x = @t.serialize('SPExport', :columns => [:fed, :
|
|
163
|
+
@x = @t.serialize('SPExport', :columns => [:fed, :fide_id, :fide_rating, :points, :id, :rating])
|
|
164
164
|
@x.should match(/^No\s*Name\s*Feder\s*Intl Id\s*Loc Id\s*Rtg\s*Loc\s*Total\s*1\s*2\s*3\s*/)
|
|
165
165
|
@x.should match(/3\s*Orr,\s*Mark\s*IRL\s*2500035\s*1350\s*2250\s*2200\s*0.5\s*1:D\s*2:L\s*:\s*/)
|
|
166
166
|
end
|