87 lines
1.8 KiB
Ruby
87 lines
1.8 KiB
Ruby
class ContestsController < ApplicationController
|
|
before_action :set_contest, only: %i[ destroy edit show update ]
|
|
skip_before_action :require_authentication, only: %i[ scoreboard ]
|
|
|
|
def index
|
|
authorize :contest
|
|
|
|
@contests = current_user.contests
|
|
@title = I18n.t("contests.index.title", username: current_user.username)
|
|
end
|
|
|
|
def show
|
|
authorize @contest
|
|
|
|
@title = I18n.t("contests.show.title", name: @contest.name)
|
|
@contestants = @contest.contestants.order(:name)
|
|
@puzzles = @contest.puzzles.order(:id)
|
|
set_badges
|
|
end
|
|
|
|
def edit
|
|
authorize @contest
|
|
end
|
|
|
|
def new
|
|
authorize :contest
|
|
|
|
@contest = Contest.new
|
|
end
|
|
|
|
def create
|
|
authorize :contest
|
|
|
|
@contest = Contest.new(contest_params)
|
|
@contest.user_id = current_user.id
|
|
if @contest.save
|
|
redirect_to @contest
|
|
else
|
|
render :new, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def update
|
|
authorize @contest
|
|
|
|
if @contest.update(contest_params)
|
|
redirect_to @contest
|
|
else
|
|
render :edit, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
authorize @contest
|
|
end
|
|
|
|
def scoreboard
|
|
@contest = Contest.find_by(slug: params[:id])
|
|
unless @contest
|
|
skip_authorization
|
|
not_found and return
|
|
end
|
|
authorize @contest
|
|
|
|
@title = I18n.t("contests.scoreboard.title", name: @contest.name)
|
|
@contestants = @contest.contestants.order(:name)
|
|
@puzzles = @contest.puzzles.order(:id)
|
|
render :scoreboard
|
|
end
|
|
|
|
private
|
|
|
|
def set_badges
|
|
@badges = []
|
|
@badges.push("team") if @contest.team
|
|
@badges.push("registration") if @contest.allow_registration
|
|
end
|
|
|
|
def set_contest
|
|
@contest = Contest.find(params[:id])
|
|
end
|
|
|
|
def contest_params
|
|
params.expect(contest: [ :name, :team, :allow_registration ])
|
|
end
|
|
end
|