Class: SciolyFF::Validator::Events
Overview
Checks for one event in the Events section of a SciolyFF file
Constant Summary
collapse
- REQUIRED =
{
name: String
}.freeze
- OPTIONAL =
{
trial: [true, false],
trialed: [true, false],
scoring: %w[high low]
}.freeze
Constants included
from Canonical
Canonical::BASE
Instance Method Summary
collapse
Methods included from Sections
#all_required_sections?, #no_extra_sections?, #rep_is_hash?, #sections_are_correct_type?
Methods inherited from Checker
inherited, #send
Constructor Details
#initialize(rep) ⇒ Events
Returns a new instance of Events.
22
23
24
25
26
27
|
# File 'lib/sciolyff/validator/events.rb', line 22
def initialize(rep)
@events = rep[:Events]
@names = @events.map { |e| e[:name] }
@placings = rep[:Placings].group_by { |p| p[:event] }
@teams = rep[:Teams].count
end
|
Instance Method Details
#in_canonical_list?(event, logger) ⇒ Boolean
84
85
86
87
88
89
|
# File 'lib/sciolyff/validator/events.rb', line 84
def in_canonical_list?(event, logger)
rep = [event[:name]]
return true if canonical?(rep, 'events.csv', logger)
logger.warn "non-canonical event: #{event[:name]}"
end
|
#no_gaps_in_places?(event, logger) ⇒ Boolean
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/sciolyff/validator/events.rb', line 63
def no_gaps_in_places?(event, logger)
places = places_with_expanded_ties(event)
return true if places.empty?
gaps = (places.min..places.max).to_a - places
return true if gaps.empty?
logger.error "'event: #{event[:name]}' has gaps in "\
"place #{gaps.join ', '}"
end
|
#places_start_at_one?(event, logger) ⇒ Boolean
74
75
76
77
78
79
80
|
# File 'lib/sciolyff/validator/events.rb', line 74
def places_start_at_one?(event, logger)
lowest_place = @placings[event[:name]].map { |p| p[:place] }.compact.min
return true if lowest_place == 1 || lowest_place.nil?
logger.error "places for 'event: #{event[:name]}' start at "\
"#{lowest_place} instead of 1"
end
|
#placings_for_all_teams?(event, logger) ⇒ Boolean
35
36
37
38
39
40
41
|
# File 'lib/sciolyff/validator/events.rb', line 35
def placings_for_all_teams?(event, logger)
count = @placings[event[:name]]&.count || 0
return true if count == @teams
logger.error "'event: #{event[:name]}' has incorrect number of "\
"placings (#{count} instead of #{@teams})"
end
|
#ties_marked?(event, logger) ⇒ Boolean
43
44
45
46
47
48
49
50
51
|
# File 'lib/sciolyff/validator/events.rb', line 43
def ties_marked?(event, logger)
unmarked_ties = placings_by_place(event).select do |_place, placings|
placings.count { |p| !p[:tie] } > 1
end
return true if unmarked_ties.empty?
logger.error "'event: #{event[:name]}' has unmarked ties at "\
"place #{unmarked_ties.keys.join ', '}"
end
|
#ties_paired?(event, logger) ⇒ Boolean
53
54
55
56
57
58
59
60
61
|
# File 'lib/sciolyff/validator/events.rb', line 53
def ties_paired?(event, logger)
unpaired_ties = placings_by_place(event).select do |_place, placings|
placings.count { |p| p[:tie] } == 1
end
return true if unpaired_ties.empty?
logger.error "'event: #{event[:name]}' has unpaired ties at "\
"place #{unpaired_ties.keys.join ', '}"
end
|
#unique_name?(event, logger) ⇒ Boolean
29
30
31
32
33
|
# File 'lib/sciolyff/validator/events.rb', line 29
def unique_name?(event, logger)
return true if @names.count(event[:name]) == 1
logger.error "duplicate event name: #{event[:name]}"
end
|