icu_tournament 1.9.3 → 1.10.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a381a56e723de1cfb4dd03d9b48d30bec0392949664a0ec79fb8436c293e0eef
4
+ data.tar.gz: c3e6cb085ec3023bed84e7b9a1a081b542572150e63ee17a8c518cb37c36a46c
5
+ SHA512:
6
+ metadata.gz: 79f24f02e5cc402a54b88dc3843666277ea05ce0713b3ed3130294518a04579693a8779fe0a5e38b8890ee69b604d79b4864ab830226db40812812b3d15d3d37
7
+ data.tar.gz: 6d3db507492a9cccbdab10be94fc1fbd8de9b2a3f436c3746443c053eeec1b9157797fb23ee3dc3b4765110ce427b49d5a5e4ca53101f723828517af454063c5
data/README.rdoc CHANGED
@@ -4,7 +4,7 @@ For reading or writing files of chess tournament data. Original project name on
4
4
 
5
5
  == Install
6
6
 
7
- For Ruby 1.9.2, 1.9.3, 2.0.0 (version 1.1.2 was the last compatible with Ruby 1.8.7).
7
+ For Ruby 1.9.2, 1.9.3, 2.0.0, 2.2.1 (version 1.1.2 was the last compatible with Ruby 1.8.7).
8
8
 
9
9
  gem install icu_tournament
10
10
 
@@ -74,3 +74,7 @@ On error, the _parse_ method returns _nil_ and an error message can be retrieved
74
74
  == Author
75
75
 
