diff options
| author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2019-08-27 21:21:26 -0700 | 
|---|---|---|
| committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2019-08-27 21:21:26 -0700 | 
| commit | 2d129fffd7278ce292dbb76d7b7ad493811ee22d (patch) | |
| tree | a881d4905ae5818a3971d8999374d8e53d8130cf | |
| parent | 8d2eae318e541965f031a1acaf88f14234cc2fe8 (diff) | |
Handle invalid checksums
| -rw-r--r-- | curling.rb | 11 | ||||
| -rw-r--r-- | engine.rb | 5 | 
2 files changed, 14 insertions, 2 deletions
@@ -61,7 +61,16 @@ To restart the game, run `rm k` to remove the cookie that stores your game state  end  get '/:command' do |command| -  engine = Hex.new cookies.to_h +  begin +    engine = Hex.new cookies.to_h +  rescue InvalidChecksumError +    halt 422, <<~MSG +      Invalid state, checksum does not match! +      If you lost your last valid game state, you'll have to remove your current +      cookie and start over. +    MSG +  end +    engine.step command    engine.state_h.each_pair do |key, value|      cookies[key] = value @@ -1,3 +1,6 @@ +class InvalidChecksumError < StandardError +end +  class Engine    def initialize hash      validate_checksum hash @@ -6,7 +9,7 @@ class Engine    def validate_checksum hash      if !checksum_valid? hash -      throw 'Invalid state, checksum does not match!' +      raise InvalidChecksumError      end    end  |