sciolyff 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0b0585e73d7a00ceda5496078ca65998b8bea5fa1ece51bd76ac4c496074767
4
- data.tar.gz: 3f9770165cfccc02e9d575b457ebf397e7f6a65d6861fbb9ee27959f9614445d
3
+ metadata.gz: 613cf2cec8c62733c496ae7d35b9eb6bb5f61bfdbd0de4c639fa4474a99277a0
4
+ data.tar.gz: 3b29332062927062d7da58bd71a5654205ba8de0beada33afefc2c70c1f9a00c
5
5
  SHA512:
6
- metadata.gz: ebacad7be6d0faa35892d239d48562b37d894919ea0b41bc40d4ebd668b306c3a2dda093605d18c0a924735366ab061597f941375f938c71313440beb1941bc5
7
- data.tar.gz: f9ab9e0d567ef8cbf9d5740e7205f49324715ce0db3633716a689e61170a9ad2a576ac1ecd78029f1b8864b9255690ee36b793db2b0ef8b2d3c3bbd09eba16f0
6
+ metadata.gz: 3bf3fa55e11a4856e81b995e2d741e5df2b7bb8eaee9fd1eced89353a9f644cdb500be44cc61c3be96178a1ed59958913623bd47d59831628b62994ffc1a36ea
7
+ data.tar.gz: 614bd64bfdd779826113d343ff35d7fe906e9fd958ad87e386a1c9daf714cc1d164a0484a248c27205c1285f1a1d395bdddb001903aab7d622e6c880ad0214dd
data/bin/sciolyff CHANGED
@@ -2,11 +2,10 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  require 'optimist'
5
- require 'yaml'
6
5
  require 'sciolyff'
7
6
 
8
7
  opts = Optimist.options do
9
- version 'sciolyff 0.8.0'
8
+ version 'sciolyff 0.9.0'
10
9
  banner <<~STRING
11
10
  Checks if a given file is in the Scioly File Format
12
11
 
@@ -15,15 +14,13 @@ opts = Optimist.options do
15
14
 
16
15
  where [options] are:
17
16
  STRING
18
- opt :verbose, 'Run Minitest in verbose mode'
19
- end
20
-
21
- if ARGV.first.nil? || !File.exist?(ARGV.first)
22
- puts "Error: file '#{ARGV.first}' not found."
23
- puts 'Try --help for help.'
24
- exit 1
17
+ opt :loglevel, 'Log verbosity from 0 to 3', default: 1
25
18
  end
26
19
 
27
20
  puts 'More than one file given, ignoring all but first.' if ARGV.length > 1
28
21
 
29
- SciolyFF.validate_file(ARGV.first, opts: opts)
22
+ validator = SciolyFF::Validator.new opts[:loglevel]
23
+ validity = validator.valid? ARGV.first
24
+ print validator.last_log
25
+
26
+ exit validity
@@ -10,11 +10,10 @@ module SciolyFF
10
10
  @placings = interpreter.placings.select { |p| p.event == self }
11
11
  @placings_by_team =
12
12
  @placings.group_by(&:team).transform_values!(&:first)
13
-
14
- @placings.freeze
13
+ @raws = @placings.select(&:raw?).map(&:raw).sort
15
14
  end
16
15
 
17
- attr_reader :placings
16
+ attr_reader :placings, :raws
18
17
 
19
18
  def name
20
19
  @rep[:name]
@@ -29,11 +28,11 @@ module SciolyFF
29
28
  end
30
29
 
31
30
  def high_score_wins?
32
- @rep[:scoring] == 'high'
31
+ !low_score_wins?
33
32
  end
34
33
 
35
34
  def low_score_wins?
36
- !high_score_wins?
35
+ @rep[:scoring] == 'low'
37
36
  end
38
37
 
39
38
  def placing_for(team)
@@ -41,13 +40,26 @@ module SciolyFF
41
40
  end
42
41
 
43
42
  def maximum_place
44
- return placings.size if trial?
45
-
46
- tournament.maximum_place
43
+ @maximum_place ||=
44
+ if tournament.per_event_n?
45
+ competing_teams_count
46
+ elsif trial?
47
+ placings.size
48
+ else
49
+ tournament.maximum_place
50
+ end
47
51
  end
48
52
 
49
53
  def maximum_points
50
54
  maximum_place + 2
51
55
  end
56
+
57
+ private
58
+
59
+ def competing_teams_count
60
+ return placings.count { |p| !p.place.nil? } if trial?
61
+
62
+ placings.count { |p| !(p.team.exhibition? || p.exempt? || p.place.nil?) }
63
+ end
52
64
  end