76
76
  Mark Orr, rating officer for the Irish Chess Union (ICU[http://icu.ie]).
77
+
78
+ == Current Maintainer
79
+
80
+ David Murray, rating officer for the Irish Chess Union. Contact ratings@icu.ie.
@@ -119,7 +119,6 @@ module ICU
119
119
  # Canonicalise and set the first name(s).
120
120
  def first_name=(first_name)
121
121
  name = Name.new(first_name, 'Last')
122
- raise "invalid first name" unless name.first.length > 0
123
122
  @first_name = name.first
124
123
  end
125
124
 
@@ -235,4 +234,4 @@ module ICU
235
234
  end
236
235
  end
237
236
  end
238
- end
237
+ end
@@ -129,7 +129,7 @@ module ICU
129
129
  def opponent=(opponent)
130
130
  @opponent = case opponent
131
131
  when nil then nil
132
- when Fixnum then opponent
132
+ when Integer then opponent
133
133
  when /^\s*$/ then nil
134
134
  else opponent.to_i
135
135
  end
@@ -198,4 +198,4 @@ module ICU
198
198
  true
199
199
  end
200
200
  end
201
- end
201
+ end
@@ -379,6 +379,44 @@ module ICU
379
379
  self
380
380
  end
381
381
 
382
+ # Make an educated guess at round dates.
383
+ # If only one round, it is on the start date
384
+ # If start and end date match, all rounds are on that day
385
+ # If there are exactly two rounds, round 1 on the start day, round 2 on the finish day
386
+ # If there are between n and 2n rounds in n consecutive days, then
387
+ # start with one round a day, switch to two rounds a day when that's needed
388
+ # If there are 7 rounds Saturday - Sunday > 1 week: two on the first 3 weekend dates, one on the final Sunday
389
+ # This covers most Irish tournaments. Returns an empty array if it could not guess
390
+ def guess_round_dates
391
+ return [@start] if rounds == 1
392
+ return [] if @finish.nil?
393
+
394
+ round_dates = []
395
+ start_date = ::Date.parse(@start)
396
+ finish_date = ::Date.parse(@finish)
397
+ ndays = (finish_date - start_date).to_i + 1
398
+ if ndays == 1
399
+ rounds.times { round_dates << start }
400
+ elsif rounds == 2
401
+ round_dates << start
402
+ round_dates << finish
403
+ elsif ndays <= rounds and rounds <= ndays * 2
404
+ double_rounds = rounds - ndays
405
+ (0...ndays).each do |r|
406
+ round_dates << start_date + r
407
+ if r >= (ndays - double_rounds)
408
+ round_dates << start_date + r
409
+ end
410
+ end
411
+ elsif rounds == 7 and start_date.wday == 6 and finish_date.wday == 0 and ndays > 7
412
+ 2.times { round_dates << start_date }
413
+ 2.times { round_dates << start_date + 1 }
414
+ 2.times { round_dates << finish_date - 1 }
415
+ round_dates << finish_date
416
+ end
417
+ return round_dates
418
+ end
419
+
382
420
  # Is a tournament invalid? Either returns false (if it's valid) or an error message.
383
421
  # Has the same _rerank_ option as validate!.
384
422
  def invalid(options={})
@@ -336,7 +336,7 @@ module ICU
336
336
  if old_player.id
337
337
  old_player.merge(opponent)
338
338
  old_result = @player.find_result(@round)
339
- raise "missing result for player (#{@player.name}) in round #{@round}" unless old_result
339
+ raise "result for player (#{@player.name}) in round #{@round} does not match previous result for opponent (#{old_player.name})" unless old_result
340
340
  raise "mismatched results for player (#{old_player.name}): #{result.inspect} #{old_result.inspect}" unless result.eql?(old_result)
341
341
  else
342
342
  old_result = old_player.find_result(@round)
@@ -326,9 +326,13 @@ module ICU
326
326
  krause << "\n"
327
327
  end
328
328
  rounds = t.last_round
329
- if t.round_dates.size == rounds && rounds > 0
329
+ round_dates = t.round_dates
330
+ if round_dates.empty?
331
+ round_dates = t.guess_round_dates.map { |d| d.to_s }
332
+ end
333
+ if round_dates.size == rounds && rounds > 0
330
334
  krause << "132 #{' ' * 85}"
331
- t.round_dates.each{ |d| krause << d.sub(/^../, ' ') }
335
+ round_dates.each{ |d| krause << d.sub(/^../, ' ') }
332
336
  krause << "\n"
333
337
  end
334
338
  t.players.each{ |p| krause << p.to_krause(rounds, arg) }
@@ -433,11 +437,18 @@ module ICU
433
437
  full_byes << round
434
438
  return 0.0
435
439
  end
436
- data = "#{data} -" if data.match(/^\d+ (w|b|-)$/)
437
- raise "invalid result '#{data}'" unless data.match(/^(0{1,4}|[1-9]\d{0,3}) (w|b|-) (1|0|=|\+|-)$/)
438
- opponent = $1.to_i
439
- colour = $2
440
- score = $3
440
+ data = "#{data} -" if data.match(/^(\d+)? (w|b|-)$/)
441
+ if data.match(/^(0{1,4}|[1-9]\d{0,3}) (w|b|-) (1|0|=|\+|-)$/)
442
+ opponent = $1.to_i
443
+ colour = $2
444
+ score = $3
445
+ elsif data.match(/- (1|0|=|\+|-)$/)
446
+ opponent = 0
447
+ colour = "-"
448
+ score = $1
449
+ else
450
+ raise "invalid result '#{data}'"
451
+ end
441
452
  options = Hash.new
442
453
  options[:opponent] = opponent unless opponent == 0
443
454
  options[:colour] = colour unless colour == '-'
@@ -459,7 +470,7 @@ module ICU
459
470
  return false unless total <= sum + full_byes.size * 1.0 + half_byes.size * 0.5
460
471
  full_byes.each_index do |i|
461
472
  bye = full_byes[i]
462
- if bye.class == Fixnum
473
+ if bye.class == Integer
463
474
  # Round number - create a half-point bye in that round.
464
475
  result = Result.new(bye, player, '=')
465
476
  @results << ['none', player, "extra bye for player #{player} in round #{bye}", result]
@@ -72,7 +72,7 @@ module ICU
72
72
  names.each do |name|
73
73
  attr_accessor(name) do |val|
74
74
  tmp = val.to_i
75
- raise "invalid integer (#{val}) for #{name}" unless val.is_a?(Fixnum) || (val.is_a?(::String) && val.include?(tmp.to_s))
75
+ raise "invalid integer (#{val}) for #{name}" unless val.is_a?(Integer) || (val.is_a?(::String) && val.include?(tmp.to_s))
76
76
  tmp
77
77
  end
78
78
  end
@@ -83,7 +83,7 @@ module ICU
83
83
  attr_accessor(name) do |val|
84
84
  tmp = case val
85
85
  when nil then nil
86
- when Fixnum then val
86
+ when Integer then val
87
87
  when /^\s*$/ then nil
88
88
  else val.to_i
89
89
  end
@@ -108,7 +108,7 @@ module ICU
108
108
  attr_accessor(name) do |val|
109
109
  tmp = case val
110
110
  when nil then nil
111
- when Fixnum then val
111
+ when Integer then val
112
112
  when /^\s*$/ then nil
113
113
  else val.to_i
114
114
  end
@@ -166,4 +166,4 @@ module ICU
166
166
  end
167
167
  end
168
168
  end
169
- end
169
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ICU
4
4
  class Tournament
5
- VERSION = "1.9.3"
5
+ VERSION = "1.10.0"
6
6
  end
7
7
  end
data/spec/player_spec.rb CHANGED
@@ -4,213 +4,211 @@ module ICU
4
4
  describe Player do
5
5
  context "a typical player" do
6
6
  it "should have a name, number and some results" do
7
- lambda do
7
+ expect do
8
8
  player = Player.new('Mark', 'Orr', 1)
9
9
  player.add_result(Result.new(1, 1, 'W', :opponent => 37, :score => 'W', :colour => 'W'))
10
10
  player.add_result(Result.new(2, 1, 'W', :opponent => 13, :score => 'W', :colour => 'B'))
11
11
  player.add_result(Result.new(3, 1, 'W', :opponent => 7, :score => 'D', :colour => 'W'))
12
- end.should_not raise_error
12
+ end.not_to raise_error
13
13
  end
14
14
  end
15
15
 
16
16
  context "names" do
17
17
  it "should be specified in constructor" do
18
18
  p = Player.new('Mark', 'Orr', 1)
19
- p.first_name.should == 'Mark'
20
- p.last_name.should == 'Orr'
21
- p.original_name.should == 'Orr, Mark'
19
+ expect(p.first_name).to eq('Mark')
20
+ expect(p.last_name).to eq('Orr')
21
+ expect(p.original_name).to eq('Orr, Mark')
22
22
  end
23
23
 
24
24
  it "should be resettable via accessors" do
25
25
  p = Player.new('Mark', 'Orr', 1)
26
26
  p.first_name= 'Gary'
27
27
  p.last_name= 'Kasparov'
28
- p.first_name.should == 'Gary'
29
- p.last_name.should == 'Kasparov'
30
- p.original_name.should == 'Orr, Mark'
28
+ expect(p.first_name).to eq('Gary')
29
+ expect(p.last_name).to eq('Kasparov')
30
+ expect(p.original_name).to eq('Orr, Mark')
31
31
  end
32
32
 
33
33
  it "should not contain invalid characters" do
34
- lambda { Player.new('12', 'Orr', 1) }.should raise_error(/invalid first name/)
35
- lambda { Player.new('Mark', '*!', 1) }.should raise_error(/invalid last name/)
34
+ expect { Player.new('Mark', '*!', 1) }.to raise_error(/invalid last name/)
36
35
  end
37
36
 
38
- it "should not have empty last name or first name" do
39
- lambda { Player.new('Mark', '', 1) }.should raise_error(/invalid last name/)
40
- lambda { Player.new('', 'Orr', 1) }.should raise_error(/invalid first name/)
37
+ it "should not have empty last name" do
38
+ expect { Player.new('Mark', '', 1) }.to raise_error(/invalid last name/)
41
39
  end
42
40
 
43
41
  it "both names can be returned together" do
44
42
  p = Player.new('Mark', 'Orr', 1)
45
- p.name.should == 'Orr, Mark'
43
+ expect(p.name).to eq('Orr, Mark')
46
44
  end
47
45
 
48
46
  it "names should be automatically canonicalised" do
49
47
  p = Player.new(' maRk J l ', ' ORR', 1)
50
- p.name.should == 'Orr, Mark J. L.'
48
+ expect(p.name).to eq('Orr, Mark J. L.')
51
49
  p.first_name = 'z'
52
- p.name.should == 'Orr, Z.'
50
+ expect(p.name).to eq('Orr, Z.')
53
51
  p.last_name = " o meFiSto "
54
- p.name.should == "O'Mefisto, Z."
55
- p.original_name.should == 'ORR, maRk J l'
52
+ expect(p.name).to eq("O'Mefisto, Z.")
53
+ expect(p.original_name).to eq('ORR, maRk J l')
56
54
  end
57
55
 
58
56
  it "the original name is resetable" do
59
57
  p = Player.new('Mark', 'Orr', 1)
60
- p.name.should == 'Orr, Mark'
61
- p.original_name.should == 'Orr, Mark'
58
+ expect(p.name).to eq('Orr, Mark')
59
+ expect(p.original_name).to eq('Orr, Mark')
62
60
  p.original_name = 'Cronin, April'
63
- p.name.should == 'Orr, Mark'
64
- p.original_name.should == 'Cronin, April'
61
+ expect(p.name).to eq('Orr, Mark')
62
+ expect(p.original_name).to eq('Cronin, April')
65
63
  end
66
64
  end
67
65
 
68
66
  context "number" do
69
67
  it "should just be an integer" do
70
- Player.new('Mark', 'Orr', 3).num.should == 3
71
- Player.new('Mark', 'Orr', -7).num.should == -7
72
- Player.new('Mark', 'Orr', ' -4 ').num.should == -4
73
- Player.new('Mark', 'Orr', '0').num.should == 0
74
- lambda { Player.new('Mark', 'Orr', ' ') }.should raise_error(/invalid integer/)
68
+ expect(Player.new('Mark', 'Orr', 3).num).to eq(3)
69
+ expect(Player.new('Mark', 'Orr', -7).num).to eq(-7)
70
+ expect(Player.new('Mark', 'Orr', ' -4 ').num).to eq(-4)
71
+ expect(Player.new('Mark', 'Orr', '0').num).to eq(0)
72
+ expect { Player.new('Mark', 'Orr', ' ') }.to raise_error(/invalid integer/)
75
73
  end
76
74
  end
77
75
 
78
76
  context "local ID" do
79
77
  it "defaults to nil" do
80
- Player.new('Mark', 'Orr', 3).id.should be_nil
78
+ expect(Player.new('Mark', 'Orr', 3).id).to be_nil
81
79
  end
82
80
 
83
81
  it "should be a positive integer" do
84
- Player.new('Mark', 'Orr', 3, :id => 1350).id.should == 1350
85
- Player.new('Stephen', 'Brady', 4, :id => ' 90 ').id.should == 90
86
- lambda { Player.new('Mark', 'Orr', 3, :id => ' 0 ') }.should raise_error(/invalid positive integer/)
82
+ expect(Player.new('Mark', 'Orr', 3, :id => 1350).id).to eq(1350)
83
+ expect(Player.new('Stephen', 'Brady', 4, :id => ' 90 ').id).to eq(90)
84
+ expect { Player.new('Mark', 'Orr', 3, :id => ' 0 ') }.to raise_error(/invalid positive integer/)
87
85
  end
88
86
  end
89
87
 
90
88
  context "FIDE ID" do
91
89
  it "defaults to nil" do
92
- Player.new('Stephen', 'Brady', 1).fide_id.should be_nil
90
+ expect(Player.new('Stephen', 'Brady', 1).fide_id).to be_nil
93
91
  end
94
92
 
95
93
  it "should be a positive integer" do
96
- Player.new('Stephen', 'Brady', 1, :fide_id => 2500124).fide_id.should == 2500124
97
- Player.new('Gary', 'Kasparov', 2, :fide_id => '4100018').fide_id.should == 4100018
98
- lambda { Player.new('Mark', 'Orr', 3, :fide_id => ' 0 ') }.should raise_error(/invalid positive integer/)
94
+ expect(Player.new('Stephen', 'Brady', 1, :fide_id => 2500124).fide_id).to eq(2500124)
95
+ expect(Player.new('Gary', 'Kasparov', 2, :fide_id => '4100018').fide_id).to eq(4100018)
96
+ expect { Player.new('Mark', 'Orr', 3, :fide_id => ' 0 ') }.to raise_error(/invalid positive integer/)
99
97
  end
100
98
  end
101
99
 
102
100
  context "federation" do
103
101
  it "defaults to nil" do
104
- Player.new('Mark', 'Orr', 3).fed.should be_nil
105
- Player.new('Mark', 'Orr', 3, :fed => ' ').fed.should be_nil
102
+ expect(Player.new('Mark', 'Orr', 3).fed).to be_nil
103
+ expect(Player.new('Mark', 'Orr', 3, :fed => ' ').fed).to be_nil
106
104
  end
107
105
 
108
106
  it "should consist of at least three letters" do
109
- Player.new('Gary', 'Kasparov', 1, :fed => 'RUS').fed.should == 'RUS'
110
- Player.new('Mark', 'Orr', 3, :fed => ' Ireland ').fed.should == 'IRL'
111
- lambda { Player.new('Danny', 'Kopec', 3, :fed => 'US') }.should raise_error(/invalid federation/)
107
+ expect(Player.new('Gary', 'Kasparov', 1, :fed => 'RUS').fed).to eq('RUS')
108
+ expect(Player.new('Mark', 'Orr', 3, :fed => ' Ireland ').fed).to eq('IRL')
109
+ expect { Player.new('Danny', 'Kopec', 3, :fed => 'US') }.to raise_error(/invalid federation/)
112
110
  end
113
111
 
114
112
  it "should correct common code errors" do
115
- Player.new('Ricardo', 'Calvo', 1, :fed => 'SPA').fed.should == 'ESP'
116
- Player.new('Mark', 'Orr', 2, :fed => 'Icu').fed.should == 'IRL'
117
- Player.new('Florin', 'Gheorghiu', 3, :fed => 'ROM').fed.should == 'ROU'
113
+ expect(Player.new('Ricardo', 'Calvo', 1, :fed => 'SPA').fed).to eq('ESP')
114
+ expect(Player.new('Mark', 'Orr', 2, :fed => 'Icu').fed).to eq('IRL')
115
+ expect(Player.new('Florin', 'Gheorghiu', 3, :fed => 'ROM').fed).to eq('ROU')
118
116
  end
119
117
  end
120
118
 
121
119
  context "title" do
122
120
  it "defaults to nil" do
123
- Player.new('Mark', 'Orr', 3).title.should be_nil
124
- Player.new('Mark', 'Orr', 3, :title => ' ').title.should be_nil
121
+ expect(Player.new('Mark', 'Orr', 3).title).to be_nil
122
+ expect(Player.new('Mark', 'Orr', 3, :title => ' ').title).to be_nil
125
123
  end
126
124
 
127
125
  it "should be one of national, candidate, FIDE, international or grand master" do
128
- Player.new('Gary', 'Kasparov', 1, :title => 'GM').title.should == 'GM'
129
- Player.new('Mark', 'Orr', 2, :title => ' im ').title.should == 'IM'
130
- Player.new('Mark', 'Quinn', 2, :title => 'm').title.should == 'IM'
131
- Player.new('Pia', 'Cramling', 3, :title => ' wg ').title.should == 'WGM'
132
- Player.new('Philip', 'Short', 4, :title => 'F ').title.should == 'FM'
133
- Player.new('Gearoidin', 'Ui Laighleis', 5, :title => 'wc').title.should == 'WCM'
134
- Player.new('Gearoidin', 'Ui Laighleis', 7, :title => 'wm').title.should == 'WIM'
135
- Player.new('Eamon', 'Keogh', 6, :title => 'nm').title.should == 'NM'
136
- lambda { Player.new('Mark', 'Orr', 3, :title => 'Dr') }.should raise_error(/invalid chess title/)
126
+ expect(Player.new('Gary', 'Kasparov', 1, :title => 'GM').title).to eq('GM')
127
+ expect(Player.new('Mark', 'Orr', 2, :title => ' im ').title).to eq('IM')
128
+ expect(Player.new('Mark', 'Quinn', 2, :title => 'm').title).to eq('IM')
129
+ expect(Player.new('Pia', 'Cramling', 3, :title => ' wg ').title).to eq('WGM')
130
+ expect(Player.new('Philip', 'Short', 4, :title => 'F ').title).to eq('FM')
131
+ expect(Player.new('Gearoidin', 'Ui Laighleis', 5, :title => 'wc').title).to eq('WCM')
132
+ expect(Player.new('Gearoidin', 'Ui Laighleis', 7, :title => 'wm').title).to eq('WIM')
133
+ expect(Player.new('Eamon', 'Keogh', 6, :title => 'nm').title).to eq('NM')
134
+ expect { Player.new('Mark', 'Orr', 3, :title => 'Dr') }.to raise_error(/invalid chess title/)
137
135
  end
138
136
  end
139
137
 
140
138
  context "rating" do
141
139
  it "defaults to nil" do
142
- Player.new('Mark', 'Orr', 3).rating.should be_nil
143
- Player.new('Mark', 'Orr', 3, :rating => ' ').rating.should be_nil
140
+ expect(Player.new('Mark', 'Orr', 3).rating).to be_nil
141
+ expect(Player.new('Mark', 'Orr', 3, :rating => ' ').rating).to be_nil
144
142
  end
145
143
 
146
144
  it "should be a positive integer" do
147
- Player.new('Gary', 'Kasparov', 1, :rating => 2800).rating.should == 2800
148
- Player.new('Mark', 'Orr', 2, :rating => ' 2100 ').rating.should == 2100
149
- lambda { Player.new('Mark', 'Orr', 3, :rating => -2100) }.should raise_error(/invalid positive integer/)
150
- lambda { Player.new('Mark', 'Orr', 3, :rating => 'IM') }.should raise_error(/invalid positive integer/)
145
+ expect(Player.new('Gary', 'Kasparov', 1, :rating => 2800).rating).to eq(2800)
146
+ expect(Player.new('Mark', 'Orr', 2, :rating => ' 2100 ').rating).to eq(2100)
147
+ expect { Player.new('Mark', 'Orr', 3, :rating => -2100) }.to raise_error(/invalid positive integer/)
148
+ expect { Player.new('Mark', 'Orr', 3, :rating => 'IM') }.to raise_error(/invalid positive integer/)
151
149
  end
152
150
  end
153
151
 
154
152
  context "FIDE rating" do
155
153
  it "defaults to nil" do
156
- Player.new('Mark', 'Orr', 3).fide_rating.should be_nil
157
- Player.new('Mark', 'Orr', 3, :fide_rating => ' ').fide_rating.should be_nil
154
+ expect(Player.new('Mark', 'Orr', 3).fide_rating).to be_nil
155
+ expect(Player.new('Mark', 'Orr', 3, :fide_rating => ' ').fide_rating).to be_nil
158
156
  end
159
157
 
160
158
  it "should be a positive integer" do
161
- Player.new('Gary', 'Kasparov', 1, :fide_rating => 2800).fide_rating.should == 2800
162
- Player.new('Mark', 'Orr', 2, :fide_rating => ' 2200 ').fide_rating.should == 2200
163
- lambda { Player.new('Mark', 'Orr', 3, :fide_rating => -2100) }.should raise_error(/invalid positive integer/)
164
- lambda { Player.new('Mark', 'Orr', 3, :fide_rating => 'IM') }.should raise_error(/invalid positive integer/)
159
+ expect(Player.new('Gary', 'Kasparov', 1, :fide_rating => 2800).fide_rating).to eq(2800)
160
+ expect(Player.new('Mark', 'Orr', 2, :fide_rating => ' 2200 ').fide_rating).to eq(2200)
161
+ expect { Player.new('Mark', 'Orr', 3, :fide_rating => -2100) }.to raise_error(/invalid positive integer/)
162
+ expect { Player.new('Mark', 'Orr', 3, :fide_rating => 'IM') }.to raise_error(/invalid positive integer/)
165
163
  end
166
164
  end
167
165
 
168
166
  context "rank" do
169
167
  it "defaults to nil" do
170
- Player.new('Mark', 'Orr', 3).rank.should be_nil
168
+ expect(Player.new('Mark', 'Orr', 3).rank).to be_nil
171
169
  end
172
170
 
173
171
  it "should be a positive integer" do
174
- Player.new('Mark', 'Orr', 3, :rank => 1).rank.should == 1
175
- Player.new('Gary', 'Kasparov', 4, :rank => ' 29 ').rank.should == 29
176
- lambda { Player.new('Mark', 'Orr', 3, :rank => 0) }.should raise_error(/invalid positive integer/)
177
- lambda { Player.new('Mark', 'Orr', 3, :rank => ' -1 ') }.should raise_error(/invalid positive integer/)
172
+ expect(Player.new('Mark', 'Orr', 3, :rank => 1).rank).to eq(1)
173
+ expect(Player.new('Gary', 'Kasparov', 4, :rank => ' 29 ').rank).to eq(29)
174
+ expect { Player.new('Mark', 'Orr', 3, :rank => 0) }.to raise_error(/invalid positive integer/)
175
+ expect { Player.new('Mark', 'Orr', 3, :rank => ' -1 ') }.to raise_error(/invalid positive integer/)
178
176
  end
179
177
  end
180
178
 
181
179
  context "date of birth" do
182
180
  it "defaults to nil" do
183
- Player.new('Mark', 'Orr', 3).dob.should be_nil
184
- Player.new('Mark', 'Orr', 3, :dob => ' ').dob.should be_nil
181
+ expect(Player.new('Mark', 'Orr', 3).dob).to be_nil
182
+ expect(Player.new('Mark', 'Orr', 3, :dob => ' ').dob).to be_nil
185
183
  end
186
184
 
187
185
  it "should be a yyyy-mm-dd date" do
188
- Player.new('Mark', 'Orr', 3, :dob => '1955-11-09').dob.should == '1955-11-09'
189
- lambda { Player.new('Mark', 'Orr', 3, :dob => 'X') }.should raise_error(/invalid.*dob/)
186
+ expect(Player.new('Mark', 'Orr', 3, :dob => '1955-11-09').dob).to eq('1955-11-09')
187
+ expect { Player.new('Mark', 'Orr', 3, :dob => 'X') }.to raise_error(/invalid.*dob/)
190
188
  end
191
189
  end
192
190
 
193
191
  context "gender" do
194
192
  it "defaults to nil" do
195
- Player.new('Mark', 'Orr', 3).gender.should be_nil
196
- Player.new('Mark', 'Orr', 3, :gender => ' ').gender.should be_nil
193
+ expect(Player.new('Mark', 'Orr', 3).gender).to be_nil
194
+ expect(Player.new('Mark', 'Orr', 3, :gender => ' ').gender).to be_nil
197
195
  end
198
196
 
199
197
  it "should be either M or F" do
200
- Player.new('Mark', 'Orr', 3, :gender => 'male').gender.should == 'M'
201
- Player.new('April', 'Cronin', 3, :gender => 'woman').gender.should == 'F'
198
+ expect(Player.new('Mark', 'Orr', 3, :gender => 'male').gender).to eq('M')
199
+ expect(Player.new('April', 'Cronin', 3, :gender => 'woman').gender).to eq('F')
202
200
  end
203
201
 
204
202
  it "should raise an exception if the gender is not specified properly" do
205
- lambda { Player.new('Mark', 'Orr', 3, :gender => 'X') }.should raise_error(/invalid gender/)
203
+ expect { Player.new('Mark', 'Orr', 3, :gender => 'X') }.to raise_error(/invalid gender/)
206
204
  end
207
205
  end
208
206
 
209
207
  context "results and points" do
210
208
  it "should initialise to an empty array" do
211
209
  results = Player.new('Mark', 'Orr', 3).results
212
- results.should be_instance_of Array
213
- results.size.should == 0
210
+ expect(results).to be_instance_of Array
211
+ expect(results.size).to eq(0)
214
212
  end
215
213
 
216
214
  it "can be added to" do
@@ -219,21 +217,21 @@ module ICU
219
217
  player.add_result(Result.new(2, 3, 'D', :opponent => 2))
220
218
  player.add_result(Result.new(3, 3, 'L', :opponent => 4))
221
219
  results = player.results
222
- results.should be_instance_of Array
223
- results.size.should == 3
224
- player.points.should == 1.5
220
+ expect(results).to be_instance_of Array
221
+ expect(results.size).to eq(3)
222
+ expect(player.points).to eq(1.5)
225
223
  end
226
224
 
227
225
  it "should not allow mismatched player numbers" do
228
226
  player = Player.new('Mark', 'Orr', 3)
229
- lambda { player.add_result(Result.new(1, 4, 'W', :opponent => 1)) }.should raise_error(/player number .* matched/)
227
+ expect { player.add_result(Result.new(1, 4, 'W', :opponent => 1)) }.to raise_error(/player number .* matched/)
230
228
  end
231
229
 
232
230
  it "should enforce unique round numbers" do
233
231
  player = Player.new('Mark', 'Orr', 3)
234
232
  player.add_result(Result.new(1, 3, 'W', :opponent => 1))
235
233
  player.add_result(Result.new(2, 3, 'D', :opponent => 2))
236
- lambda { player.add_result(Result.new(2, 3, 'L', :opponent => 4)) }.should raise_error(/does not match/)
234
+ expect { player.add_result(Result.new(2, 3, 'L', :opponent => 4)) }.to raise_error(/does not match/)
237
235
  end
238
236
  end
239
237
 
@@ -246,10 +244,10 @@ module ICU
246
244
  end
247
245
 
248
246
  it "should find results by round number" do
249
- @p.find_result(1).opponent.should == 37
250
- @p.find_result(2).opponent.should == 13
251
- @p.find_result(3).opponent.should == 7
252
- @p.find_result(4).should be_nil
247
+ expect(@p.find_result(1).opponent).to eq(37)
248
+ expect(@p.find_result(2).opponent).to eq(13)
249
+ expect(@p.find_result(3).opponent).to eq(7)
250
+ expect(@p.find_result(4)).to be_nil
253
251
  end
254
252
  end
255
253
 
@@ -263,9 +261,9 @@ module ICU
263
261
 
264
262
  it "should find and remove a result by round number" do
265
263
  result = @p.remove_result(1)
266
- result.inspect.should == "R1P1O37WWR"
267
- @p.results.size.should == 2
268
- @p.results.map(&:round).join("|").should == "2|3"
264
+ expect(result.inspect).to eq("R1P1O37WWR")
265
+ expect(@p.results.size).to eq(2)
266
+ expect(@p.results.map(&:round).join("|")).to eq("2|3")
269
267
  end
270
268
  end
271
269
 
@@ -278,12 +276,12 @@ module ICU
278
276
 
279
277
  it "takes on the ID, rating, title and fed of the other player but not the player number" do
280
278
  @p1.merge(@p2)
281
- @p1.num.should == 1
282
- @p1.id.should == 1350
283
- @p1.rating.should == 2100
284
- @p1.title.should == 'IM'
285
- @p1.fed.should == 'IRL'
286
- @p1.fide_id.should == 2500035
279
+ expect(@p1.num).to eq(1)
280
+ expect(@p1.id).to eq(1350)
281
+ expect(@p1.rating).to eq(2100)
282
+ expect(@p1.title).to eq('IM')
283
+ expect(@p1.fed).to eq('IRL')
284
+ expect(@p1.fide_id).to eq(2500035)
287
285
  end
288
286
 
289
287
  it "should have a kind of symmetry" do
@@ -293,7 +291,7 @@ module ICU
293
291
  end
294
292
 
295
293
  it "cannot be done with unequal objects" do
296
- lambda { @p1.merge(@p3) }.should raise_error(/cannot merge.*not equal/)
294
+ expect { @p1.merge(@p3) }.to raise_error(/cannot merge.*not equal/)
297
295
  end
298
296
  end
299
297
 
@@ -306,13 +304,13 @@ module ICU
306
304
 
307
305
  it "should renumber successfully if the map has the relevant player numbers" do
308
306
  map = { 10 => 1, 20 => 2, 30 => 3 }
309
- @p.renumber(map).num.should == 1
310
- @p.results.map{ |r| r.opponent }.sort.join('').should == '23'
307
+ expect(@p.renumber(map).num).to eq(1)
308
+ expect(@p.results.map{ |r| r.opponent }.sort.join('')).to eq('23')
311
309
  end
312
310
 
313
311
  it "should raise exception if a player number is not in the map" do
314
- lambda { @p.renumber({ 100 => 1, 20 => 2, 30 => 3 }) }.should raise_error(/player.*10.*not found/)
315
- lambda { @p.renumber({ 10 => 1, 200 => 2, 30 => 3 }) }.should raise_error(/opponent.*20.*not found/)
312
+ expect { @p.renumber({ 100 => 1, 20 => 2, 30 => 3 }) }.to raise_error(/player.*10.*not found/)
313
+ expect { @p.renumber({ 10 => 1, 200 => 2, 30 => 3 }) }.to raise_error(/opponent.*20.*not found/)
316
314
  end
317
315
  end
318
316
 
@@ -326,21 +324,21 @@ module ICU
326
324
  end
327
325
 
328
326
  it "any player is equal to itself" do
329
- (@mark1 == @mark1).should be_true
327
+ expect(@mark1 == @mark1).to be_truthy
330
328
  end
331
329
 
332
330
  it "two players are equal if their names are the same and their federations do not conflict" do
333
- (@mark1 == @mark2).should be_true
331
+ expect(@mark1 == @mark2).to be_truthy
334
332
  end
335
333
 
336
334
  it "two players cannot be equal if they have different names" do
337
- (@mark1 == @mark4).should be_false
338
- (@mark1 == @john1).should be_false
335
+ expect(@mark1 == @mark4).to be_falsey
336
+ expect(@mark1 == @john1).to be_falsey
339
337
  end
340
338
 
341
339
  it "two players cannot be equal if they have different federations" do
342
- (@mark2 == @mark3).should be_false
343
- (@mark1 == @mark3).should be_true
340
+ expect(@mark2 == @mark3).to be_falsey
341
+ expect(@mark1 == @mark3).to be_truthy
344
342
  end
345
343
  end
346
344
 
@@ -354,21 +352,21 @@ module ICU
354
352
  end
355
353
 
356
354
  it "any player is equal to itself" do
357
- @mark1.eql?(@mark1).should be_true
358
- @mark1.eql?(@mark1).should be_true
355
+ expect(@mark1.eql?(@mark1)).to be_truthy
356
+ expect(@mark1.eql?(@mark1)).to be_truthy
359
357
  end
360
358
 
361
359
  it "two players are equal as long as their ID, rating and title do not conflict" do
362
- @mark1.eql?(@mark2).should be_true
363
- @mark3.eql?(@mark4).should be_true
364
- @mark4.eql?(@mark5).should be_true
360
+ expect(@mark1.eql?(@mark2)).to be_truthy
361
+ expect(@mark3.eql?(@mark4)).to be_truthy
362
+ expect(@mark4.eql?(@mark5)).to be_truthy
365
363
  end
366
364
 
367
365
  it "two players are not equal if their ID, rating or title conflict" do
368
- @mark2.eql?(@mark3).should be_false
369
- @mark2.eql?(@mark4).should be_false
370
- @mark2.eql?(@mark5).should be_false
366
+ expect(@mark2.eql?(@mark3)).to be_falsey
367
+ expect(@mark2.eql?(@mark4)).to be_falsey
368
+ expect(@mark2.eql?(@mark5)).to be_falsey
371
369
  end
372
370
  end
373
371
  end
374
- end
372
+ end