icu_tournament 1.3.4 → 1.3.5

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.
@@ -3,13 +3,28 @@ module ICU
3
3
  # A player in a tournament must have a first name, a last name and a number
4
4
  # which is unique in the tournament but otherwise arbitary.
5
5
  #
6
- # bobby = ICU::Player.new('robert j', 'fischer', 17)
6
+ # bobby = ICU::Player.new(' robert j ', 'fischer', 17)
7
7
  #
8
8
  # Names are automatically cannonicalised (tidied up).
9
9
  #
10
10
  # bobby.first_name # => 'Robert J.'
11
11
  # bobby.last_name # => 'Fischer'
12
12
  #
13
+ # But the original untidied (other than white space cleanup and the addition of a comma
14
+ # to separate last name from first name) is avaiable from the _original_name_ method:
15
+ #
16
+ # bobby.original_name # => "fischer, robert j"
17
+ #
18
+ # This original name, set via the constructor, is unchanged by subsequent calls to
19
+ # the setter methods _first_name_ or _last_name.
20
+ #
21
+ # booby.first_name = 'Robert James'
22
+ # bobby.original_name # => "fischer, robert j"
23
+ #
24
+ # You can reset _orignal_name_, if necessary, and this does not affect either _first_name_ or _last_name_.
25
+ #
26
+ # bobby.original_name = "Fischer, Robert James"
27
+ #
13
28
  # In addition, players have a number of optional attributes which can be specified
14
29
  # via setters or in constructor hash options: _id_ (local or national ID), _fide_
15
30
  # (FIDE ID), _fed_ (federation), _title_, _rating_ (local rating), _fide_rating,
@@ -87,12 +102,13 @@ module ICU
87
102
  attr_positive_or_nil :id, :fide_id, :rating, :fide_rating, :rank
88
103
  attr_date_or_nil :dob
89
104
 
90
- attr_reader :results, :first_name, :last_name, :fed, :title, :gender
105
+ attr_reader :results, :first_name, :last_name, :original_name, :fed, :title, :gender
91
106
 
92
107
  # Constructor. Must supply both names and a unique number for the tournament.
93
108
  def initialize(first_name, last_name, num, opt={})
94
109
  self.first_name = first_name
95
110
  self.last_name = last_name
111
+ @original_name = Name.new(first_name, last_name).original
96
112
  self.num = num
97
113
  [:id, :fide_id, :fed, :title, :rating, :fide_rating, :rank, :dob, :gender].each do |atr|
98
114
  self.send("#{atr}=", opt[atr]) unless opt[atr].nil?
@@ -114,6 +130,11 @@ module ICU
114
130
  @last_name = name.last
115
131
  end
116
132
 
133
+ # Reset the original name.
134
+ def original_name=(original_name)
135
+ @original_name = ICU::Util.to_utf8(original_name)
136
+ end
137
+
117
138
  # Return the full name, last name first.
118
139
  def name
119
140
  "#{last_name}, #{first_name}"
@@ -261,7 +261,9 @@ module ICU
261
261
 
262
262
  # Player details.
263
263
  num = @data[0, 4]
264
- nam = Name.new(@data[10, 32])
264
+ nam = @data[10, 32]
265
+ nams = nam.split(/,/)
266
+ raise "missing comma in name #{nam.trim}" unless nams.size > 1
265
267
  opt =
266
268
  {
267
269
  :gender => @data[5, 1],
@@ -272,7 +274,7 @@ module ICU
272
274
  }
273
275
  opt[arg[:fide] ? :fide_id : :id] = @data[53, 11]
274
276
  opt[arg[:fide] ? :fide_rating : :rating] = @data[44, 4]
275
- player = Player.new(nam.first, nam.last, num, opt)
277
+ player = Player.new(nams.last, nams.first, num, opt)
276
278
  @tournament.add_player(player)
277
279
 
278
280
  # Results.
@@ -296,6 +296,7 @@ module ICU
296
296
 
297
297
  # Create the player and add it to the tournament.
298
298
  player = Player.new(name.first, name.last, num, opt)
299
+ player.original_name = name.original
299
300
  @tournament.add_player(player)
300
301
 
301
302
  # Save the results for later processing.
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ICU
4
4
  class Tournament
5
- VERSION = "1.3.4"
5
+ VERSION = "1.3.5"
6
6
  end
7
7
  end
data/spec/player_spec.rb CHANGED
@@ -18,6 +18,7 @@ module ICU
18
18
  p = Player.new('Mark', 'Orr', 1)
19
19
  p.first_name.should == 'Mark'
20
20
  p.last_name.should == 'Orr'
21
+ p.original_name.should == 'Orr, Mark'
21
22
  end
22
23
 
23
24
  it "should be resettable via accessors" do
@@ -26,6 +27,7 @@ module ICU
26
27
  p.last_name= 'Kasparov'
27
28
  p.first_name.should == 'Gary'
28
29
  p.last_name.should == 'Kasparov'
30
+ p.original_name.should == 'Orr, Mark'
29
31
  end
30
32
 
31
33
  it "should not contain invalid characters" do
@@ -33,7 +35,7 @@ module ICU
33
35
  lambda { Player.new('Mark', '*!', 1) }.should raise_error(/invalid last name/)
34
36
  end
35
37
 
36
- it "should not have empty last name" do
38
+ it "should not have empty last name or first name" do
37
39
  lambda { Player.new('Mark', '', 1) }.should raise_error(/invalid last name/)
38
40
  lambda { Player.new('', 'Orr', 1) }.should raise_error(/invalid first name/)
39
41
  end
@@ -50,6 +52,16 @@ module ICU
50
52
  p.name.should == 'Orr, Z.'
