class CandidateController < ApplicationController before_action :authorize_candidate, except: [:welcome, :validate, :live_coder] def welcome end def saved end def thankyou redirect_to root_path if session[:test_id].nil? reset_session end def question qid = prep_status.current_question_id redirect_to :summary and return if qid.nil? prep_question qid @answer = Answer.new end def update_answer qid = prep_status.current_question_id send "process_#{prep_question(qid).input_type}" end def live_coder question render layout: false end def summary @quiz = current_candidate.my_quiz redirect_to :question and return unless prep_status.current_question_id.nil? end # TODO def update_summary # redirect_to :summary end def validate candidate = Candidate.find_by(test_hash: params['test_id']) redirect_to(root_path, alert: "Sorry, incorrect test id") and return if candidate.nil? session[:test_id] = candidate.test_hash redirect_to :thankyou and return if candidate.completed? redirect_to :question end private def prep_question qid @question = current_candidate.fetch_question(qid) end def prep_status @status ||= QuizStatus.new(current_candidate) end def answer_params params.require(:answer).permit( :question_id, :answer_id, :save, :next, :summary, :radio, :text, checkbox: [], live_code: [] ) end def prep_answer answer_ids = { question_id: answer_params[:question_id], candidate_id: current_candidate.to_i } answer = Answer.find_or_create_by(answer_ids) answer end def route_answer if @answer.errors.present? prep_status prep_question answer_params[:question_id] flash[:answer_error] = answer_params[:question_id].to_i render :question else # TODO: change params.key? to submit = save/next/summary redirect_to :summary and return if params.key?(:update) redirect_to :saved and return if params.key?(:save) redirect_to :question end end def process_text @answer = prep_answer @answer.update(answer: answer_params[:text], saved: answer_params[:save], submitted: answer_params[:next]) route_answer end def process_radio @answer = prep_answer @answer.update(answer: answer_params[:radio], saved: answer_params[:save], submitted: answer_params[:next]) route_answer end def process_checkbox @answer = prep_answer @answer.update(answer: answer_params[:checkbox], saved: answer_params[:save], submitted: answer_params[:next]) route_answer end def process_live_code @answer = prep_answer @answer.update(answer: answer_params[:live_code], saved: answer_params[:save], submitted: answer_params[:next]) route_answer end end