class ContestantsController < ApplicationController before_action :set_contest before_action :set_contestant, only: %i[ destroy edit update] before_action :set_completions, only: %i[edit update ] def edit @title = "Contestant" end def new @contestant = Contestant.new @title = "New contestant" end def create @contestant = Contestant.new(contestant_params) @contestant.contest_id = @contest.id if @contestant.save redirect_to contest_path(@contest) else @title = "New contestant" render :new, status: :unprocessable_entity end end def update if @contestant.update(contestant_params) redirect_to @contest else @title = "Contestant" render :edit, status: :unprocessable_entity end end def destroy @contestant.destroy redirect_to contest_path(@contest) end private def set_contest @contest = Contest.find(params[:contest_id]) end def set_contestant @contestant = Contestant.find(params[:id]) end def pad(n) if n > 9 return n.to_s end "0" + n.to_s end def display_time(seconds) if seconds > 3600 hours = seconds / 3600 return hours.to_s + ":" + display_time(seconds % 3600) elsif seconds > 60 minutes = seconds / 60 return pad(minutes) + ":" + display_time(seconds % 60) end pad(seconds) end def set_completions @completions = @contestant.completions.order(:time_seconds) current_time_from_start = 0 @completions.each do |completion| completion.display_time_from_start = display_time(completion.time_seconds) completion.display_relative_time = display_time(completion.time_seconds - current_time_from_start) current_time_from_start += completion.time_seconds end end def contestant_params params.expect(contestant: [ :email, :name ]) end end