acpc_poker_types 6.2.3 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/acpc_poker_types.rb +2 -2
- data/lib/acpc_poker_types/dealer_data.rb +9 -0
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/action_messages.rb +10 -10
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/hand_data.rb +4 -4
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/hand_results.rb +8 -8
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/log_file.rb +1 -1
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/match_definition.rb +1 -1
- data/lib/acpc_poker_types/{acpc_dealer_data → dealer_data}/poker_match_data.rb +44 -56
- data/lib/acpc_poker_types/{player_group.rb → hand_player_group.rb} +1 -1
- data/lib/acpc_poker_types/match_state.rb +11 -8
- data/lib/acpc_poker_types/player.rb +50 -0
- data/lib/acpc_poker_types/players_at_the_table.rb +168 -0
- data/lib/acpc_poker_types/version.rb +1 -1
- data/spec/{action_messages_spec.rb → dealer_data/action_messages_spec.rb} +60 -61
- data/spec/{hand_data_spec.rb → dealer_data/hand_data_spec.rb} +26 -27
- data/spec/{hand_results_spec.rb → dealer_data/hand_results_spec.rb} +17 -18
- data/spec/{match_definition_spec.rb → dealer_data/match_definition_spec.rb} +10 -11
- data/spec/{poker_match_data_spec.rb → dealer_data/poker_match_data_spec.rb} +48 -7
- data/spec/{player_group_spec.rb → hand_player_group_spec.rb} +3 -10
- data/spec/hand_player_spec.rb +1 -1
- data/spec/match_state_spec.rb +118 -76
- data/spec/player_spec.rb +45 -0
- data/spec/players_at_the_table_spec.rb +133 -0
- metadata +60 -136
- data/lib/acpc_poker_types/acpc_dealer_data.rb +0 -9
- data/spec/coverage/assets/0.7.1/application.css +0 -1110
- data/spec/coverage/assets/0.7.1/application.js +0 -626
- data/spec/coverage/assets/0.7.1/fancybox/blank.gif +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_close.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_loading.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_nav_left.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_nav_right.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_e.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_n.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_ne.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_nw.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_s.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_se.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_sw.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_shadow_w.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_title_left.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_title_main.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_title_over.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancy_title_right.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancybox-x.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancybox-y.png +0 -0
- data/spec/coverage/assets/0.7.1/fancybox/fancybox.png +0 -0
- data/spec/coverage/assets/0.7.1/favicon_green.png +0 -0
- data/spec/coverage/assets/0.7.1/favicon_red.png +0 -0
- data/spec/coverage/assets/0.7.1/favicon_yellow.png +0 -0
- data/spec/coverage/assets/0.7.1/loading.gif +0 -0
- data/spec/coverage/assets/0.7.1/magnify.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/spec/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/spec/coverage/index.html +0 -72
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
require 'acpc_poker_types/chip_stack'
|
4
|
+
require 'acpc_poker_types/hand_player'
|
5
|
+
require 'acpc_poker_types/hand'
|
6
|
+
|
7
|
+
module AcpcPokerTypes
|
8
|
+
|
9
|
+
class NilHandPlayer < HandPlayer
|
10
|
+
def initialize()
|
11
|
+
@hand = Hand.new
|
12
|
+
@initial_stack = 0
|
13
|
+
@ante = 0
|
14
|
+
@winnings = ChipStack.new 0
|
15
|
+
@actions = [[]]
|
16
|
+
end
|
17
|
+
def stack() 0 end
|
18
|
+
def contributions() [] end
|
19
|
+
def total_contribution() 0 end
|
20
|
+
def legal_actions(
|
21
|
+
round: 0,
|
22
|
+
amount_to_call: ChipStack.new(0),
|
23
|
+
wager_illegal: false
|
24
|
+
) [] end
|
25
|
+
def inactive?() false end
|
26
|
+
def all_in?() false end
|
27
|
+
def folded?() false end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Player < DelegateClass(HandPlayer)
|
31
|
+
attr_reader :seat, :hand_player
|
32
|
+
attr_accessor :balance
|
33
|
+
|
34
|
+
def initialize(seat)
|
35
|
+
@seat = seat
|
36
|
+
@balance = 0
|
37
|
+
@hand_player = NilHandPlayer.new
|
38
|
+
|
39
|
+
super @hand_player
|
40
|
+
end
|
41
|
+
|
42
|
+
def hand_player=(new_hand_player)
|
43
|
+
@hand_player = new_hand_player
|
44
|
+
|
45
|
+
__setobj__ @hand_player
|
46
|
+
|
47
|
+
@hand_player
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'acpc_poker_types/seat'
|
2
|
+
require 'acpc_poker_types/poker_action'
|
3
|
+
require 'acpc_poker_types/player'
|
4
|
+
|
5
|
+
require 'contextual_exceptions'
|
6
|
+
using ContextualExceptions::ClassRefinement
|
7
|
+
|
8
|
+
module AcpcPokerTypes
|
9
|
+
module MapWithIndex
|
10
|
+
refine Array do
|
11
|
+
def map_with_index
|
12
|
+
i = 0
|
13
|
+
map do |elem|
|
14
|
+
result = yield elem, i
|
15
|
+
i += 1
|
16
|
+
result
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
using AcpcPokerTypes::MapWithIndex
|
23
|
+
|
24
|
+
|
25
|
+
module AcpcPokerTypes
|
26
|
+
|
27
|
+
class PlayersAtTheTable
|
28
|
+
exceptions :player_acted_before_sitting_at_table,
|
29
|
+
:no_players_to_seat, :multiple_players_have_the_same_seat
|
30
|
+
|
31
|
+
attr_reader :players, :match_state, :game_def
|
32
|
+
|
33
|
+
class << self; alias_method(:seat_players, :new) end
|
34
|
+
|
35
|
+
# @param [GameDefinition] game_def The game definition for the
|
36
|
+
# match these players are playing
|
37
|
+
# @param [#to_i] seat The user's seat. Defaults to zero.
|
38
|
+
def initialize(game_def, seat = 0)
|
39
|
+
@players = game_def.number_of_players.times.map do |i|
|
40
|
+
Player.new(
|
41
|
+
Seat.new(i, game_def.number_of_players)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
@game_def = game_def
|
45
|
+
@seat = Seat.new(seat, game_def.number_of_players)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param [MatchState] match_state The next match state.
|
49
|
+
def update!(match_state)
|
50
|
+
@match_state = match_state
|
51
|
+
|
52
|
+
update_players!
|
53
|
+
end
|
54
|
+
|
55
|
+
# @return [Boolean] +true+ if the hand has ended, +false+ otherwise.
|
56
|
+
def hand_ended?
|
57
|
+
return false unless @match_state
|
58
|
+
|
59
|
+
@match_state.hand_ended? @game_def
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [Player] The player with the dealer button.
|
63
|
+
def dealer_player
|
64
|
+
return Player.new(nil) unless @match_state
|
65
|
+
@players.find { |player| position_relative_to_dealer(player) == @players.length - 1}
|
66
|
+
end
|
67
|
+
def big_blind_payer
|
68
|
+
@players.find do |plyr|
|
69
|
+
position_relative_to_dealer(plyr) == @game_def.blinds.index(@game_def.blinds.max)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
def small_blind_payer
|
73
|
+
@players.find do |plyr|
|
74
|
+
position_relative_to_dealer(plyr) == (
|
75
|
+
@game_def.blinds.index do |blind|
|
76
|
+
blind < @game_def.blinds.max && blind > 0
|
77
|
+
end
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
def next_player_to_act
|
82
|
+
return Player.new(nil) if @match_state.nil? || hand_ended?
|
83
|
+
|
84
|
+
@players.find { |plyr| position_relative_to_dealer(plyr) == @match_state.next_to_act(@game_def) }
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [Boolean] +true+ if it is the user's turn to act, +false+ otherwise.
|
88
|
+
def users_turn_to_act?
|
89
|
+
return false if @match_state.nil? || hand_ended?
|
90
|
+
|
91
|
+
next_player_to_act.seat == seat
|
92
|
+
end
|
93
|
+
|
94
|
+
# @param [Integer] player The player of which the position relative to the
|
95
|
+
# dealer is desired.
|
96
|
+
# @return [Integer] The position relative to the dealer of the given player,
|
97
|
+
# +player+, indexed such that the player immediately to to the left of the
|
98
|
+
# dealer has a +position_relative_to_dealer+ of zero.
|
99
|
+
# @raise (see Integer#seat_from_relative_position)
|
100
|
+
# @raise (see Integer#position_relative_to)
|
101
|
+
def position_relative_to_dealer(player)
|
102
|
+
(seat.seats_to(player) + users_position_relative_to_dealer) % @players.length
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [Array] The set of legal actions for the currently acting player.
|
106
|
+
def legal_actions
|
107
|
+
return [] unless @match_state
|
108
|
+
|
109
|
+
@match_state.players(@game_def)[users_position_relative_to_dealer].legal_actions
|
110
|
+
end
|
111
|
+
|
112
|
+
# @return [String] player acting sequence as a string.
|
113
|
+
def player_acting_sequence_string
|
114
|
+
(player_acting_sequence.map { |per_round| per_round.join('') }).join('/')
|
115
|
+
end
|
116
|
+
|
117
|
+
# @return [Array<Array<Integer>>] The sequence of seats that acted,
|
118
|
+
# separated by round.
|
119
|
+
def player_acting_sequence
|
120
|
+
return [[]] unless @match_state
|
121
|
+
|
122
|
+
@match_state.player_acting_sequence(@game_def).map do |actions_per_round|
|
123
|
+
next [] if actions_per_round.empty?
|
124
|
+
|
125
|
+
actions_per_round.map do |pos_rel_dealer|
|
126
|
+
seat(pos_rel_dealer)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def seat(pos_rel_dealer = users_position_relative_to_dealer)
|
132
|
+
return @seat if pos_rel_dealer == users_position_relative_to_dealer
|
133
|
+
|
134
|
+
Seat.new(
|
135
|
+
@seat + Seat.new(users_position_relative_to_dealer, @game_def.number_of_players).seats_to(pos_rel_dealer),
|
136
|
+
@game_def.number_of_players
|
137
|
+
)
|
138
|
+
end
|
139
|
+
|
140
|
+
def users_position_relative_to_dealer
|
141
|
+
@match_state.position_relative_to_dealer
|
142
|
+
end
|
143
|
+
|
144
|
+
private
|
145
|
+
|
146
|
+
def update_players!
|
147
|
+
return self if @match_state.first_state_of_first_round?
|
148
|
+
|
149
|
+
@players.each do |plyr|
|
150
|
+
plyr.hand_player = @match_state.players(@game_def)[position_relative_to_dealer(plyr)]
|
151
|
+
end
|
152
|
+
|
153
|
+
distribute_chips! if hand_ended?
|
154
|
+
|
155
|
+
self
|
156
|
+
end
|
157
|
+
|
158
|
+
# Distribute chips to all winning players
|
159
|
+
# @param [BoardCards] board_cards The community board cards.
|
160
|
+
def distribute_chips!
|
161
|
+
@players.each do |plyr|
|
162
|
+
plyr.balance += plyr.hand_player.balance
|
163
|
+
end
|
164
|
+
|
165
|
+
self
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
1
|
# Spec helper (must include first to track code coverage with SimpleCov)
|
3
|
-
require_relative 'support/spec_helper'
|
2
|
+
require_relative '../support/spec_helper'
|
4
3
|
|
5
4
|
require 'mocha/setup'
|
6
5
|
|
@@ -8,11 +7,11 @@ require 'acpc_dealer'
|
|
8
7
|
require 'acpc_poker_types/match_state'
|
9
8
|
require 'acpc_poker_types/poker_action'
|
10
9
|
|
11
|
-
require 'acpc_poker_types/
|
12
|
-
require 'acpc_poker_types/
|
13
|
-
require 'acpc_poker_types/
|
10
|
+
require 'acpc_poker_types/dealer_data/action_messages'
|
11
|
+
require 'acpc_poker_types/dealer_data/match_definition'
|
12
|
+
require 'acpc_poker_types/dealer_data/log_file'
|
14
13
|
|
15
|
-
describe AcpcPokerTypes::
|
14
|
+
describe AcpcPokerTypes::DealerData::ActionMessages do
|
16
15
|
before do
|
17
16
|
@data = nil
|
18
17
|
@final_score = nil
|
@@ -26,33 +25,33 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
26
25
|
it 'properly parses a ACPC log "TO . . ." line' do
|
27
26
|
[
|
28
27
|
"TO 1 at 1341695999.222281 MATCHSTATE:0:0::5d5c|\n" =>
|
29
|
-
AcpcPokerTypes::
|
28
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
30
29
|
0,
|
31
30
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:0::5d5c|')
|
32
31
|
),
|
33
32
|
"TO 2 at 1341695920.914907 MATCHSTATE:1:0:r19686:|9hQd\n" =>
|
34
|
-
AcpcPokerTypes::
|
33
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
35
34
|
1,
|
36
35
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:0:r19686:|9hQd')
|
37
36
|
),
|
38
37
|
"TO 3 at 1341696044.566738 MATCHSTATE:2:0:rf:||8dAs\n" =>
|
39
|
-
AcpcPokerTypes::
|
38
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
40
39
|
2,
|
41
40
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:0:rf:||8dAs')
|
42
41
|
),
|
43
42
|
"TO 1 at 1341715418.808925 MATCHSTATE:0:0:fcr17162:5d5c||\n" =>
|
44
|
-
AcpcPokerTypes::
|
43
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
45
44
|
0,
|
46
45
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:0:fcr17162:5d5c||')
|
47
46
|
)
|
48
47
|
].each do |to_message_to_data|
|
49
48
|
to_message_to_data.each do |to_message, expected_values|
|
50
|
-
AcpcPokerTypes::
|
49
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_to_message(to_message).must_equal expected_values
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
54
53
|
it 'returns nil if asked to parse an improperly formatted string' do
|
55
|
-
AcpcPokerTypes::
|
54
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_to_message("improperly formatted string").must_be_nil
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
@@ -60,37 +59,37 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
60
59
|
it 'properly parses a ACPC log "FROM . . ." line' do
|
61
60
|
[
|
62
61
|
"FROM 2 at 1341695999.222410 MATCHSTATE:1:0::|9hQd:c\n" =>
|
63
|
-
AcpcPokerTypes::
|
62
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
64
63
|
1,
|
65
64
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:0::|9hQd'),
|
66
65
|
AcpcPokerTypes::PokerAction.new('c')
|
67
66
|
),
|
68
67
|
"FROM 1 at 1341695920.914935 MATCHSTATE:0:0:r19686:5d5c|:r20000\n" =>
|
69
|
-
AcpcPokerTypes::
|
68
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
70
69
|
0,
|
71
70
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:0:r19686:5d5c|'),
|
72
71
|
AcpcPokerTypes::PokerAction.new('r20000')
|
73
72
|
),
|
74
73
|
"FROM 3 at 1341696044.566938 MATCHSTATE:2:0:rfr:||8dAs:r\n" =>
|
75
|
-
AcpcPokerTypes::
|
74
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
76
75
|
2,
|
77
76
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:0:rfr:||8dAs'),
|
78
77
|
AcpcPokerTypes::PokerAction.new('r')
|
79
78
|
),
|
80
79
|
"FROM 2 at 1341715418.808896 MATCHSTATE:1:0:fc:|9hQd|:r17162\n" =>
|
81
|
-
AcpcPokerTypes::
|
80
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
82
81
|
1,
|
83
82
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:0:fc:|9hQd|'),
|
84
83
|
AcpcPokerTypes::PokerAction.new('r17162')
|
85
84
|
)
|
86
85
|
].each do |from_message_to_data|
|
87
86
|
from_message_to_data.each do |from_message, expected_values|
|
88
|
-
AcpcPokerTypes::
|
87
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_from_message(from_message).must_equal expected_values
|
89
88
|
end
|
90
89
|
end
|
91
90
|
end
|
92
91
|
it 'returns nil if asked to parse an improperly formatted string' do
|
93
|
-
AcpcPokerTypes::
|
92
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_from_message("improperly formatted string").must_be_nil
|
94
93
|
end
|
95
94
|
end
|
96
95
|
|
@@ -101,12 +100,12 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
101
100
|
'SCORE:19835|621.5|-20455.5:p1|p2|p3' => {p1: 19835, p2: 621.5, p3: -20455.5}
|
102
101
|
].each do |score_to_player_results|
|
103
102
|
score_to_player_results.each do |score_string, expected_values|
|
104
|
-
AcpcPokerTypes::
|
103
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_score(score_string).must_equal expected_values
|
105
104
|
end
|
106
105
|
end
|
107
106
|
end
|
108
107
|
it 'returns nil if asked to parse an improperly formatted string' do
|
109
|
-
AcpcPokerTypes::
|
108
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse_score("improperly formatted string").must_be_nil
|
110
109
|
end
|
111
110
|
end
|
112
111
|
|
@@ -115,17 +114,17 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
115
114
|
it 'when every hand is desired' do
|
116
115
|
init_data do |action_messages|
|
117
116
|
file_name = 'file_name'
|
118
|
-
AcpcPokerTypes::
|
117
|
+
AcpcPokerTypes::DealerData::LogFile.expects(:open).with(file_name, 'r').yields(
|
119
118
|
action_messages
|
120
119
|
).returns(
|
121
|
-
AcpcPokerTypes::
|
120
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse(
|
122
121
|
action_messages,
|
123
122
|
@player_names,
|
124
123
|
AcpcDealer::DEALER_DIRECTORY
|
125
124
|
)
|
126
125
|
)
|
127
126
|
|
128
|
-
@patient = AcpcPokerTypes::
|
127
|
+
@patient = AcpcPokerTypes::DealerData::ActionMessages.parse_file(
|
129
128
|
file_name,
|
130
129
|
@player_names,
|
131
130
|
AcpcDealer::DEALER_DIRECTORY
|
@@ -139,10 +138,10 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
139
138
|
num_hands = 1
|
140
139
|
init_data do |action_messages|
|
141
140
|
file_name = 'file_name'
|
142
|
-
AcpcPokerTypes::
|
141
|
+
AcpcPokerTypes::DealerData::LogFile.expects(:open).with(file_name, 'r').yields(
|
143
142
|
action_messages
|
144
143
|
).returns(
|
145
|
-
AcpcPokerTypes::
|
144
|
+
AcpcPokerTypes::DealerData::ActionMessages.parse(
|
146
145
|
action_messages,
|
147
146
|
@player_names,
|
148
147
|
AcpcDealer::DEALER_DIRECTORY,
|
@@ -150,7 +149,7 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
150
149
|
)
|
151
150
|
)
|
152
151
|
|
153
|
-
@patient = AcpcPokerTypes::
|
152
|
+
@patient = AcpcPokerTypes::DealerData::ActionMessages.parse_file(
|
154
153
|
file_name,
|
155
154
|
@player_names,
|
156
155
|
AcpcDealer::DEALER_DIRECTORY,
|
@@ -168,7 +167,7 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
168
167
|
describe 'from array' do
|
169
168
|
it 'when all hands are desired' do
|
170
169
|
init_data do |action_messages|
|
171
|
-
@patient = AcpcPokerTypes::
|
170
|
+
@patient = AcpcPokerTypes::DealerData::ActionMessages.parse(
|
172
171
|
action_messages,
|
173
172
|
@player_names,
|
174
173
|
AcpcDealer::DEALER_DIRECTORY
|
@@ -181,7 +180,7 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
181
180
|
@no_final_score = true
|
182
181
|
num_hands = 1
|
183
182
|
init_data do |log_statements|
|
184
|
-
@patient = AcpcPokerTypes::
|
183
|
+
@patient = AcpcPokerTypes::DealerData::ActionMessages.parse(
|
185
184
|
log_statements,
|
186
185
|
@player_names,
|
187
186
|
AcpcDealer::DEALER_DIRECTORY,
|
@@ -209,7 +208,7 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
209
208
|
@final_score = data_hash[:final_score]
|
210
209
|
@data = data_hash[:data]
|
211
210
|
@player_names = data_hash[:player_names]
|
212
|
-
@match_def = AcpcPokerTypes::
|
211
|
+
@match_def = AcpcPokerTypes::DealerData::MatchDefinition.parse(
|
213
212
|
data_hash[:action_messages].first,
|
214
213
|
@player_names,
|
215
214
|
AcpcDealer::DEALER_DIRECTORY
|
@@ -237,39 +236,39 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
237
236
|
],
|
238
237
|
data: [
|
239
238
|
[
|
240
|
-
AcpcPokerTypes::
|
239
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
241
240
|
0,
|
242
241
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:crc/cc/cc/:|TdQd/As6d6h/7h/4s')
|
243
242
|
),
|
244
|
-
AcpcPokerTypes::
|
243
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
245
244
|
1,
|
246
245
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:998:crc/cc/cc/:Jc8d|/As6d6h/7h/4s')
|
247
246
|
),
|
248
|
-
AcpcPokerTypes::
|
247
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
249
248
|
1,
|
250
249
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:998:crc/cc/cc/:Jc8d|/As6d6h/7h/4s'),
|
251
250
|
AcpcPokerTypes::PokerAction.new('r')
|
252
251
|
)
|
253
252
|
],
|
254
253
|
[
|
255
|
-
AcpcPokerTypes::
|
254
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
256
255
|
0,
|
257
256
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s')
|
258
257
|
),
|
259
|
-
AcpcPokerTypes::
|
258
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
260
259
|
1,
|
261
260
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/r:Jc8d|/As6d6h/7h/4s')
|
262
261
|
),
|
263
|
-
AcpcPokerTypes::
|
262
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
264
263
|
0,
|
265
264
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/r:|TdQd/As6d6h/7h/4s'),
|
266
265
|
AcpcPokerTypes::PokerAction.new('c')
|
267
266
|
),
|
268
|
-
AcpcPokerTypes::
|
267
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
269
268
|
0,
|
270
269
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s')
|
271
270
|
),
|
272
|
-
AcpcPokerTypes::
|
271
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
273
272
|
1,
|
274
273
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:crc/cc/cc/rc:Jc8d|TdQd/As6d6h/7h/4s')
|
275
274
|
)
|
@@ -296,47 +295,47 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
296
295
|
],
|
297
296
|
data: [
|
298
297
|
[
|
299
|
-
AcpcPokerTypes::
|
298
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
300
299
|
0,
|
301
300
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:998:cc/r5841r19996r20000:Kc6h|/QhAh8d')
|
302
301
|
),
|
303
|
-
AcpcPokerTypes::
|
302
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
304
303
|
1,
|
305
304
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:cc/r5841r19996r20000:|Qc3s/QhAh8d')
|
306
305
|
),
|
307
|
-
AcpcPokerTypes::
|
306
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
308
307
|
1,
|
309
308
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:cc/r5841r19996r20000:|Qc3s/QhAh8d:c'),
|
310
309
|
AcpcPokerTypes::PokerAction.new('c')
|
311
310
|
),
|
312
|
-
AcpcPokerTypes::
|
311
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
313
312
|
0,
|
314
313
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:998:cc/r5841r19996r20000c//:Kc6h|Qc3s/QhAh8d/Th/9d')
|
315
314
|
),
|
316
|
-
AcpcPokerTypes::
|
315
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
317
316
|
1,
|
318
317
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:cc/r5841r19996r20000c//:Kc6h|Qc3s/QhAh8d/Th/9d')
|
319
318
|
)
|
320
319
|
],
|
321
320
|
[
|
322
|
-
AcpcPokerTypes::
|
321
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
323
322
|
0,
|
324
323
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999::|TdQd')
|
325
324
|
),
|
326
|
-
AcpcPokerTypes::
|
325
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
327
326
|
1,
|
328
327
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999::Jc8d|')
|
329
328
|
),
|
330
|
-
AcpcPokerTypes::
|
329
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
331
330
|
0,
|
332
331
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999::|TdQd'),
|
333
332
|
AcpcPokerTypes::PokerAction.new('f')
|
334
333
|
),
|
335
|
-
AcpcPokerTypes::
|
334
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
336
335
|
0,
|
337
336
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:f:|TdQd')
|
338
337
|
),
|
339
|
-
AcpcPokerTypes::
|
338
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
340
339
|
1,
|
341
340
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:f:Jc8d|')
|
342
341
|
)
|
@@ -360,32 +359,32 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
360
359
|
],
|
361
360
|
data: [
|
362
361
|
[
|
363
|
-
AcpcPokerTypes::
|
362
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
364
363
|
0,
|
365
364
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfr:QsAs||/4d6d2d/5d/2c')
|
366
365
|
),
|
367
|
-
AcpcPokerTypes::
|
366
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
368
367
|
1,
|
369
368
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfr:|3s8h|/4d6d2d/5d/2c')
|
370
369
|
),
|
371
|
-
AcpcPokerTypes::
|
370
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
372
371
|
2,
|
373
372
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c')
|
374
373
|
),
|
375
|
-
AcpcPokerTypes::
|
374
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
376
375
|
2,
|
377
376
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfr:||Qd3c/4d6d2d/5d/2c'),
|
378
377
|
AcpcPokerTypes::PokerAction.new('c')
|
379
378
|
),
|
380
|
-
AcpcPokerTypes::
|
379
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
381
380
|
0,
|
382
381
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccc/ccc/rrcc/rrrfrc:QsAs|3s8h|Qd3c/4d6d2d/5d/2c')
|
383
382
|
),
|
384
|
-
AcpcPokerTypes::
|
383
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
385
384
|
1,
|
386
385
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c')
|
387
386
|
),
|
388
|
-
AcpcPokerTypes::
|
387
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
389
388
|
2,
|
390
389
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccc/ccc/rrcc/rrrfrc:|3s8h|Qd3c/4d6d2d/5d/2c')
|
391
390
|
)
|
@@ -409,34 +408,34 @@ describe AcpcPokerTypes::AcpcDealerData::ActionMessages do
|
|
409
408
|
],
|
410
409
|
data: [
|
411
410
|
[
|
412
|
-
AcpcPokerTypes::
|
411
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
413
412
|
0,
|
414
413
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:998:ccr12926r20000c:QsAs||')
|
415
414
|
),
|
416
|
-
AcpcPokerTypes::
|
415
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
417
416
|
1,
|
418
417
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:ccr12926r20000c:|3s8h|')
|
419
418
|
),
|
420
|
-
AcpcPokerTypes::
|
419
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
421
420
|
2,
|
422
421
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:998:ccr12926r20000c:||Qd3c')
|
423
422
|
),
|
424
|
-
AcpcPokerTypes::
|
423
|
+
AcpcPokerTypes::DealerData::ActionMessages::FromMessage.new(
|
425
424
|
1,
|
426
425
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:998:ccr12926r20000c:|3s8h|'),
|
427
426
|
AcpcPokerTypes::PokerAction.new('c')
|
428
427
|
)
|
429
428
|
],
|
430
429
|
[
|
431
|
-
AcpcPokerTypes::
|
430
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
432
431
|
0,
|
433
432
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:0:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c')
|
434
433
|
),
|
435
|
-
AcpcPokerTypes::
|
434
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
436
435
|
1,
|
437
436
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:1:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c')
|
438
437
|
),
|
439
|
-
AcpcPokerTypes::
|
438
|
+
AcpcPokerTypes::DealerData::ActionMessages::ToMessage.new(
|
440
439
|
2,
|
441
440
|
AcpcPokerTypes::MatchState.parse('MATCHSTATE:2:999:ccr12926r20000cc///:QsAs|3s8h|Qd3c/4d6d2d/5d/2c')
|
442
441
|
)
|