sciolyff 0.4.1 → 0.5.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5ade4d7bbd00e33e30bfeafffb0b30532e8210280ca6eae2b7720010fff532f
4
- data.tar.gz: 6955635e1bb01bb523c21633e4610583b4cabfc0349c9d1e9475ad9b5fae7307
3
+ metadata.gz: 1df5842018efc9a43a221327ed3ab70da6b1f7a995a341351f5328445943106c
4
+ data.tar.gz: 9111707bd2043e8ce33c164913c33b3773f14de12ca281732eb9f53a44b23d99
5
5
  SHA512:
6
- metadata.gz: b308389be5811e1fa13c93d08111d639f3c50dc64c1aed146e103aa048a02512c69558220b6e4e5f68bf10ef18c02a5995cde3715ade6932228cf24a05258c4a
7
- data.tar.gz: f38152c0da8db0f4bcd7e0bd19fd473e11a92b6ff6cc09a4a6f21cfbfca1b7ee141e66fc568e9c6c517f0446702cad459eddbfd40cb0e0edc2f9165a3f28a4d9
6
+ metadata.gz: e18866a3c37f6cc04783f70021f2ce0ffbd139765f0b2be376c3719b2dac3c16a8239fa2235e21ae64c6c9732dc4cff8754e4cba310a1eec26bfbcc800fd8ae1
7
+ data.tar.gz: 07421bcb80b5605bdcd7e96151f1080ff595ffb39136dbd2331016a4a7aecbaf0d8ee7354182dac014922bdf7e26e3b29af52b270204b1aa8a13f5a58c441540
data/bin/sciolyff CHANGED
@@ -6,7 +6,7 @@ require 'yaml'
6
6
  require 'sciolyff'
7
7
 
8
8
  opts = Optimist.options do
9
- version 'sciolyff 0.4.1'
9
+ version 'sciolyff 0.5.1'
10
10
  banner <<~STRING
11
11
  Checks if a given file is in the Scioly File Format
12
12
 
@@ -21,7 +21,8 @@ module SciolyFF
21
21
 
22
22
  def test_each_placing_does_not_have_extra_info
23
23
  @placings.select { |p| p.instance_of? Hash }.each do |placing|
24
- info = Set.new %i[event team participated disqualified place]
24
+ info = Set.new %i[event team participated disqualified exempt place]
25
+ info << :unknown
25
26
  assert Set.new(placing.keys).subset? info
26
27
  end
27
28
  end
@@ -62,10 +63,37 @@ module SciolyFF
62
63
  end
63
64
  end
64
65
 
66
+ def test_each_placing_has_valid_exempt
67
+ @placings.select { |p| p.instance_of? Hash }.each do |placing|
68
+ if placing.key? :exempt
69
+ assert_includes [true, false], placing[:exempt]
70
+ end
71
+ end
72
+ end
73
+
74
+ def test_each_placing_has_valid_unknown
75
+ @placings.select { |p| p.instance_of? Hash }.each do |placing|
76
+ if placing.key? :unknown
77
+ assert_includes [true, false], placing[:unknown]
78
+ if placing[:unknown]
79
+ skip unless SciolyFF.rep[:Events].instance_of? Array
80
+
81
+ event = SciolyFF.rep[:Events].find do |e|
82
+ e[:name] == placing[:event]
83
+ end
84
+ assert event[:trial] || event[:trialed] || event.nil?,
85
+ 'Cannot have unknown place for non-trial/trialed event'
86
+ end
87
+ end
88
+ end
89
+ end
90
+
65
91
  def test_each_placing_has_valid_place
66
92
  @placings.select { |p| p.instance_of? Hash }.each do |placing|
67
93
  next if placing[:disqualified] == true ||
68
- placing.key?(:participated)
94
+ placing.key?(:participated) ||
95
+ placing[:unknown] == true ||
96
+ placing[:exempt] == true
69
97
 
70
98
  assert_instance_of Integer, placing[:place]
71
99
  max_place = @placings.count do |p|
@@ -21,7 +21,7 @@ module SciolyFF
21
21
 
