module QuizHelperMethods
|
|
extend ActiveSupport::Concern
|
|
|
|
included do
|
|
before_action :require_player!
|
|
before_action :set_locale
|
|
|
|
helper_method :current_player,
|
|
:questions,
|
|
:question,
|
|
:questions_size,
|
|
:question_index,
|
|
:player_question_answer
|
|
|
|
end
|
|
|
|
|
|
private
|
|
|
|
|
|
def questions
|
|
@questions ||= Node.at_depth(1).viewable.ordered.to_a
|
|
end
|
|
|
|
|
|
def question
|
|
@question ||= questions[params[:id].to_i-1]
|
|
end
|
|
|
|
|
|
def player_question_answer
|
|
@player_question_answer ||= Answer.find_by(player_id: current_player.id, node_id: question.id)&.value
|
|
end
|
|
|
|
|
|
def questions_size
|
|
@questions_size ||= questions.size + 1
|
|
end
|
|
|
|
|
|
def question_index
|
|
@question_index ||= (params[:id].to_i + 1)
|
|
end
|
|
|
|
|
|
def require_player!
|
|
unless player_present?
|
|
redirect_to url_for(controller: 'players', action: 'new')
|
|
end
|
|
end
|
|
|
|
|
|
def current_player
|
|
Current.player ||= player_from_session
|
|
end
|
|
|
|
|
|
def player_from_session
|
|
Player.find_by(id: session[:player_id])
|
|
end
|
|
|
|
|
|
def player_present?
|
|
current_player.present?
|
|
end
|
|
end
|