You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

29 lines
1.0 KiB

# Existing players predate step tracking, so the funnel would start empty.
# Their `progress` still says which stages they answered -- good enough to
# reconstruct roughly how far they got. Players with no progress at all are
# left alone: there is nothing to infer from.
class BackfillPlayerFurthestStep < ActiveRecord::Migration[8.1]
def up
Player.where(furthest_step: nil).find_each do |player|
stages = player.progress.keys.grep(/\A\d+\z/).map(&:to_i)
next if stages.empty? && !player.progress.key?(Player::LAST_SAVE_KEY)
# is_done is set on the final screen, not the results screen, so stop
# there rather than claiming they saw the results.
step =
if player.is_done?
"done"
elsif player.progress.key?(Player::LAST_SAVE_KEY)
"last_save"
else
"stage_#{stages.max}_result"
end
player.update_column(:furthest_step, step)
end
end
def down
# No-op: the reconstructed values are indistinguishable from live ones.
end
end