acpc_dealer_data 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,95 @@
1
+
2
+ # Spec helper (must include first to track code coverage with SimpleCov)
3
+ require File.expand_path('../support/spec_helper', __FILE__)
4
+
5
+ require 'acpc_poker_types/game_definition'
6
+ require 'acpc_dealer'
7
+
8
+ require File.expand_path('../../lib/acpc_dealer_data/match_definition', __FILE__)
9
+
10
+ describe MatchDefinition do
11
+ before do
12
+ @name = nil
13
+ @game_def = nil
14
+ @number_of_hands = nil
15
+ @random_seed = nil
16
+ @player_names = nil
17
+ @patient = nil
18
+ end
19
+
20
+ it 'raises an exception if the number of player names does not match the number of players' do
21
+ init_components do
22
+ ->() do
23
+ @patient = MatchDefinition.new(
24
+ @name,
25
+ @game_def,
26
+ @number_of_hands,
27
+ @random_seed,
28
+ @player_names + ['extra player']
29
+ )
30
+ end.must_raise MatchDefinition::IncorrectNumberOfPlayerNames
31
+
32
+ ->() do
33
+ @patient = MatchDefinition.new(
34
+ @name,
35
+ @game_def,
36
+ @number_of_hands,
37
+ @random_seed,
38
+ [@player_names.first]
39
+ )
40
+ end.must_raise MatchDefinition::IncorrectNumberOfPlayerNames
41
+ end
42
+ end
43
+
44
+ describe 'can be created by providing components' do
45
+ it 'separately' do
46
+ init_components do
47
+ @patient = MatchDefinition.new(
48
+ @name,
49
+ @game_def,
50
+ @number_of_hands,
51
+ @random_seed,
52
+ @player_names
53
+ )
54
+
55
+ check_patient
56
+ end
57
+ end
58
+ it 'in string format "# name/game/hands/seed ..."' do
59
+ init_components do
60
+ string = "# name/game/hands/seed #{@name} #{@game_def_file_name} #{@number_of_hands} #{@random_seed}\n"
61
+ @patient = MatchDefinition.parse(string, @player_names, File.dirname(@game_def_file_name))
62
+
63
+ check_patient
64
+ end
65
+ end
66
+ end
67
+ it 'returns nil if asked to parse an improperly formatted string' do
68
+ string = 'improperly formatted string'
69
+ @patient = MatchDefinition.parse(string, ['p1', 'p2'], 'game def directory').must_be_nil
70
+ end
71
+
72
+ def init_components
73
+ @name = 'match_name'
74
+ AcpcDealer::GAME_DEFINITION_FILE_PATHS.each do |number_of_players, game_def_hash|
75
+ game_def_hash.each do |betting_type, file_name|
76
+ @game_def_file_name = file_name
77
+ @game_def = GameDefinition.parse_file(@game_def_file_name)
78
+ @number_of_hands = 100
79
+ @random_seed = 9001
80
+ @player_names = number_of_players.times.inject([]) do |names, i|
81
+ names << "p#{i}"
82
+ end
83
+
84
+ yield
85
+ end
86
+ end
87
+ end
88
+ def check_patient
89
+ @patient.name.must_equal @name
90
+ Set.new(@patient.game_def.to_a).must_equal Set.new(@game_def.to_a)
91
+ @patient.number_of_hands.must_equal @number_of_hands
92
+ @patient.random_seed.must_equal @random_seed
93
+ @patient.player_names.must_equal @player_names
94
+ end
95
+ end
@@ -0,0 +1,243 @@
1
+
2
+ # Spec helper (must include first to track code coverage with SimpleCov)
3
+ require_relative 'support/spec_helper'
4
+
5
+ require 'mocha'
6
+
7
+ require 'acpc_dealer'
8
+ require 'acpc_poker_types/match_state'
9
+ require 'acpc_poker_types/poker_action'
10
+
11
+ require_relative '../lib/acpc_dealer_data/hand_data'
12
+ require_relative '../lib/acpc_dealer_data/match_definition'
13
+ require_relative '../lib/acpc_dealer_data/poker_match_data'
14
+
15
+ describe PokerMatchData do
16
+ before do
17
+ @patient = nil
18
+ @chip_distribution = nil
19
+ @match_def = nil
20
+ @match_def_line_index = nil
21
+ @player_names = nil
22
+ @hand_number = nil
23
+ @hand_data_list = nil
24
+ @final_hand = nil
25
+ end
26
+
27
+ describe 'when given action and result messages' do
28
+ describe 'raises an exception if' do
29
+ it 'match definitions do not match' do
30
+ init_data do |action_messages, result_messages|
31
+ new_action_messages = action_messages.dup
32
+ new_action_messages[@match_def_line_index] = '# name/game/hands/seed different_name holdem.limit.2p.reverse_blinds.game 2 0\n'
33
+
34
+ ->() do
35
+ PokerMatchData.parse(
36
+ new_action_messages,
37
+ result_messages,
38
+ @player_names,
39
+ AcpcDealer::DEALER_DIRECTORY
40
+ )
41
+ end.must_raise PokerMatchData::MatchDefinitionsDoNotMatch
42
+
43
+ new_result_messages = result_messages.dup
44
+ new_result_messages[@match_def_line_index] = '# name/game/hands/seed different_name holdem.limit.2p.reverse_blinds.game 2 0\n'
45
+
46
+ ->() do
47
+ PokerMatchData.parse(
48
+ action_messages,
49
+ new_result_messages,
50
+ @player_names,
51
+ AcpcDealer::DEALER_DIRECTORY
52
+ )
53
+ end.must_raise PokerMatchData::MatchDefinitionsDoNotMatch
54
+ end
55
+ end
56
+ it 'the final scores from each set of messages do not match' do
57
+ init_data do |action_messages, result_messages|
58
+ new_action_messages = action_messages.dup
59
+ new_action_messages.pop
60
+ new_action_messages.pop
61
+ new_action_messages << 'SCORE:9001|-9001:p1|p2'
62
+
63
+ ->() do
64
+ PokerMatchData.parse(
65
+ new_action_messages,
66
+ result_messages,
67
+ @player_names,
68
+ AcpcDealer::DEALER_DIRECTORY
69
+ )
70
+ end.must_raise PokerMatchData::FinalScoresDoNotMatch
71
+
72
+ new_result_messages = result_messages.dup
73
+ new_result_messages.pop
74
+ new_result_messages.pop
75
+ new_result_messages << 'SCORE:9001|-9001:p1|p2'
76
+
77
+ ->() do
78
+ PokerMatchData.parse(
79
+ action_messages,
80
+ new_result_messages,
81
+ @player_names,
82
+ AcpcDealer::DEALER_DIRECTORY
83
+ )
84
+ end.must_raise PokerMatchData::FinalScoresDoNotMatch
85
+ end
86
+ end
87
+ end
88
+ it 'works properly on every hand' do
89
+ init_data do |action_messages, result_messages|
90
+
91
+ @patient = PokerMatchData.parse(
92
+ action_messages,
93
+ result_messages,
94
+ @player_names,
95
+ AcpcDealer::DEALER_DIRECTORY
96
+ )
97
+ @patient.seat = 0
98
+
99
+ @hand_number = 0
100
+ @patient.for_every_hand! do
101
+ @final_hand = @hand_number >= @hand_data_list.length - 1
102
+ @patient.for_every_turn! do
103
+ check_patient
104
+ end
105
+
106
+ @hand_number += 1
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def check_patient
113
+ @patient.match_def.must_equal @match_def
114
+ @patient.chip_distribution.must_equal @chip_distribution
115
+ @patient.hand_number.must_equal @hand_number
116
+ @patient.current_hand.must_equal @hand_data_list[@hand_number]
117
+ @patient.final_hand?.must_equal @final_hand
118
+ end
119
+
120
+ def init_data
121
+ data.each do |game, data_hash|
122
+ @chip_distribution = data_hash[:chip_distribution]
123
+ @match_def_line_index = data_hash[:match_def_line_index]
124
+ @player_names = data_hash[:player_names]
125
+ @match_def = MatchDefinition.parse(
126
+ data_hash[:result_messages][@match_def_line_index],
127
+ @player_names,
128
+ AcpcDealer::DEALER_DIRECTORY
129
+ )
130
+ action_messages = ActionMessages.parse(
131
+ data_hash[:action_messages],
132
+ @player_names,
133
+ AcpcDealer::DEALER_DIRECTORY
134
+ )
135
+ result_messages = HandResults.parse(
136
+ data_hash[:result_messages],
137
+ @player_names,
138
+ AcpcDealer::DEALER_DIRECTORY
139
+ )
140
+
141
+ @hand_data_list = []
142
+ action_messages.data.zip(result_messages.data).each do |action_messages_by_hand, hand_result|
143
+ @hand_data_list << HandData.new(
144
+ @match_def,
145
+ action_messages_by_hand,
146
+ hand_result
147
+ )
148
+ end
149
+
150
+ yield data_hash[:action_messages], data_hash[:result_messages]
151
+ end
152
+ end
153
+
154
+ def data
155
+ {
156
+ two_player_limit: {
157
+ action_messages:
158
+ "# name/game/hands/seed 2p.limit.h1000.r0 holdem.limit.2p.reverse_blinds.game 2 0
159
+ #--t_response 600000
160
+ #--t_hand 600000
161
+ #--t_per_hand 7000
162
+ STARTED at 1341695999.222081
163
+ TO 1 at 1341695999.222281 MATCHSTATE:0:0::5d5c|
164
+ TO 2 at 1341695999.222349 MATCHSTATE:1:0::|9hQd
165
+ FROM 2 at 1341695999.222410 MATCHSTATE:1:0::|9hQd:c
166
+ TO 1 at 1341695999.222450 MATCHSTATE:0:0:c:5d5c|
167
+ TO 2 at 1341695999.222496 MATCHSTATE:1:0:c:|9hQd
168
+ FROM 1 at 1341695999.222519 MATCHSTATE:0:0:c:5d5c|:c
169
+ TO 1 at 1341695999.222546 MATCHSTATE:0:0:cc/:5d5c|/8dAs8s
170
+ TO 2 at 1341695999.222583 MATCHSTATE:1:0:cc/:|9hQd/8dAs8s
171
+ FROM 1 at 1341695999.222605 MATCHSTATE:0:0:cc/:5d5c|/8dAs8s:c
172
+ TO 1 at 1341695999.222633 MATCHSTATE:0:0:cc/c:5d5c|/8dAs8s
173
+ TO 2 at 1341695999.222664 MATCHSTATE:1:0:cc/c:|9hQd/8dAs8s
174
+ FROM 2 at 1341695999.222704 MATCHSTATE:1:0:cc/c:|9hQd/8dAs8s:r
175
+ TO 1 at 1341695999.222734 MATCHSTATE:0:0:cc/cr:5d5c|/8dAs8s
176
+ TO 2 at 1341695999.222770 MATCHSTATE:1:0:cc/cr:|9hQd/8dAs8s
177
+ FROM 1 at 1341695999.222792 MATCHSTATE:0:0:cc/cr:5d5c|/8dAs8s:c
178
+ TO 1 at 1341695999.222820 MATCHSTATE:0:0:cc/crc/:5d5c|/8dAs8s/4h
179
+ TO 2 at 1341695999.222879 MATCHSTATE:1:0:cc/crc/:|9hQd/8dAs8s/4h
180
+ FROM 1 at 1341695999.222904 MATCHSTATE:0:0:cc/crc/:5d5c|/8dAs8s/4h:c
181
+ TO 1 at 1341695999.222932 MATCHSTATE:0:0:cc/crc/c:5d5c|/8dAs8s/4h
182
+ TO 2 at 1341695999.222964 MATCHSTATE:1:0:cc/crc/c:|9hQd/8dAs8s/4h
183
+ FROM 2 at 1341695999.223004 MATCHSTATE:1:0:cc/crc/c:|9hQd/8dAs8s/4h:c
184
+ TO 1 at 1341695999.223033 MATCHSTATE:0:0:cc/crc/cc/:5d5c|/8dAs8s/4h/6d
185
+ TO 2 at 1341695999.223069 MATCHSTATE:1:0:cc/crc/cc/:|9hQd/8dAs8s/4h/6d
186
+ FROM 1 at 1341695999.223091 MATCHSTATE:0:0:cc/crc/cc/:5d5c|/8dAs8s/4h/6d:c
187
+ TO 1 at 1341695999.223118 MATCHSTATE:0:0:cc/crc/cc/c:5d5c|/8dAs8s/4h/6d
188
+ TO 2 at 1341695999.223150 MATCHSTATE:1:0:cc/crc/cc/c:|9hQd/8dAs8s/4h/6d
189
+ FROM 2 at 1341695999.223189 MATCHSTATE:1:0:cc/crc/cc/c:|9hQd/8dAs8s/4h/6d:c
190
+ TO 1 at 1341695999.223272 MATCHSTATE:0:0:cc/crc/cc/cc:5d5c|9hQd/8dAs8s/4h/6d
191
+ TO 2 at 1341695999.223307 MATCHSTATE:1:0:cc/crc/cc/cc:5d5c|9hQd/8dAs8s/4h/6d
192
+ TO 1 at 1341695999.223333 MATCHSTATE:1:1::|5dJd
193
+ TO 2 at 1341695999.223366 MATCHSTATE:0:1::6sKs|
194
+ FROM 1 at 1341695999.223388 MATCHSTATE:1:1::|5dJd:c
195
+ TO 1 at 1341695999.223415 MATCHSTATE:1:1:c:|5dJd
196
+ TO 2 at 1341695999.223446 MATCHSTATE:0:1:c:6sKs|
197
+ FROM 2 at 1341695999.223485 MATCHSTATE:0:1:c:6sKs|:r
198
+ TO 1 at 1341695999.223513 MATCHSTATE:1:1:cr:|5dJd
199
+ TO 2 at 1341695999.223548 MATCHSTATE:0:1:cr:6sKs|
200
+ FROM 1 at 1341695999.223570 MATCHSTATE:1:1:cr:|5dJd:c
201
+ TO 1 at 1341695999.223596 MATCHSTATE:1:1:crc/:|5dJd/2sTh2h
202
+ TO 2 at 1341695999.223627 MATCHSTATE:0:1:crc/:6sKs|/2sTh2h
203
+ FROM 2 at 1341695999.223664 MATCHSTATE:0:1:crc/:6sKs|/2sTh2h:r
204
+ TO 1 at 1341695999.223692 MATCHSTATE:1:1:crc/r:|5dJd/2sTh2h
205
+ TO 2 at 1341695999.223728 MATCHSTATE:0:1:crc/r:6sKs|/2sTh2h
206
+ FROM 1 at 1341695999.223749 MATCHSTATE:1:1:crc/r:|5dJd/2sTh2h:c
207
+ TO 1 at 1341695999.223776 MATCHSTATE:1:1:crc/rc/:|5dJd/2sTh2h/Qh
208
+ TO 2 at 1341695999.223807 MATCHSTATE:0:1:crc/rc/:6sKs|/2sTh2h/Qh
209
+ FROM 2 at 1341695999.223863 MATCHSTATE:0:1:crc/rc/:6sKs|/2sTh2h/Qh:r
210
+ TO 1 at 1341695999.223897 MATCHSTATE:1:1:crc/rc/r:|5dJd/2sTh2h/Qh
211
+ TO 2 at 1341695999.223934 MATCHSTATE:0:1:crc/rc/r:6sKs|/2sTh2h/Qh
212
+ FROM 1 at 1341695999.223956 MATCHSTATE:1:1:crc/rc/r:|5dJd/2sTh2h/Qh:r
213
+ TO 1 at 1341695999.223984 MATCHSTATE:1:1:crc/rc/rr:|5dJd/2sTh2h/Qh
214
+ TO 2 at 1341695999.224015 MATCHSTATE:0:1:crc/rc/rr:6sKs|/2sTh2h/Qh
215
+ FROM 2 at 1341695999.224053 MATCHSTATE:0:1:crc/rc/rr:6sKs|/2sTh2h/Qh:c
216
+ TO 1 at 1341695999.224081 MATCHSTATE:1:1:crc/rc/rrc/:|5dJd/2sTh2h/Qh/8h
217
+ TO 2 at 1341695999.224114 MATCHSTATE:0:1:crc/rc/rrc/:6sKs|/2sTh2h/Qh/8h
218
+ FROM 2 at 1341695999.224149 MATCHSTATE:0:1:crc/rc/rrc/:6sKs|/2sTh2h/Qh/8h:r
219
+ TO 1 at 1341695999.224178 MATCHSTATE:1:1:crc/rc/rrc/r:|5dJd/2sTh2h/Qh/8h
220
+ TO 2 at 1341695999.224213 MATCHSTATE:0:1:crc/rc/rrc/r:6sKs|/2sTh2h/Qh/8h
221
+ FROM 1 at 1341695999.224235 MATCHSTATE:1:1:crc/rc/rrc/r:|5dJd/2sTh2h/Qh/8h:c
222
+ TO 1 at 1341695999.224292 MATCHSTATE:1:1:crc/rc/rrc/rc:6sKs|5dJd/2sTh2h/Qh/8h
223
+ TO 2 at 1341695999.224329 MATCHSTATE:0:1:crc/rc/rrc/rc:6sKs|5dJd/2sTh2h/Qh/8h
224
+ FINISHED at 1341696000.058664
225
+ SCORE:110|-110:p1|p2
226
+ ".split("\n").map { |line| line += "\n" },
227
+ result_messages: [
228
+ "# name/game/hands/seed 2p.limit.h1000.r0 holdem.limit.2p.reverse_blinds.game 2 0\n",
229
+ "#--t_response 600000\n",
230
+ "#--t_hand 600000\n",
231
+ "#--t_per_hand 7000\n",
232
+ "STATE:0:cc/crc/cc/cc:5d5c|9hQd/8dAs8s/4h/6d:20|-20:p1|p2\n",
233
+ "STATE:1:crc/rc/rrc/rc:6sKs|5dJd/2sTh2h/Qh/8h:-90|90:p2|p1\n",
234
+ 'SCORE:110|-110:p1|p2'
235
+ ],
236
+ hand_start_line_indices: [6, 35],
237
+ match_def_line_index: 0,
238
+ player_names: ['p1', 'p2'],
239
+ chip_distribution: [110, -110]
240
+ }
241
+ }
242
+ end
243
+ end
@@ -0,0 +1,24 @@
1
+
2
+ require 'simplecov'
3
+ SimpleCov.start
4
+
5
+ require 'minitest/spec'
6
+ require 'minitest/autorun'
7
+
8
+ begin
9
+ require 'turn/autorun'
10
+
11
+ Turn.config do |c|
12
+ # use one of output formats:
13
+ # :outline - turn's original case/test outline mode [default]
14
+ # :progress - indicates progress with progress bar
15
+ # :dotted - test/unit's traditional dot-progress mode
16
+ # :pretty - new pretty reporter
17
+ # :marshal - dump output as YAML (normal run mode only)
18
+ # :cue - interactive testing
19
+ c.format = :pretty
20
+ # use humanized test names (works only with :outline format)
21
+ c.natural = true
22
+ end
23
+ rescue LoadError
24
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acpc_dealer_data
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dustin Morrill
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: acpc_dealer
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: acpc_poker_types
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: celluloid
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: dmorrill10-utils
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.0.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: mocha
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: turn
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ description: ACPC Dealer data
127
+ email:
128
+ - morrill@ualberta.ca
129
+ executables: []
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - .gitignore
134
+ - .yardopts
135
+ - Gemfile
136
+ - LICENSE.md
137
+ - README.md
138
+ - Rakefile
139
+ - acpc_dealer_data.gemspec
140
+ - lib/acpc_dealer_data.rb
141
+ - lib/acpc_dealer_data/action_messages.rb
142
+ - lib/acpc_dealer_data/hand_data.rb
143
+ - lib/acpc_dealer_data/hand_results.rb
144
+ - lib/acpc_dealer_data/match_definition.rb
145
+ - lib/acpc_dealer_data/poker_match_data.rb
146
+ - lib/acpc_dealer_data/version.rb
147
+ - spec/action_messages_spec.rb
148
+ - spec/hand_data_spec.rb
149
+ - spec/hand_results_spec.rb
150
+ - spec/match_definition_spec.rb
151
+ - spec/poker_match_data_spec.rb
152
+ - spec/support/spec_helper.rb
153
+ homepage: https://github.com/dmorrill10/acpc_dealer_data
154
+ licenses: []
155
+ post_install_message:
156
+ rdoc_options: []
157
+ require_paths:
158
+ - lib
159
+ required_ruby_version: !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ segments:
166
+ - 0
167
+ hash: -608405534229312642
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ segments:
175
+ - 0
176
+ hash: -608405534229312642
177
+ requirements: []
178
+ rubyforge_project:
179
+ rubygems_version: 1.8.24
180
+ signing_key:
181
+ specification_version: 3
182
+ summary: Gem to parse, manipulate, and use data from the ACPC Dealer program.
183
+ test_files:
184
+ - spec/action_messages_spec.rb
185
+ - spec/hand_data_spec.rb
186
+ - spec/hand_results_spec.rb
187
+ - spec/match_definition_spec.rb
188
+ - spec/poker_match_data_spec.rb
189
+ - spec/support/spec_helper.rb