class QuestionsController < ApplicationController
|
|
|
|
include QuizHelperMethods
|
|
|
|
|
|
def show
|
|
not_found unless question
|
|
|
|
@answer = Answer.find_or_initialize_by(player_id: current_player.id, node_id: question.id)
|
|
end
|
|
|
|
|
|
def answer
|
|
@answer = Answer.find_by(node_id: question.id, player_id: current_player.id)
|
|
@question_answer = question.attachments.with_text.each_slice(2).to_a[@answer.value]
|
|
end
|
|
|
|
|
|
def score
|
|
|
|
not_found if result_node.blank? or current_player.answers.count < questions.size
|
|
|
|
planet_score = 0
|
|
|
|
current_player.answers.ordered.each_with_index do |answer, i|
|
|
case i
|
|
when 0, 3
|
|
planet_score += 1 if answer.value == 0
|
|
else
|
|
planet_score += 1 if answer.value == 1
|
|
end
|
|
end
|
|
|
|
current_player.update(score: planet_score)
|
|
|
|
redirect_to url_for(action: 'result')
|
|
|
|
end
|
|
|
|
|
|
|
|
def result
|
|
not_found if result_node.blank? or current_player.score.blank?
|
|
|
|
people_score = questions.count - current_player.score
|
|
score_diff = people_score - current_player.score
|
|
|
|
attachment_index = case
|
|
when score_diff >= 2
|
|
0 # People
|
|
when score_diff <= -2
|
|
1 # Planet
|
|
else
|
|
2 # Balanced
|
|
end
|
|
|
|
@result_attachment = result_node.attachments.offset(attachment_index).first
|
|
@stats_attachment = result_node.attachments.offset(3).first
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|