22
22
  def test_each_score_does_not_have_extra_info
23
23
  @scores.select { |s| s.instance_of? Hash }.each do |score|
24
- a = %i[event team participated disqualified score tier]
24
+ a = %i[event team participated disqualified exempt unknown score tier]
25
25
  a << :'tiebreaker place'
26
26
  info = Set.new a
27
27
  assert Set.new(score.keys).subset? info
@@ -64,10 +64,27 @@ module SciolyFF
64
64
  end
65
65
  end
66
66
 
67
+ def test_each_score_has_valid_exempt
68
+ @scores.select { |s| s.instance_of? Hash }.each do |score|
69
+ if score.key? :exempt
70
+ assert_includes [true, false], score[:exempt]
71
+ end
72
+ end
73
+ end
74
+
75
+ def test_each_score_has_valid_unknown
76
+ @scores.select { |s| s.instance_of? Hash }.each do |score|
77
+ if score.key? :unknown
78
+ assert_includes [true, false], score[:unknown]
79
+ end
80
+ end
81
+ end
82
+
67
83
  def test_each_score_has_valid_score
68
84
  @scores.select { |s| s.instance_of? Hash }.each do |score|
69
85
  next if score[:disqualified] == true ||
70
- score[:participated] == false
86
+ score.key?(:participated) ||
87
+ placing[:exempt] == true
71
88
 
72
89
  assert_kind_of Numeric, score[:score]
73
90
  end
data/lib/sciolyff.rb CHANGED
@@ -55,6 +55,7 @@ module SciolyFF
55
55
  def initialize(rep)
56
56
  @rep = rep
57
57
  @exhibition_teams_count = rep[:Teams].count { |t| t[:exhibition] }
58
+ @exempt_placings_count = rep[:Placings].count { |p| p[:exempt] }
58
59
  @team_points_cache = {}
59
60
 
60
61
  @tournament = rep[:Tournament]
@@ -75,8 +76,10 @@ module SciolyFF
75
76
  placing = @placings_by_event[event_name][team_number]
76
77
  number_of_teams = number_of_competing_teams(event_name)
77
78
 
78
- if placing[:disqualified] then number_of_teams + 2
79
+ if placing[:exempt] then 0
80
+ elsif placing[:disqualified] then number_of_teams + 2
79
81
  elsif placing[:participated] == false then number_of_teams + 1
82
+ elsif placing[:unknown] then number_of_teams - 1
80
83
  elsif placing[:place].nil? then number_of_teams
81
84
  else calculate_event_points(placing)
82
85
  end
@@ -136,11 +139,12 @@ module SciolyFF
136
139
  def calculate_event_points(placing)
137
140
  return placing[:place] if simple_placing?(placing)
138
141
 
139
- # Points is place minus number of exhibition teams with a better place
142
+ # Points is place minus number of exhibition and exempt teams with a
143
+ # better place
140
144
  placing[:place] -
141
145
  @placings_by_event[placing[:event]]
142
146
  .values
143
- .select { |p| @teams_by_number[p[:team]][:exhibition] && p[:place] }
147
+ .select { |p| p[:place] && exhibition_or_exempt_placing?(p) }
144
148
  .count { |p| p[:place] < placing[:place] }
145
149
  end
146
150
 
@@ -154,7 +158,12 @@ module SciolyFF
154
158
  end
155
159
 
156
160
  def simple_placing?(placing)
157
- @exhibition_teams_count.zero? || @events_by_name[placing[:event]][:trial]
161
+ @events_by_name[placing[:event]][:trial] ||
162
+ (@exhibition_teams_count.zero? && @exempt_placings_count.zero?)
163
+ end
164
+
165
+ def exhibition_or_exempt_placing?(placing)
166
+ @teams_by_number[placing[:team]][:exhibition] || placing[:exempt]
158
167
  end
159
168
 
160
169
  def break_tie(team_number_a, team_number_b)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sciolyff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Em Zhan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-26 00:00:00.000000000 Z
11
+ date: 2019-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest