tournament 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -1
- data/Manifest.txt +4 -0
- data/Rakefile +1 -1
- data/lib/tournament/pool.rb +90 -0
- data/webgui/app/controllers/teams_controller.rb +9 -2
- data/webgui/app/views/admin/pool.html.erb +15 -0
- data/webgui/app/views/layouts/report.html.erb +1 -0
- data/webgui/app/views/pool/index.html.erb +26 -9
- data/webgui/app/views/reports/_leader.html.erb +80 -0
- data/webgui/app/views/reports/_report.html.erb +7 -1
- data/webgui/app/views/reports/show.html.erb +1 -1
- data/webgui/config/initializers/ordinal.rb +12 -0
- data/webgui/db/development.sqlite3 +0 -0
- data/webgui/db/migrate/20090316023841_change_illinois_short_name.rb +13 -0
- data/webgui/db/schema.rb +1 -1
- data/webgui/db/test.sqlite3 +0 -0
- data/webgui/public/stylesheets/main.css +39 -0
- data/webgui/public/stylesheets/reports.css +26 -0
- data/webgui/test/fixtures/teams.yml +2 -2
- data/webgui/test/functional/teams_controller_test.rb +85 -0
- metadata +6 -2
data/History.txt
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
== 2.
|
1
|
+
== 2.1.0 / 2009-03-15
|
2
|
+
* Update for 2009 NCAA tournament seedings
|
3
|
+
* Leader board report is HTML instead of text
|
4
|
+
* Minor formatting changes for main page
|
5
|
+
* 2.1.1 release when play-in game is decided.
|
6
|
+
|
7
|
+
== 2.0.0 / 2009-03-12
|
2
8
|
* Release Rails GUI for self-service entries and admin
|
3
9
|
* Make reports account for tournament tie breaker.
|
4
10
|
* YAML format change from version 1.X. Old pool data won't work
|
data/Manifest.txt
CHANGED
@@ -71,6 +71,7 @@ webgui/app/views/layouts/default.html.erb
|
|
71
71
|
webgui/app/views/layouts/print.html.erb
|
72
72
|
webgui/app/views/layouts/report.html.erb
|
73
73
|
webgui/app/views/pool/index.html.erb
|
74
|
+
webgui/app/views/reports/_leader.html.erb
|
74
75
|
webgui/app/views/reports/_report.html.erb
|
75
76
|
webgui/app/views/reports/show.html.erb
|
76
77
|
webgui/app/views/sessions/new.html.erb
|
@@ -90,6 +91,7 @@ webgui/config/environments/test.rb
|
|
90
91
|
webgui/config/initializers/inflections.rb
|
91
92
|
webgui/config/initializers/mime_types.rb
|
92
93
|
webgui/config/initializers/new_rails_defaults.rb
|
94
|
+
webgui/config/initializers/ordinal.rb
|
93
95
|
webgui/config/initializers/pool.rb
|
94
96
|
webgui/config/initializers/site_keys.rb
|
95
97
|
webgui/config/locales/en.yml
|
@@ -114,6 +116,7 @@ webgui/db/migrate/20090301014710_create_teams.rb
|
|
114
116
|
webgui/db/migrate/20090301025902_add_more_teams.rb
|
115
117
|
webgui/db/migrate/20090301041526_create_seedings.rb
|
116
118
|
webgui/db/migrate/20090301090511_create_regions.rb
|
119
|
+
webgui/db/migrate/20090316023841_change_illinois_short_name.rb
|
117
120
|
webgui/db/migrate/teams.txt
|
118
121
|
webgui/db/pool.yml
|
119
122
|
webgui/db/schema.rb
|
@@ -147,6 +150,7 @@ webgui/public/stylesheets/bracket.css
|
|
147
150
|
webgui/public/stylesheets/main.css
|
148
151
|
webgui/public/stylesheets/prince.css
|
149
152
|
webgui/public/stylesheets/prince_landscape.css
|
153
|
+
webgui/public/stylesheets/reports.css
|
150
154
|
webgui/script/about
|
151
155
|
webgui/script/console
|
152
156
|
webgui/script/dbconsole
|
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ PROJ.authors = 'Douglas A. Seifert'
|
|
20
20
|
PROJ.email = 'doug+rubyforge@dseifert.net'
|
21
21
|
PROJ.url = 'http://www.dseifert.net/code/tournament'
|
22
22
|
PROJ.rubyforge.name = 'tournament'
|
23
|
-
PROJ.version = '2.
|
23
|
+
PROJ.version = '2.1.0'
|
24
24
|
PROJ.group_id = 5863
|
25
25
|
|
26
26
|
PROJ.spec.opts << '--color'
|
data/lib/tournament/pool.rb
CHANGED
@@ -183,6 +183,96 @@ class Tournament::Pool
|
|
183
183
|
return pool
|
184
184
|
end
|
185
185
|
|
186
|
+
# Creates a Pool object for the 2009 NCAA tournament
|
187
|
+
def self.ncaa_2009
|
188
|
+
pool = Tournament::Pool.new
|
189
|
+
pool.add_region("Midwest",
|
190
|
+
[
|
191
|
+
Tournament::Team.new('Louisville', 'UNC', 1),
|
192
|
+
Tournament::Team.new('TBD', 'TBD', 16),
|
193
|
+
Tournament::Team.new('Ohio State', 'OSU', 8),
|
194
|
+
Tournament::Team.new('Siena', 'Sie', 9),
|
195
|
+
Tournament::Team.new('Utah', 'Uta', 5),
|
196
|
+
Tournament::Team.new('Arizona', 'UA', 12),
|
197
|
+
Tournament::Team.new('Wake Forest', 'WkF', 4),
|
198
|
+
Tournament::Team.new('Cleveland State', 'ClS', 13),
|
199
|
+
Tournament::Team.new('West Virginia', 'WVa', 6),
|
200
|
+
Tournament::Team.new('Dayton', 'Day', 11),
|
201
|
+
Tournament::Team.new('Kansas', 'Kan', 3),
|
202
|
+
Tournament::Team.new('North Dakota State', 'NDS', 14),
|
203
|
+
Tournament::Team.new('Boston College', 'BC', 7),
|
204
|
+
Tournament::Team.new('USC', 'USC', 10),
|
205
|
+
Tournament::Team.new('Michigan State', 'MSU', 2),
|
206
|
+
Tournament::Team.new('Robert Morris', 'RbM', 15)
|
207
|
+
],
|
208
|
+
0
|
209
|
+
)
|
210
|
+
pool.add_region("West",
|
211
|
+
[
|
212
|
+
Tournament::Team.new('Connecticut', 'Con', 1),
|
213
|
+
Tournament::Team.new('Chattanooga', 'Cht', 16),
|
214
|
+
Tournament::Team.new('BYU', 'BYU', 8),
|
215
|
+
Tournament::Team.new('Texas A&M', 'A&M', 9),
|
216
|
+
Tournament::Team.new('Purdue', 'Pur', 5),
|
217
|
+
Tournament::Team.new('Northern Iowa', 'NIo', 12),
|
218
|
+
Tournament::Team.new('Washington', 'Was', 4),
|
219
|
+
Tournament::Team.new('Mississippi State', 'MiS', 13),
|
220
|
+
Tournament::Team.new('Marquette', 'Mar', 6),
|
221
|
+
Tournament::Team.new('Utah State', 'USt', 11),
|
222
|
+
Tournament::Team.new('Missouri', 'Msr', 3),
|
223
|
+
Tournament::Team.new('Cornell', 'Cor', 14),
|
224
|
+
Tournament::Team.new('California', 'Cal', 7),
|
225
|
+
Tournament::Team.new('Maryland', 'Mry', 10),
|
226
|
+
Tournament::Team.new('Memphis', 'Mem', 2),
|
227
|
+
Tournament::Team.new('Cal State Northridge', 'CSN', 15)
|
228
|
+
],
|
229
|
+
1
|
230
|
+
)
|
231
|
+
pool.add_region("East",
|
232
|
+
[
|
233
|
+
Tournament::Team.new('Pittsburgh', 'Pit', 1),
|
234
|
+
Tournament::Team.new('East Tennessee State', 'ETS', 16),
|
235
|
+
Tournament::Team.new('Oklahoma State', 'OkS', 8),
|
236
|
+
Tournament::Team.new('Tennessee', 'Ten', 9),
|
237
|
+
Tournament::Team.new('Florida State', 'FSU', 5),
|
238
|
+
Tournament::Team.new('Wisconsin', 'Wis', 12),
|
239
|
+
Tournament::Team.new('Xavier', 'Xav', 4),
|
240
|
+
Tournament::Team.new('Portland St', 'PSt', 13),
|
241
|
+
Tournament::Team.new('UCLA', 'ULA', 6),
|
242
|
+
Tournament::Team.new('Virginia Commonwealth', 'VAC', 11),
|
243
|
+
Tournament::Team.new('Villanova', 'Vil', 3),
|
244
|
+
Tournament::Team.new('Cornell', 'Cor', 14),
|
245
|
+
Tournament::Team.new('Texas', 'Tex', 7),
|
246
|
+
Tournament::Team.new('Minnesota', 'Min', 10),
|
247
|
+
Tournament::Team.new('Duke', 'Duk', 2),
|
248
|
+
Tournament::Team.new('Binghamton', 'Bin', 15)
|
249
|
+
],
|
250
|
+
2
|
251
|
+
)
|
252
|
+
pool.add_region("South",
|
253
|
+
[
|
254
|
+
Tournament::Team.new('North Carolina', 'UNC', 1),
|
255
|
+
Tournament::Team.new('Radford', 'Rad', 16),
|
256
|
+
Tournament::Team.new('LSU', 'LSU', 8),
|
257
|
+
Tournament::Team.new('Butler', 'But', 9),
|
258
|
+
Tournament::Team.new('Illinois', 'Ill', 5),
|
259
|
+
Tournament::Team.new('W. Kentucky', 'WKy', 12),
|
260
|
+
Tournament::Team.new('Gonzaga', 'Gon', 4),
|
261
|
+
Tournament::Team.new('Akron', 'Akr', 13),
|
262
|
+
Tournament::Team.new('Arizona State', 'ASU', 6),
|
263
|
+
Tournament::Team.new('Temple', 'Tem', 11),
|
264
|
+
Tournament::Team.new('Syracuse', 'Syr', 3),
|
265
|
+
Tournament::Team.new('Stephen F. Austin', 'SFA', 14),
|
266
|
+
Tournament::Team.new('Clemson', 'Cle', 7),
|
267
|
+
Tournament::Team.new('Michigan', 'UM', 10),
|
268
|
+
Tournament::Team.new('Oklahoma', 'Okl', 2),
|
269
|
+
Tournament::Team.new('Morgan State', 'MgS', 15)
|
270
|
+
],
|
271
|
+
3
|
272
|
+
)
|
273
|
+
return pool
|
274
|
+
end
|
275
|
+
|
186
276
|
# Run a test pool with random entries and a random outcome.
|
187
277
|
def self.test(num_picks = 20)
|
188
278
|
pool = ncaa_2008
|
@@ -22,6 +22,7 @@ class TeamsController < ApplicationController
|
|
22
22
|
|
23
23
|
def change
|
24
24
|
@pool = Pool.find(params[:id])
|
25
|
+
Pool.transaction do
|
25
26
|
[0,1,2,3].each do |region_idx|
|
26
27
|
region_hash = params["region#{region_idx}".to_sym]
|
27
28
|
next unless region_hash
|
@@ -40,7 +41,11 @@ class TeamsController < ApplicationController
|
|
40
41
|
logger.debug("SAVING SEEDINGS: #{region_hash[:seedings].inspect}")
|
41
42
|
region_hash[:seedings].each do |seeding_hash|
|
42
43
|
next if seeding_hash[:name].blank? || seeding_hash[:short_name].blank?
|
43
|
-
team = Team.
|
44
|
+
team = Team.find_or_initialize_by_short_name(seeding_hash[:short_name]) {|t| t.name = seeding_hash[:name]}
|
45
|
+
if team.new_record?
|
46
|
+
logger.debug("SAVING NEW TEAM for region #{region_idx}, seed: #{seeding_hash[:seed]}, name: #{team.name}, short: #{team.short_name}")
|
47
|
+
team.save!
|
48
|
+
end
|
44
49
|
existing_region = @pool.region_seedings.find{|rn, rs| rn == region_name}
|
45
50
|
existing_team = nil
|
46
51
|
if existing_region
|
@@ -56,10 +61,12 @@ class TeamsController < ApplicationController
|
|
56
61
|
existing_seeding.save!
|
57
62
|
end
|
58
63
|
else
|
64
|
+
logger.debug("SAVING NEW SEEDING for region #{region_idx}, seed: #{seeding_hash[:seed]}, team name: #{team.name}, short: #{team.short_name}, team id: #{team.id}")
|
59
65
|
@pool.seedings.create(:team_id => team.id, :region => region_name, :seed => seeding_hash[:seed])
|
60
66
|
end
|
61
67
|
end
|
62
|
-
@pool.save
|
68
|
+
@pool.save!
|
69
|
+
end
|
63
70
|
if @pool.ready?
|
64
71
|
@pool.initialize_tournament_pool
|
65
72
|
@pool.save
|
@@ -31,6 +31,21 @@
|
|
31
31
|
<tr>
|
32
32
|
<td>
|
33
33
|
Payouts
|
34
|
+
<a class="info" href="#">?
|
35
|
+
<span>
|
36
|
+
<small>
|
37
|
+
Payouts have a rank, amount and kind. The rank is either a number or
|
38
|
+
the letter L. Rank 1 defines the payout for 1st place, rank 2 for
|
39
|
+
2nd place and so on. Rank L defines the payout for the last place
|
40
|
+
entry and is optional. The amount of the payout is a number. Its
|
41
|
+
meaning depends on the kind of the payout. If the kind is '%', then
|
42
|
+
the amount is a percentage of the total entry fees collected. If
|
43
|
+
the kind is '$', then the amount is a fixed dollar amount. This lets
|
44
|
+
you have payouts for the pool that give the last place entry the
|
45
|
+
entry fee back.
|
46
|
+
</small>
|
47
|
+
</span>
|
48
|
+
</a>
|
34
49
|
</td>
|
35
50
|
<td>
|
36
51
|
<table border="0">
|
@@ -2,21 +2,36 @@
|
|
2
2
|
|
3
3
|
<% if Pool.active_pools.size > 0 %>
|
4
4
|
<% Pool.active_pools.each do |pool| -%>
|
5
|
-
<
|
6
|
-
|
5
|
+
<div class="poollistblock">
|
6
|
+
<span class="poollisthead"><%= pool.name %></span>
|
7
7
|
<small>
|
8
8
|
<% if current_user && pool.user_id == current_user.id %>
|
9
9
|
|
10
10
|
<%= link_to '[Edit]', :controller => 'admin', :action => 'pool', :id => pool.id %>
|
11
11
|
<%= link_to '[Entries]', :controller => 'admin', :action => 'entries', :id => pool.id %>
|
12
12
|
<% end %>
|
13
|
-
<%= link_to '[
|
13
|
+
<%= link_to '[Leader Board]', :controller => 'reports', :action => 'show', :id => pool.id, :report => 'leader' %>
|
14
|
+
<%= link_to '[Reports]', :controller => 'reports', :action => 'show', :id => pool.id %>
|
14
15
|
</small>
|
15
|
-
<
|
16
|
-
|
16
|
+
<div class="poollistinfo">
|
17
|
+
<div class="poollistinfodetail">
|
18
|
+
Starts: <%= pool.starts_at.to_date.to_formatted_s(:long)%>
|
17
19
|
Pending Entries: <%= pool.pending_entries.size%>
|
18
20
|
Total Entries: <%= pool.user_entries.size%>
|
19
|
-
|
21
|
+
</div>
|
22
|
+
<div class="poollistinfodetail">
|
23
|
+
Entry Fee: $<%=pool.fee%>
|
24
|
+
</div>
|
25
|
+
<div class="poollistinfodetail">
|
26
|
+
Payouts:
|
27
|
+
<% pool.payouts.delete_if{|p| p.kind.blank?}.sort_by {|p| p.rank }.each do |p| -%>
|
28
|
+
<%=p.rank != 'L' ? p.rank.to_i.ordinal : 'Last'%>: <%= p.kind if p.kind == '$'%><%=p.payout%><%=p.kind if p.kind != '$'%>
|
29
|
+
<% end -%>
|
30
|
+
</div>
|
31
|
+
<div class="poollistinfodetail">
|
32
|
+
Scoring: <%=pool.pool.scoring_strategy.description%>
|
33
|
+
</div>
|
34
|
+
<div class="poollistinfodetail">
|
20
35
|
<% if current_user -%>
|
21
36
|
Entries for <%= current_user.login%>: <%= link_to pool.entries_for(current_user).size, :controller => 'entry', :action => 'index', :id => pool.id %>
|
22
37
|
<% if pool.accepting_entries? -%>
|
@@ -26,11 +41,13 @@ Entries for <%= current_user.login%>: <%= link_to pool.entries_for(current_user)
|
|
26
41
|
<% else -%>
|
27
42
|
<i>To enter this pool, please <%= link_to 'login', '/login'%> or <%= link_to 'signup', '/signup'%></i>
|
28
43
|
<% end -%>
|
29
|
-
</
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
30
47
|
<% end -%>
|
31
48
|
<% else -%>
|
32
|
-
<
|
49
|
+
<div>
|
33
50
|
There are no active pools. Please come back in a bit or contact
|
34
51
|
an administrator.
|
35
|
-
</
|
52
|
+
</div>
|
36
53
|
<% end -%>
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<% if show_header %>
|
2
|
+
<h1>Leader Report</h1>
|
3
|
+
<ul>
|
4
|
+
<li>Total games played: <%= pool.tournament_entry.picks.games_played %></li>
|
5
|
+
<% if pool.tournament_entry.picks.complete? %>
|
6
|
+
<li>Champion: <%=pool.tournament_entry.picks.champion.name%></li>
|
7
|
+
<% end %>
|
8
|
+
<li>Pool Tie Break: <%=pool.tournament_entry.tie_breaker || '-' %></li>
|
9
|
+
<li>Number of entries: <%=pool.entries.size%></li>
|
10
|
+
</ul>
|
11
|
+
<% end %>
|
12
|
+
<%
|
13
|
+
current_rank = 1
|
14
|
+
if pool.entries.size > 0
|
15
|
+
%>
|
16
|
+
<table class="report">
|
17
|
+
<thead>
|
18
|
+
<tr>
|
19
|
+
<td rowspan="2">Rank</td>
|
20
|
+
<td rowspan="2">Current<br/>Score</td>
|
21
|
+
<td rowspan="2">Max Score</td>
|
22
|
+
<td rowspan="2">Entry Name</td>
|
23
|
+
<td rowspan="2">Champ<br/>Alive?</td>
|
24
|
+
<td rowspan="2">Tie<br/>Break</td>
|
25
|
+
<td colspan="6">Round Scores</td>
|
26
|
+
</tr>
|
27
|
+
<tr>
|
28
|
+
<td>1</td>
|
29
|
+
<td>2</td>
|
30
|
+
<td>3</td>
|
31
|
+
<td>4</td>
|
32
|
+
<td>5</td>
|
33
|
+
<td>6</td>
|
34
|
+
</tr>
|
35
|
+
</thead>
|
36
|
+
<tbody>
|
37
|
+
<%
|
38
|
+
pool.entries.sort do |e1, e2|
|
39
|
+
s1 = e1.picks.score_against(pool.tournament_entry.picks, pool.scoring_strategy)
|
40
|
+
s2 = e2.picks.score_against(pool.tournament_entry.picks, pool.scoring_strategy)
|
41
|
+
if s1 == s2 && pool.tournament_entry.tie_breaker
|
42
|
+
s1 = 0 - (e1.tie_breaker - pool.tournament_entry.tie_breaker).abs
|
43
|
+
s2 = 0 - (e2.tie_breaker - pool.tournament_entry.tie_breaker).abs
|
44
|
+
end
|
45
|
+
s2 <=> s1
|
46
|
+
end.inject(nil) do |last_entry, entry|
|
47
|
+
total = entry.picks.score_against(pool.tournament_entry.picks, pool.scoring_strategy)
|
48
|
+
max = entry.picks.maximum_score(pool.tournament_entry.picks, pool.scoring_strategy)
|
49
|
+
champ = entry.picks.champion
|
50
|
+
round_scores = []
|
51
|
+
1.upto(pool.tournament_entry.picks.rounds) do |round|
|
52
|
+
scores = entry.picks.scores_for_round(round, pool.tournament_entry.picks, pool.scoring_strategy)
|
53
|
+
round_scores << scores.inject(0) {|sum, arr| sum += (arr[0] ? arr[0] : 0)}
|
54
|
+
end
|
55
|
+
rank_display = nil
|
56
|
+
if last_entry && !pool.tournament_entry.tie_breaker && total == last_entry.bracket.score_against(pool.tournament_entry.picks, pool.scoring_strategy)
|
57
|
+
rank_display = 'TIE'
|
58
|
+
else
|
59
|
+
rank_display = "%4d" % current_rank
|
60
|
+
end
|
61
|
+
%>
|
62
|
+
<tr class="<%=cycle('even', 'odd', :name => 'rtclass')%>">
|
63
|
+
<td><%=rank_display%></td>
|
64
|
+
<td><%=total%></td>
|
65
|
+
<td><%=max%></td>
|
66
|
+
<td><%=entry.name%></td>
|
67
|
+
<td><%=champ.short_name%> <%=pool.tournament_entry.picks.still_alive?(champ) ? 'Y' : 'N'%></td>
|
68
|
+
<td><%=entry.tie_breaker || '-'%></td>
|
69
|
+
<% round_scores.each do |rs| %>
|
70
|
+
<td><%=rs%></td>
|
71
|
+
<% end %>
|
72
|
+
</tr>
|
73
|
+
<%
|
74
|
+
current_rank += 1
|
75
|
+
entry
|
76
|
+
end
|
77
|
+
end
|
78
|
+
%>
|
79
|
+
</tbody>
|
80
|
+
</table>
|
@@ -1,11 +1,17 @@
|
|
1
|
+
<% if report == 'leader' %>
|
2
|
+
<%= render :partial => 'leader', :locals => {:pool => pool, :show_header => true}%>
|
3
|
+
<br/>
|
4
|
+
<br/>
|
5
|
+
<% else %>
|
1
6
|
<h2><%=report.capitalize%> Report</h2>
|
2
7
|
<%
|
3
8
|
report_output = ''
|
4
9
|
report_method = "#{report}_report".to_sym
|
5
|
-
|
10
|
+
pool.send(report_method, report_output)
|
6
11
|
%>
|
7
12
|
<pre>
|
8
13
|
<small>
|
9
14
|
<%= report_output %>
|
10
15
|
</small>
|
11
16
|
</pre>
|
17
|
+
<% end %>
|
@@ -7,6 +7,6 @@
|
|
7
7
|
</ul>
|
8
8
|
<div id="report">
|
9
9
|
<% if params[:report] -%>
|
10
|
-
<%= render :partial => "reports/report", :locals => {:report => params[:report]}%>
|
10
|
+
<%= render :partial => "reports/report", :locals => {:report => params[:report], :pool => @pool.pool}%>
|
11
11
|
<% end -%>
|
12
12
|
</div>
|
Binary file
|
data/webgui/db/schema.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
#
|
10
10
|
# It's strongly recommended to check this file into your version control system.
|
11
11
|
|
12
|
-
ActiveRecord::Schema.define(:version =>
|
12
|
+
ActiveRecord::Schema.define(:version => 20090316023841) do
|
13
13
|
|
14
14
|
create_table "entries", :force => true do |t|
|
15
15
|
t.string "name", :limit => 64, :null => false
|
data/webgui/db/test.sqlite3
CHANGED
Binary file
|
@@ -11,6 +11,22 @@ h1 {
|
|
11
11
|
font-size: 24px;
|
12
12
|
color: gray;
|
13
13
|
}
|
14
|
+
.poollistblock {
|
15
|
+
margin-left: 10px;
|
16
|
+
}
|
17
|
+
.poollistinfo {
|
18
|
+
margin-left: 20px;
|
19
|
+
font-size: small;
|
20
|
+
}
|
21
|
+
.poollistinfodetail {
|
22
|
+
margin-left: 40px;
|
23
|
+
text-indent: -40px;
|
24
|
+
}
|
25
|
+
.poollisthead {
|
26
|
+
font-size: 14px;
|
27
|
+
font-weight: bold;
|
28
|
+
color: green;
|
29
|
+
}
|
14
30
|
#wrap {
|
15
31
|
margin:0 auto;
|
16
32
|
width:auto;
|
@@ -142,3 +158,26 @@ div.auto_complete ul strong.highlight {
|
|
142
158
|
padding:0;
|
143
159
|
}
|
144
160
|
|
161
|
+
/* CSS Tooltips */
|
162
|
+
a.info {
|
163
|
+
position:relative; /*this is the key*/
|
164
|
+
z-index:24;
|
165
|
+
text-decoration:none
|
166
|
+
}
|
167
|
+
|
168
|
+
a.info:hover {
|
169
|
+
z-index:25;
|
170
|
+
}
|
171
|
+
|
172
|
+
a.info span {
|
173
|
+
display: none
|
174
|
+
}
|
175
|
+
|
176
|
+
a.info:hover span { /*the span will display just on :hover state*/
|
177
|
+
display:block;
|
178
|
+
position:absolute;
|
179
|
+
top:-2em; left:2em; width:400px;
|
180
|
+
border:1px solid #0cf;
|
181
|
+
padding: 5px;
|
182
|
+
background-color:#cff; color:#000;
|
183
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
table.report {
|
2
|
+
border-spacing: 0px;
|
3
|
+
border-width: 2px;
|
4
|
+
border-color: black;
|
5
|
+
border-style: solid;
|
6
|
+
border-collapse: separate;
|
7
|
+
text-align: center;
|
8
|
+
}
|
9
|
+
table.report td {
|
10
|
+
padding: 5px;
|
11
|
+
border-bottom: 2px solid black;
|
12
|
+
}
|
13
|
+
table.report thead {
|
14
|
+
background: lightblue;
|
15
|
+
border-width: 2px;
|
16
|
+
border-color: black;
|
17
|
+
border-style: solid;
|
18
|
+
font-weight: bold;
|
19
|
+
vertical-align: bottom;
|
20
|
+
}
|
21
|
+
table.report tbody tr.even {
|
22
|
+
background: lightyellow;
|
23
|
+
}
|
24
|
+
table.report tbody tr.odd {
|
25
|
+
background: white;
|
26
|
+
}
|
@@ -2239,13 +2239,13 @@ MSM:
|
|
2239
2239
|
short_name: MSM
|
2240
2240
|
|
2241
2241
|
|
2242
|
-
|
2242
|
+
Ill:
|
2243
2243
|
|
2244
2244
|
name: Illinois
|
2245
2245
|
created_at: 2009-03-01 04:12:30
|
2246
2246
|
updated_at: 2009-03-01 04:12:30
|
2247
2247
|
id: "160"
|
2248
|
-
short_name:
|
2248
|
+
short_name: Ill
|
2249
2249
|
|
2250
2250
|
|
2251
2251
|
Lgw:
|
@@ -213,4 +213,89 @@ class TeamsControllerTest < ActionController::TestCase
|
|
213
213
|
assert_equal 16, pool.region_seedings[0][1].uniq.size, "OOPS! There are dupe teams in region 0 teams list"
|
214
214
|
assert_equal input["region0"]["seedings"].map {|h| h["short_name"]}, pool.region_seedings[0][1].uniq.map{|t| t.short_name}, "Teams are out of order or otherwise not equal"
|
215
215
|
end
|
216
|
+
|
217
|
+
test "save entire bracket with nonexistant team" do
|
218
|
+
input = {
|
219
|
+
"action"=>"change", "id"=>"1", "controller"=>"teams",
|
220
|
+
"region1"=>{"name"=>"West",
|
221
|
+
"seedings"=>[{"name"=>"Connecticut", "seed"=>"1", "short_name"=>"Con"},
|
222
|
+
{"name"=>"Memphis", "seed"=>"2", "short_name"=>"Mem"},
|
223
|
+
{"name"=>"Missouri", "seed"=>"3", "short_name"=>"Msr"},
|
224
|
+
{"name"=>"Washington", "seed"=>"4", "short_name"=>"Was"},
|
225
|
+
{"name"=>"Purdue", "seed"=>"5", "short_name"=>"Pur"},
|
226
|
+
{"name"=>"Marquette", "seed"=>"6", "short_name"=>"Mar"},
|
227
|
+
{"name"=>"California", "seed"=>"7", "short_name"=>"Cal"},
|
228
|
+
{"name"=>"BYU", "seed"=>"8", "short_name"=>"BYU"},
|
229
|
+
{"name"=>"Texas A&M", "seed"=>"9", "short_name"=>"A&M"},
|
230
|
+
{"name"=>"Maryland", "seed"=>"10", "short_name"=>"Mry"},
|
231
|
+
{"name"=>"Utah State", "seed"=>"11", "short_name"=>"USt"},
|
232
|
+
{"name"=>"Northern Iowa", "seed"=>"12", "short_name"=>"NIo"},
|
233
|
+
{"name"=>"Mississippi St.", "seed"=>"13", "short_name"=>"MiS"},
|
234
|
+
{"name"=>"Cornell", "seed"=>"14", "short_name"=>"Cor"},
|
235
|
+
{"name"=>"Cal State Northridge", "seed"=>"15", "short_name"=>"CSN"},
|
236
|
+
{"name"=>"Chattanooga", "seed"=>"16", "short_name"=>"Cht"}]},
|
237
|
+
"region2"=>{"name"=>"East",
|
238
|
+
"seedings"=>[{"name"=>"Pittsburgh", "seed"=>"1", "short_name"=>"Pit"},
|
239
|
+
{"name"=>"Duke", "seed"=>"2", "short_name"=>"Duk"},
|
240
|
+
{"name"=>"Villanova", "seed"=>"3", "short_name"=>"Vil"},
|
241
|
+
{"name"=>"Xavier", "seed"=>"4", "short_name"=>"Xav"},
|
242
|
+
{"name"=>"Florida State", "seed"=>"5", "short_name"=>"FSU"},
|
243
|
+
{"name"=>"UCLA", "seed"=>"6", "short_name"=>"ULA"},
|
244
|
+
{"name"=>"Texas", "seed"=>"7", "short_name"=>"Tex"},
|
245
|
+
{"name"=>"Oklahoma State", "seed"=>"8", "short_name"=>"OkS"},
|
246
|
+
{"name"=>"Tennessee", "seed"=>"9", "short_name"=>"Ten"},
|
247
|
+
{"name"=>"Minnesota", "seed"=>"10", "short_name"=>"Min"},
|
248
|
+
{"name"=>"Virginia Commonwealth", "seed"=>"11", "short_name"=>"VAC"},
|
249
|
+
{"name"=>"Wisconsin", "seed"=>"12", "short_name"=>"Wis"},
|
250
|
+
{"name"=>"Portland St.", "seed"=>"13", "short_name"=>"PSt"},
|
251
|
+
{"name"=>"American", "seed"=>"14", "short_name"=>"Am"},
|
252
|
+
{"name"=>"Binghamton", "seed"=>"15", "short_name"=>"Bin"},
|
253
|
+
{"name"=>"East Tennessee State", "seed"=>"16", "short_name"=>"ETS"}]},
|
254
|
+
"region3"=>{"name"=>"South",
|
255
|
+
"seedings"=>[{"name"=>"North Carolina", "seed"=>"1", "short_name"=>"UNC"},
|
256
|
+
{"name"=>"Oklahoma", "seed"=>"2", "short_name"=>"Okl"},
|
257
|
+
{"name"=>"Syracuse", "seed"=>"3", "short_name"=>"Syr"},
|
258
|
+
{"name"=>"Gonzaga", "seed"=>"4", "short_name"=>"Gon"},
|
259
|
+
{"name"=>"Illinois", "seed"=>"5", "short_name"=>"Ill"},
|
260
|
+
{"name"=>"Arizona State", "seed"=>"6", "short_name"=>"ASU"},
|
261
|
+
{"name"=>"Clemson", "seed"=>"7", "short_name"=>"Clm"},
|
262
|
+
{"name"=>"LSU", "seed"=>"8", "short_name"=>"LSU"},
|
263
|
+
{"name"=>"Butler", "seed"=>"9", "short_name"=>"But"},
|
264
|
+
{"name"=>"Michigan", "seed"=>"10", "short_name"=>"UM"},
|
265
|
+
{"name"=>"Temple", "seed"=>"11", "short_name"=>"Tem"},
|
266
|
+
{"name"=>"W. Kentucky", "seed"=>"12", "short_name"=>"WKy"},
|
267
|
+
{"name"=>"Akron", "seed"=>"13", "short_name"=>"Akr"},
|
268
|
+
{"name"=>"Stephen F. Austin", "seed"=>"14", "short_name"=>"SFA"},
|
269
|
+
{"name"=>"Morgan State", "seed"=>"15", "short_name"=>"MgS"},
|
270
|
+
{"name"=>"Radford", "seed"=>"16", "short_name"=>"Rad"}]},
|
271
|
+
"region0"=>{"name"=>"Midwest",
|
272
|
+
"seedings"=>[{"name"=>"Louisville", "seed"=>"1", "short_name"=>"Lou"},
|
273
|
+
{"name"=>"Michigan St.", "seed"=>"2", "short_name"=>"MSU"},
|
274
|
+
{"name"=>"Kansas", "seed"=>"3", "short_name"=>"Kan"},
|
275
|
+
{"name"=>"Wake Forest", "seed"=>"4", "short_name"=>"WkF"},
|
276
|
+
{"name"=>"Utah", "seed"=>"5", "short_name"=>"Uta"},
|
277
|
+
{"name"=>"West Virginia", "seed"=>"6", "short_name"=>"WVa"},
|
278
|
+
{"name"=>"Boston College", "seed"=>"7", "short_name"=>"BC"},
|
279
|
+
{"name"=>"Ohio State", "seed"=>"8", "short_name"=>"OSU"},
|
280
|
+
{"name"=>"Siena", "seed"=>"9", "short_name"=>"Sie"},
|
281
|
+
{"name"=>"USC", "seed"=>"10", "short_name"=>"USC"},
|
282
|
+
{"name"=>"Dayton", "seed"=>"11", "short_name"=>"Day"},
|
283
|
+
{"name"=>"Arizona", "seed"=>"12", "short_name"=>"UA"},
|
284
|
+
{"name"=>"Cleveland State", "seed"=>"13", "short_name"=>"ClS"},
|
285
|
+
{"name"=>"North Dakota State", "seed"=>"14", "short_name"=>"NDS"},
|
286
|
+
{"name"=>"Robert Morris", "seed"=>"15", "short_name"=>"RbM"},
|
287
|
+
{"name"=>"TBD", "seed"=>"16", "short_name"=>"TBD"}]}
|
288
|
+
}
|
289
|
+
login_as :admin
|
290
|
+
post :change, input
|
291
|
+
team = Team.find_by_name("TBD")
|
292
|
+
assert_not_nil team, "TBD team should not be null"
|
293
|
+
pool = Pool.find(1)
|
294
|
+
RAILS_DEFAULT_LOGGER.debug("POOL SEEDINGS: #{pool.seedings.inspect}")
|
295
|
+
assert_equal 64, pool.seedings.size, "OOPS! There should be 64 seedings."
|
296
|
+
team_list = pool.seedings.map{|s| s.team.name}
|
297
|
+
RAILS_DEFAULT_LOGGER.debug("POOL TEAMS: #{team_list.inspect}")
|
298
|
+
assert_equal 64, team_list.size, "OOPS! There should be 64 teams."
|
299
|
+
assert_equal 64, pool.teams.size, "OOPS! There should be 64 teams."
|
300
|
+
end
|
216
301
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tournament
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Douglas A. Seifert
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-15 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- webgui/app/views/layouts/print.html.erb
|
151
151
|
- webgui/app/views/layouts/report.html.erb
|
152
152
|
- webgui/app/views/pool/index.html.erb
|
153
|
+
- webgui/app/views/reports/_leader.html.erb
|
153
154
|
- webgui/app/views/reports/_report.html.erb
|
154
155
|
- webgui/app/views/reports/show.html.erb
|
155
156
|
- webgui/app/views/sessions/new.html.erb
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- webgui/config/initializers/inflections.rb
|
170
171
|
- webgui/config/initializers/mime_types.rb
|
171
172
|
- webgui/config/initializers/new_rails_defaults.rb
|
173
|
+
- webgui/config/initializers/ordinal.rb
|
172
174
|
- webgui/config/initializers/pool.rb
|
173
175
|
- webgui/config/initializers/site_keys.rb
|
174
176
|
- webgui/config/locales/en.yml
|
@@ -193,6 +195,7 @@ files:
|
|
193
195
|
- webgui/db/migrate/20090301025902_add_more_teams.rb
|
194
196
|
- webgui/db/migrate/20090301041526_create_seedings.rb
|
195
197
|
- webgui/db/migrate/20090301090511_create_regions.rb
|
198
|
+
- webgui/db/migrate/20090316023841_change_illinois_short_name.rb
|
196
199
|
- webgui/db/migrate/teams.txt
|
197
200
|
- webgui/db/pool.yml
|
198
201
|
- webgui/db/schema.rb
|
@@ -226,6 +229,7 @@ files:
|
|
226
229
|
- webgui/public/stylesheets/main.css
|
227
230
|
- webgui/public/stylesheets/prince.css
|
228
231
|
- webgui/public/stylesheets/prince_landscape.css
|
232
|
+
- webgui/public/stylesheets/reports.css
|
229
233
|
- webgui/script/about
|
230
234
|
- webgui/script/console
|
231
235
|
- webgui/script/dbconsole
|