I think these three calc_normal/spare/strikes lines could look neater using a case statement, like:

case turn
when "spare"
   calc_spare
when "strike"
   calc_strike
else
   calc_normal(turn)
end