Я пишу небольшую программу на Ruby для анализа журнала истории рук с покерного сайта.
Журнал разбит на несколько строк и выглядит примерно так:
Table 123456 NL Hold'em $1/$2
5 Players
Seat 3 is the button
Seat 1: randomGuy112 $152.56
Seat 2: randomGirl99 $200
Seat 3: PokerPro $357.12
Seat 4: FishCake556 $57.19
Seat 6: MooMoo $188.98
Dealt to MooMoo [Ah, Ks]
randomGuy112 folds
randomGirl99 raises to $7
etc.. etc..
Я хочу обобщить эту информацию в объекте, который затем может, например,
сделать это по-другому или сохранить в базе данных.
Когда я изначально задумывался об этой проблеме, я думал, что у меня будет только один реально прямой класс с несколькими регулярными выражениями и несколькими операторами if / else. Затем я понял, что это может превратиться в довольно большой метод и потенциально стать кошмаром для отладки / поддержки. Имейте в виду, что для сбора действий игрока на каждом этапе игры (на префлопе, на флопе и т. Д.) Необходимо выполнить цикл.
Я также хочу заняться этим с помощью подхода TDD, но способ «одного длинного метода» означает, что тесты с проверкой более позднего ввода будут в некотором роде опираться на более ранние тесты.
Я довольно новичок в Ruby и еще не нажал 'Ruby way', чтобы что-то делать. Я ловлю себя на написании кода C #
на другом языке.
Не могли бы вы дать мне несколько советов о том, как спроектировать синтаксический анализатор, чтобы не было ни одного огромного беспорядка операторов if / else и более тестируемых?