mxhold/lifelike

View on GitHub
lib/lifelike/lifelike_cellular_automaton/cell_serializer.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Lifelike
  class LifelikeCellularAutomaton
    class CellSerializer
      def initialize(alive_char:, dead_char:, rules:)
        @alive_char = alive_char
        @dead_char = dead_char
        @rules = rules
      end

      def dump(cell)
        if cell.alive?
          @alive_char
        else
          @dead_char
        end
      end

      def load(char)
        Cell.new(alive?(char), @rules)
      end

      private

      def alive?(char)
        case char
        when @alive_char
          true
        when @dead_char
          false
        else
          handle_unexpected_character(char)
        end
      end

      def handle_unexpected_character(char)
        fail UnexpectedCharacterError.new(
          char,
          expected: [@alive_char, @dead_char]
        )
      end
    end
  end
end