Я пишу небольшую программу на 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 и более проверяемым?