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!(contestant) current_time_from_start = 0 contestant.completions.order(:time_seconds).each do |completion| completion.update(display_time_from_start: display_time(completion.time_seconds), display_relative_time: display_time(completion.time_seconds - current_time_from_start)) current_time_from_start = completion.time_seconds end contestant.update(display_time: display_time(current_time_from_start)) end end