class Player < ApplicationRecord # progress shape: # { "1" => { "answer_id" => 42, "result_id" => 99 }, "2" => { ... }, # "last_save" => { "answer_id" => 7 } } LAST_SAVE_KEY = "last_save".freeze def record_answer(stage, answer_id) stage_data(stage)["answer_id"] = answer_id save end def record_result(stage, result_id) stage_data(stage)["result_id"] = result_id save end def answer_id_for(stage) progress[stage.to_s]&.dig("answer_id") end def result_id_for(stage) progress[stage.to_s]&.dig("result_id") end def record_last_save_answer(answer_id) stage_data(LAST_SAVE_KEY)["answer_id"] = answer_id save end def last_save_answer_id progress[LAST_SAVE_KEY]&.dig("answer_id") end private def stage_data(stage) progress[stage.to_s] ||= {} end end