51
53
  p.last_name = " o meFiSto "
52
54
  p.name.should == "O'Mefisto, Z."
55
+ p.original_name.should == 'ORR, maRk J l'
56
+ end
57
+
58
+ it "the original name is resetable" do
59
+ p = Player.new('Mark', 'Orr', 1)
60
+ p.name.should == 'Orr, Mark'
61
+ p.original_name.should == 'Orr, Mark'
62
+ p.original_name = 'Cronin, April'
63
+ p.name.should == 'Orr, Mark'
64
+ p.original_name.should == 'Cronin, April'
53
65
  end
54
66
  end
55
67
 
@@ -237,6 +237,12 @@ CSV
237
237
  check_player(2, 'Gary', 'Kasparov', 1, 0, 0.5, :fide_rating => 2800, :fed => 'RUS', :title => 'GM')
238
238
  check_player(3, 'Mark', 'Orr', 1, 0, 0.5, :fide_rating => 2100, :fed => 'IRL', :title => 'IM')
239
239
  end
240
+
241
+ it "should still have original names" do
242
+ @t.player(1).original_name.should == "ui Laighleis, gearoidin"
243
+ @t.player(2).original_name.should == "kasparov, gary"
244
+ @t.player(3).original_name.should == "Orr, Mark"
245
+ end
240
246
  end
241
247
 
242
248
  context "#parse" do
@@ -441,6 +441,29 @@ KRAUSE
441
441
  @t.name.should == "Läs Végas National Opeñ"
442
442
  end
443
443
  end
444
+
445
+ context "preserving original names" do
446
+ before(:all) do
447
+ @k = <<KRAUSE
448
+ 012 Las Vegas National Open
449
+ 042 2008-06-07
450
+ 001 1 w ui laighleis,GEAROIDIN 1.0 2 b 0 3 w 1
451
+ 001 2 m m ORR, mark 2.0 1 w 1 3 b 1
452
+ 001 3 m g BOLOGAN,VIKTOR 0.0 1 b 0 2 w 0
453
+ KRAUSE
454
+ @p = ICU::Tournament::Krause.new
455
+ end
456
+
457
+ it "should canonicalise names but also preserve originals" do
458
+ @t = @p.parse!(@k)
459
+ check_player(1, 'Gearoidin', 'Ui Laighleis')
460
+ check_player(2, 'Mark', 'Orr')
461
+ check_player(3, 'Viktor', 'Bologan')
462
+ @t.player(1).original_name.should == "ui laighleis, GEAROIDIN"
463
+ @t.player(2).original_name.should == "ORR, mark"
464
+ @t.player(3).original_name.should == "BOLOGAN, VIKTOR"
465
+ end
466
+ end
444
467
 
445
468
  context "parsing files" do
446
469
  before(:each) do
@@ -44,6 +44,11 @@ module ICU
44
44
  @t.player(56).sp_signature.should == "McDonnell, Cathal|||498||0.0|54|1|L|-|F" # last
45
45
  end
46
46
 
47
+ it "original names should be preserved" do
48
+ @t.player(2).original_name.should == "MULLOOLY, neil m"
49
+ @t.player(4).original_name.should == "Gallagher, Mark"
50
+ end
51
+
47
52
  it "should have consistent ranks" do
48
53
  @t.players.map{ |p| p.rank }.sort.join('').should == (1..@t.players.size).to_a.join('')
49
54
  end
@@ -186,7 +186,7 @@ EXPORT
186
186
  end
187
187
  end
188
188
 
189
- context "invisible bonuses extreme example" do
189
+ context "extreme invisible bonuses example" do
190
190
  before(:each) do
191
191
  @x = <<EXPORT
192
192
  No Name Total 1 2 3
@@ -206,6 +206,32 @@ EXPORT
206
206
  end
207
207
  end
208
208
 
209
+ context "preservation of original names" do
210
+ before(:each) do
211
+ @x = <<EXPORT
212
+ No Name Total 1 2 3
213
+
214
+ 1 daffy duck 2.0 0: 3:W 2:D
215
+ 2 MOUSE, minerva 1.5 3:D 0: 1:D
216
+ 3 mouse, MICKEY 1.0 2:D 1:L 0:D
217
+ EXPORT
218
+ @p = ICU::Tournament::SPExport.new
219
+ @t = @p.parse!(@x, :name => "Mickey Mouse Masters", :start => "2012-01-01")
220
+ end
221
+
222
+ it "players should have canonicalised names" do
223
+ @t.player(1).name.should == 'Duck, Daffy'
224
+ @t.player(2).name.should == 'Mouse, Minerva'
225
+ @t.player(3).name.should == 'Mouse, Mickey'
226
+ end
227
+
228
+ it "players should have original names" do
229
+ @t.player(1).original_name.should == 'daffy duck'
230
+ @t.player(2).original_name.should == 'MOUSE, minerva'
231
+ @t.player(3).original_name.should == 'mouse, MICKEY'
232
+ end
233
+ end
234
+
209
235
  context "odds and ends" do
210
236
  before(:each) do
211
237
  @x = <<EXPORT
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 3
8
- - 4
9
- version: 1.3.4
8
+ - 5
9
+ version: 1.3.5
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-02-12 00:00:00 +00:00
17
+ date: 2011-02-19 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -58,8 +58,8 @@ dependencies:
58
58
  segments:
59
59
  - 0
60
60
  - 1
61
- - 1
62
- version: 0.1.1
61
+ - 3
62
+ version: 0.1.3
63
63
  type: :runtime
64
64
  version_requirements: *id003
65
65
  - !ruby/object:Gem::Dependency