53
65
  end
@@ -0,0 +1,130 @@
1
+ # frozen_string_literal: true
2
+ module SciolyFF
3
+ # Holds helper methods used in template.html.erb
4
+ class Interpreter::HTML::Helpers
5
+ def template
6
+ File.read(File.join(__dir__, 'template.html.erb'))
7
+ end
8
+
9
+ def get_binding(interpreter)
10
+ i = interpreter
11
+ binding
12
+ end
13
+
14
+ private
15
+
16
+ def tournament_title(t_info)
17
+ return t_info.name if t_info.name
18
+
19
+ case t_info.level
20
+ when 'Nationals'
21
+ 'Science Olympiad National Tournament'
22
+ when 'States'
23
+ "#{expand_state_name(t_info.state)} Science Olympiad State Tournament"
24
+ when 'Regionals'
25
+ "#{t_info.location} Regional Tournament"
26
+ when 'Invitational'
27
+ "#{t_info.location} Invitational"
28
+ end
29
+ end
30
+
31
+ def tournament_title_short(t_info)
32
+ case t_info.level
33
+ when 'Nationals'
34
+ 'National Tournament'
35
+ when 'States'
36
+ "#{t_info.state} State Tournament"
37
+ when 'Regionals', 'Invitational'
38
+ t_info.short_name
39
+ end
40
+ end
41
+
42
+ def acronymize(phrase)
43
+ phrase.split(' ')
44
+ .select { |w| /^[[:upper:]]/.match(w) }
45
+ .map { |w| w[0] }
46
+ .join
47
+ end
48
+
49
+ def format_school(team)
50
+ if team.school_abbreviation
51
+ abbr_school(team.school_abbreviation)
52
+ else
53
+ abbr_school(team.school)
54
+ end
55
+ end
56
+
57
+ def abbr_school(school)
58
+ school.sub('Elementary School', 'Elementary')
59
+ .sub('Elementary/Middle School', 'E.M.S.')
60
+ .sub('Middle School', 'M.S.')
61
+ .sub('Junior High School', 'J.H.S.')
62
+ .sub(%r{Middle[ /-]High School}, 'M.H.S')
63
+ .sub('Junior/Senior High School', 'Jr./Sr. H.S.')
64
+ .sub('High School', 'H.S.')
65
+ .sub('Secondary School', 'Secondary')
66
+ end
67
+
68
+ def full_school_name(team)
69
+ location = if team.city then "(#{team.city}, #{team.state})"
70
+ else "(#{team.state})"
71
+ end
72
+ [team.school, location].join(' ')
73
+ end
74
+
75
+ def full_team_name(team)
76
+ location = if team.city then "(#{team.city}, #{team.state})"
77
+ else "(#{team.state})"
78
+ end
79
+ [team.school, team.suffix, location].join(' ')
80
+ end
81
+
82
+ def team_attended?(team)
83
+ team
84
+ .placings
85
+ .map(&:participated?)
86
+ .any?
87
+ end
88
+
89
+ def summary_titles
90
+ %w[
91
+ Champion
92
+ Runner-up
93
+ Third-place
94
+ Fourth-place
95
+ Fifth-place
96
+ Sixth-place
97
+ ]
98
+ end
99
+
100
+ def sup_tag(placing)
101
+ exempt = placing.exempt? || placing.dropped_as_part_of_worst_placings?
102
+ tie = placing.tie? && !placing.points_limited_by_maximum_place?
103
+ return '' unless tie || exempt
104
+
105
+ "<sup>#{'◊' if exempt}#{'*' if tie}</sup>"
106
+ end
107
+
108
+ def placing_notes(placing)
109
+ place = placing.place
110
+ points = placing.isolated_points
111
+ [
112
+ ('trial event' if placing.event.trial?),
113
+ ('trialed event' if placing.event.trialed?),
114
+ ('disqualified' if placing.disqualified?),
115
+ ('did not participate' if placing.did_not_participate?),
116
+ ('participation points only' if placing.participation_only?),
117
+ ('tie' if placing.tie?),
118
+ ('exempt' if placing.exempt?),
119
+ ('points limited' if placing.points_limited_by_maximum_place?),
120
+ ('unknown place' if placing.unknown?),
121
+ ('placed behind exhibition team'\
122
+ if placing.points_affected_by_exhibition? && place - points == 1),
123
+ ('placed behind exhibition teams'\
124
+ if placing.points_affected_by_exhibition? && place - points > 1),
125
+ ('dropped'\
126
+ if placing.dropped_as_part_of_worst_placings?),
127
+ ].compact.join(', ').capitalize
128
+ end
129
+ end
130
+ end