Move completions methods to a concern
Some checks failed
CI / scan_ruby (push) Successful in 15s
CI / scan_js (push) Successful in 12s
CI / lint (push) Successful in 12s
CI / test (push) Has been cancelled

This commit is contained in:
sto 2025-03-23 09:25:32 +01:00
parent 5525cc814a
commit 7ce684ced9
3 changed files with 37 additions and 24 deletions

View File

@ -0,0 +1,30 @@
module CompletionsConcern
extend ActiveSupport::Concern
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 extend_completions!(completions)
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
end

View File

@ -1,4 +1,6 @@
class ContestantsController < ApplicationController class ContestantsController < ApplicationController
include CompletionsConcern
before_action :set_contest before_action :set_contest
before_action :set_contestant, only: %i[ destroy edit update] before_action :set_contestant, only: %i[ destroy edit update]
before_action :set_completions, only: %i[edit update ] before_action :set_completions, only: %i[edit update ]
@ -57,32 +59,10 @@ class ContestantsController < ApplicationController
@contestant = Contestant.find(params[:id]) @contestant = Contestant.find(params[:id])
end 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 def set_completions
@completions = @contestant.completions.order(:time_seconds) @completions = @contestant.completions.order(:time_seconds)
current_time_from_start = 0 extend_completions!(@completions)
@completions.each do |completion| @completions
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 end
def contestant_params def contestant_params

View File

@ -1,4 +1,6 @@
class ContestsController < ApplicationController class ContestsController < ApplicationController
include CompletionsConcern
before_action :set_contest, only: %i[ destroy edit show update ] before_action :set_contest, only: %i[ destroy edit show update ]
skip_before_action :require_authentication, only: %i[ scoreboard ] skip_before_action :require_authentication, only: %i[ scoreboard ]
@ -68,6 +70,7 @@ class ContestsController < ApplicationController
@title = @contest.name @title = @contest.name
@contestants = @contest.contestants.order(:name) @contestants = @contest.contestants.order(:name)
@puzzles = @contest.puzzles.order(:id) @puzzles = @contest.puzzles.order(:id)
extend_completions!(@contest.completions)
render :scoreboard render :scoreboard
end end