mirror of
https://github.com/jcwimer/wrestlingApp
synced 2026-03-25 01:14:43 +00:00
Added a sort by bout number for assign_next_match
This commit is contained in:
@@ -34,6 +34,14 @@ From here, you can run the normal rails commands.
|
||||
|
||||
To deploy a a full local version of the app `bash deploy/deploy-test.sh` (this requires docker-compose to be installed). This deploys a full version of the app. App, delayed job, memcached, and mariadb. Now, you can open [http://localhost](http://localhost). Delayed jobs are turned off in dev and everything that is a delayed job in prod just runs in browser.
|
||||
|
||||
To run a single test file:
|
||||
1. Get a shell with ruby and rails: `bash bin/rails-dev-run.sh wrestlingdev-development`
|
||||
2. `rake test TEST=test/models/match_test.rb`
|
||||
|
||||
To run a single test inside a file:
|
||||
1. Get a shell with ruby and rails: `bash bin/rails-dev-run.sh wrestlingdev-development`
|
||||
2. `rake test TEST=test/models/match_test.rb TESTOPTS="--name='/test_Match_should_not_be_valid_if_an_incorrect_win_type_is_given/'"`
|
||||
|
||||
# Deployment
|
||||
|
||||
The production version of this is currently deployed in Kubernetes. See [Deploying with Kubernetes](deploy/kubernetes/README.md)
|
||||
|
||||
@@ -46,7 +46,7 @@ class MatchesController < ApplicationController
|
||||
end
|
||||
format.json { head :no_content }
|
||||
else
|
||||
format.html { render action: 'edit' }
|
||||
format.html { redirect_to session.delete(:return_path), alert: "Match did not save because: #{@match.errors.full_messages.to_s}" }
|
||||
format.json { render json: @match.errors, status: :unprocessable_entity }
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,7 +21,7 @@ class Mat < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def assign_next_match
|
||||
t_matches = tournament.matches.select{|m| m.mat_id == nil && m.finished != 1 && m.bout_number != nil}
|
||||
t_matches = tournament.matches.select{|m| m.mat_id == nil && m.finished != 1 && m.bout_number != nil}.sort_by{|m| m.bout_number}
|
||||
if t_matches.size > 0
|
||||
match = t_matches.sort_by{|m| m.bout_number}.first
|
||||
match.mat_id = self.id
|
||||
|
||||
@@ -4,6 +4,7 @@ class Match < ActiveRecord::Base
|
||||
belongs_to :mat, touch: true
|
||||
has_many :wrestlers, :through => :weight
|
||||
has_many :schools, :through => :wrestlers
|
||||
validate :score_validation, :win_type_validation, :bracket_position_validation
|
||||
after_update :after_finished_actions, :if => :saved_change_to_finished? or :saved_change_to_winner_id? or :saved_change_to_win_type? or :saved_change_to_score?
|
||||
|
||||
def after_finished_actions
|
||||
@@ -24,6 +25,34 @@ class Match < ActiveRecord::Base
|
||||
|
||||
BRACKET_POSITIONS = ["Pool","1/2","3/4","5/6","7/8","Quarter","Semis","Conso Semis","Bracket","Conso", "Conso Quarter"]
|
||||
WIN_TYPES = ["Decision", "Major", "Tech Fall", "Pin", "Forfeit", "Injury Default", "Default", "DQ", "BYE"]
|
||||
|
||||
def score_validation
|
||||
if finished == 1
|
||||
if win_type == "Pin" and ! score.match(/^[0-5]?[0-9]:[0-5][0-9]/)
|
||||
errors.add(:score, "needs to be in time format MM:SS when win type is Pin example: 1:23 or 10:03")
|
||||
end
|
||||
if win_type == "Decision" or win_type == "Tech Fall" or win_type == "Major" and ! score.match(/^[0-9]?[0-9]-[0-9]?[0-9]/)
|
||||
errors.add(:score, "needs to be in Number-Number format when win type is Decision, Tech Fall, and Major example: 10-2")
|
||||
end
|
||||
if (win_type == "Forfeit" or win_type == "Injury Default" or win_type == "Default" or win_type == "BYE" or win_type == "DQ") and (score != "")
|
||||
errors.add(:score, "needs to be blank when win type is Forfeit, Injury Default, Default, BYE, or DQ win_type")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def win_type_validation
|
||||
if finished == 1
|
||||
if ! WIN_TYPES.include? win_type
|
||||
errors.add(:win_type, "can only be one of the following #{WIN_TYPES.to_s}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def bracket_position_validation
|
||||
if ! BRACKET_POSITIONS.include? bracket_position
|
||||
errors.add(:bracket_position, "can only be one of the following #{BRACKET_POSITIONS.to_s}")
|
||||
end
|
||||
end
|
||||
|
||||
def is_consolation_match
|
||||
if self.bracket_position == "Conso" or self.bracket_position == "Conso Quarter" or self.bracket_position == "Conso Semis" or self.bracket_position == "3/4" or self.bracket_position == "5/6" or self.bracket_position == "7/8"
|
||||
|
||||
@@ -52,11 +52,13 @@ class EightManDoubleEliminationGenerateLoserNames
|
||||
if match.w1 != nil
|
||||
match.winner_id = match.w1
|
||||
match.loser2_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
elsif match.w2 != nil
|
||||
match.winner_id = match.w2
|
||||
match.loser1_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
end
|
||||
|
||||
@@ -72,11 +72,13 @@ class ModifiedSixteenManGenerateLoserNames
|
||||
if match.w1 != nil
|
||||
match.winner_id = match.w1
|
||||
match.loser2_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
elsif match.w2 != nil
|
||||
match.winner_id = match.w2
|
||||
match.loser1_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
end
|
||||
|
||||
@@ -81,11 +81,13 @@ class SixteenManDoubleEliminationGenerateLoserNames
|
||||
if match.w1 != nil
|
||||
match.winner_id = match.w1
|
||||
match.loser2_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
elsif match.w2 != nil
|
||||
match.winner_id = match.w2
|
||||
match.loser1_name = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
match.advance_wrestlers
|
||||
end
|
||||
|
||||
@@ -40,6 +40,9 @@
|
||||
<% if notice %>
|
||||
<p id="notice" class="alert alert-success alert-dismissible"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a><%= notice %></p>
|
||||
<% end %>
|
||||
<% if alert %>
|
||||
<p id="alert" class="alert alert-danger alert-dismissible"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a><%= alert %></p>
|
||||
<% end %>
|
||||
<div id="view"><%= yield %></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</div>
|
||||
<br>
|
||||
<div class="field">
|
||||
<%= f.label "Final Score" %> Also put pin time here if applicable. If default or forfeit, leave blank. Example: 7-2, 17-2, or 2:34<br>
|
||||
<%= f.label "Final Score" %> For decision, major, or tech fall put the score here in Number-Number format. If pin, put the accumulated pin time in the format MM:SS. If default, injury default, dq, bye, or forfeit, leave blank. Examples: 7-2, 17-2, 0:30, or 2:34<br>
|
||||
<%= f.text_field :score %>
|
||||
</div>
|
||||
<br>
|
||||
@@ -104,6 +104,9 @@
|
||||
<% end %>
|
||||
|
||||
<script>
|
||||
// Localstorage
|
||||
// https://stackoverflow.com/questions/12806198/how-do-i-save-data-on-localstorage-in-ruby-on-rails-3-2-8
|
||||
|
||||
//Create person object
|
||||
function Person(stats){
|
||||
this.stats=stats;
|
||||
@@ -112,11 +115,28 @@
|
||||
//Declare variables
|
||||
var w1=new Person("");
|
||||
var w2=new Person("");
|
||||
updatejsvalues();
|
||||
|
||||
// Get variables
|
||||
var tournament=<%= @match.tournament.id %>;
|
||||
var bout=<%= @match.bout_number %>;
|
||||
|
||||
// if localstorage tournament id and bout number are the same and the html stat values are blank
|
||||
// if the html stat values are not blank we want to honor what came from the db
|
||||
if (localStorage.getItem('wrestler1') && localStorage.tournament == tournament && localStorage.bout == bout && document.getElementById("match_w1_stat").value == "" && document.getElementById("match_w2_stat").value == "") {
|
||||
w1.stats = localStorage.getItem('wrestler1');
|
||||
w2.stats = localStorage.getItem('wrestler2');
|
||||
updatehtmlvalues();
|
||||
} else {
|
||||
updateLocalStorage();
|
||||
}
|
||||
|
||||
|
||||
function updatehtmlvalues(){
|
||||
document.getElementById("match_w1_stat").value = w1.stats;
|
||||
document.getElementById("match_w2_stat").value = w2.stats;
|
||||
}
|
||||
|
||||
function updatejsvalues(){
|
||||
w1.stats=document.getElementById("match_w1_stat").value;
|
||||
w2.stats=document.getElementById("match_w2_stat").value;
|
||||
@@ -130,6 +150,14 @@
|
||||
updatejsvalues();
|
||||
wrestler.stats = wrestler.stats + text + " ";
|
||||
updatehtmlvalues();
|
||||
updateLocalStorage();
|
||||
}
|
||||
|
||||
function updateLocalStorage(){
|
||||
localStorage.setItem("wrestler1",w1.stats);
|
||||
localStorage.setItem("wrestler2",w2.stats);
|
||||
localStorage.setItem("bout", bout);
|
||||
localStorage.setItem("tournament", tournament);
|
||||
}
|
||||
|
||||
//For Changing button colors
|
||||
@@ -178,7 +206,7 @@
|
||||
redColor("w1-top");
|
||||
redColor("w1-bottom");
|
||||
redColor("w1-nuetral");
|
||||
redColor("w1-differ");
|
||||
redColor("w1-defer");
|
||||
redColor("w1-stalling");
|
||||
redColor("w1-caution");
|
||||
}
|
||||
@@ -194,7 +222,7 @@
|
||||
greenColor("w1-top");
|
||||
greenColor("w1-bottom");
|
||||
greenColor("w1-nuetral");
|
||||
greenColor("w1-differ");
|
||||
greenColor("w1-defer");
|
||||
greenColor("w1-stalling");
|
||||
greenColor("w1-caution");
|
||||
}
|
||||
@@ -210,7 +238,7 @@
|
||||
redColor("w2-top");
|
||||
redColor("w2-bottom");
|
||||
redColor("w2-nuetral");
|
||||
redColor("w2-differ");
|
||||
redColor("w2-defer");
|
||||
redColor("w2-stalling");
|
||||
redColor("w2-caution");
|
||||
}
|
||||
@@ -226,7 +254,7 @@
|
||||
greenColor("w2-top");
|
||||
greenColor("w2-bottom");
|
||||
greenColor("w2-nuetral");
|
||||
greenColor("w2-differ");
|
||||
greenColor("w2-defer");
|
||||
greenColor("w2-stalling");
|
||||
greenColor("w2-caution");
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ task :finish_seed_tournaments => :environment do
|
||||
end
|
||||
if match.winner_id
|
||||
match.finished = 1
|
||||
match.win_type = "Decision"
|
||||
match.score = "2-1"
|
||||
match.save
|
||||
end
|
||||
|
||||
@@ -16,6 +16,7 @@ class PoolToBracketAdvancementTest < ActionDispatch::IntegrationTest
|
||||
match.winner_id = match.w2
|
||||
end
|
||||
match.finished = 1
|
||||
match.win_type = "Decision"
|
||||
match.score = "2-1"
|
||||
match.save
|
||||
end
|
||||
|
||||
@@ -1,7 +1,120 @@
|
||||
require 'test_helper'
|
||||
|
||||
class MatchTest < ActiveSupport::TestCase
|
||||
test "the truth" do
|
||||
assert true
|
||||
test "Match should not be valid if win type is a pin and a score is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Pin"
|
||||
match.score = "0-0"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
test "Match should not be valid if win type is a pin and an incorrect time is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Pin"
|
||||
match.score = ":03"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
test "Match should be valid if win type is a pin and a correct time is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Pin"
|
||||
match.score = "0:03"
|
||||
match.save
|
||||
assert match.valid?
|
||||
end
|
||||
test "Match should be valid if win type is a pin and a correct time is provided with an extra 0" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Pin"
|
||||
match.score = "00:03"
|
||||
match.save
|
||||
assert match.valid?
|
||||
end
|
||||
test "Match should be valid if win type is a decision and a correct score is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Decision"
|
||||
match.score = "1-0"
|
||||
match.save
|
||||
assert match.valid?
|
||||
end
|
||||
test "Match should not be valid if win type is a decision and a time is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "Decision"
|
||||
match.score = "1:00"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
test "Match should not be valid if win type is a bye and a score is provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "BYE"
|
||||
match.score = "1:00"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
test "Match should be valid if win type is a bye and a score is not provided" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "BYE"
|
||||
match.score = ""
|
||||
match.save
|
||||
assert match.valid?
|
||||
end
|
||||
test "Match should not be valid if an incorrect win type is given" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.winner_id = match.w1
|
||||
match.finished = 1
|
||||
match.win_type = "TEST"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
test "Match should not be valid if an incorrect bracket position is given" do
|
||||
create_double_elim_tournament_single_weight(14, "Regular Double Elimination 1-8")
|
||||
matches = @tournament.matches.reload
|
||||
round1 = matches.select{|m| m.round == 1}
|
||||
match = matches.first
|
||||
match.bracket_position = "TEST"
|
||||
match.save
|
||||
assert !match.valid?
|
||||
end
|
||||
end
|
||||
|
||||
@@ -191,7 +191,7 @@ class ActiveSupport::TestCase
|
||||
|
||||
def end_match(match,winner)
|
||||
match.win_type = "Decision"
|
||||
match.score = 1-0
|
||||
match.score = "1-0"
|
||||
save_match(match,winner)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user