acpc_poker_types 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/acpc_poker_types.gemspec +1 -1
- data/lib/acpc_poker_types.rb +1 -0
- data/lib/acpc_poker_types/acpc_dealer_data/action_messages.rb +5 -5
- data/lib/acpc_poker_types/acpc_dealer_data/hand_results.rb +5 -4
- data/lib/acpc_poker_types/acpc_dealer_data/poker_match_data.rb +1 -3
- data/lib/acpc_poker_types/card.rb +1 -4
- data/lib/acpc_poker_types/game_definition.rb +8 -5
- data/lib/acpc_poker_types/integer_as_seat.rb +72 -0
- data/lib/acpc_poker_types/match_state.rb +4 -4
- data/lib/acpc_poker_types/player.rb +4 -4
- data/lib/acpc_poker_types/version.rb +1 -1
- data/spec/coverage/index.html +1 -1
- data/spec/player_spec.rb +1 -2
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ac1edc74df20ff22ce321770a24c508acf29ad2
|
4
|
+
data.tar.gz: 7efe0248ddd843e586d9941af349282f3e001672
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d50024fe199e9e81ab4200b59937c83e0f24f3864265e1727632d493a865cd7880877e7892137d3e835798f024093e41734306790f9e02282f2fa40445493cfb
|
7
|
+
data.tar.gz: fbac09f6a3e5370e2bb96b9634de30d80b84877acf41b9f9a627f7ba1da5068d6388f0034633fc47043c3b9b263e755203ff5c37b6f5b0502d03a024957f7000
|
data/acpc_poker_types.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.summary = %q{ACPC Poker Types}
|
11
11
|
s.description = %q{Poker classes and constants that conform to the standards of the Annual Computer Poker Competition.}
|
12
12
|
|
13
|
-
s.add_dependency '
|
13
|
+
s.add_dependency 'process_runner', '~> 0.0'
|
14
14
|
s.add_dependency 'acpc_dealer', '~> 1.0'
|
15
15
|
s.add_dependency 'celluloid', '~> 0.14'
|
16
16
|
s.add_dependency 'contextual_exceptions', '~> 0.0'
|
data/lib/acpc_poker_types.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
require 'acpc_poker_types/match_state'
|
3
2
|
require 'acpc_poker_types/poker_action'
|
4
3
|
|
@@ -93,7 +92,7 @@ module AcpcPokerTypes::AcpcDealerData
|
|
93
92
|
end
|
94
93
|
end
|
95
94
|
|
96
|
-
|
95
|
+
class << self; alias_method(:parse, :new) end
|
97
96
|
|
98
97
|
def initialize(
|
99
98
|
acpc_log_statements,
|
@@ -111,13 +110,14 @@ module AcpcPokerTypes::AcpcDealerData
|
|
111
110
|
if parsed_message
|
112
111
|
if (
|
113
112
|
accumulating_data.empty? ||
|
114
|
-
|
113
|
+
(
|
114
|
+
accumulating_data.last.first[:state].hand_number !=
|
115
|
+
parsed_message[:state].hand_number
|
116
|
+
)
|
115
117
|
)
|
116
118
|
break accumulating_data if accumulating_data.length == num_hands
|
117
|
-
|
118
119
|
accumulating_data << []
|
119
120
|
end
|
120
|
-
|
121
121
|
accumulating_data.last << parsed_message
|
122
122
|
else
|
123
123
|
@final_score = AcpcPokerTypes::AcpcDealerData::ActionMessages.parse_score(log_line) unless @final_score
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'dmorrill10-utils/class' # For alias_new
|
2
|
-
|
3
1
|
require 'acpc_poker_types/acpc_dealer_data/match_definition'
|
4
2
|
require 'acpc_poker_types/acpc_dealer_data/log_file'
|
5
3
|
|
@@ -52,7 +50,7 @@ module AcpcPokerTypes::AcpcDealerData
|
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
55
|
-
|
53
|
+
class << self; alias_method(:parse, :new); end
|
56
54
|
|
57
55
|
def initialize(acpc_log_statements, player_names, game_def_directory, num_hands=nil)
|
58
56
|
@final_score = nil
|
@@ -64,8 +62,11 @@ module AcpcPokerTypes::AcpcDealerData
|
|
64
62
|
else
|
65
63
|
parsed_message = AcpcPokerTypes::AcpcDealerData::HandResults.parse_state(log_line)
|
66
64
|
if parsed_message
|
67
|
-
|
65
|
+
# Yes, this causes one more result to be parsed than is saved as long as
|
66
|
+
# the number of hands is less than the total number in the log, but this
|
67
|
+
# keeps behavior consistent between this class and ActionMessages.
|
68
68
|
break accumulating_data if accumulating_data.length == num_hands
|
69
|
+
accumulating_data << parsed_message
|
69
70
|
else
|
70
71
|
@final_score = AcpcPokerTypes::AcpcDealerData::HandResults.parse_score(log_line) unless @final_score
|
71
72
|
end
|
@@ -111,9 +111,7 @@ module AcpcPokerTypes::AcpcDealerData
|
|
111
111
|
raise MatchDefinitionsDoNotMatch
|
112
112
|
end
|
113
113
|
|
114
|
-
if
|
115
|
-
parsed_action_messages.final_score != parsed_hand_results.final_score
|
116
|
-
)
|
114
|
+
if parsed_action_messages.final_score != parsed_hand_results.final_score
|
117
115
|
raise FinalScoresDoNotMatch
|
118
116
|
end
|
119
117
|
|
@@ -1,6 +1,3 @@
|
|
1
|
-
|
2
|
-
require 'dmorrill10-utils' # For alias_new
|
3
|
-
|
4
1
|
require 'acpc_poker_types/rank'
|
5
2
|
require 'acpc_poker_types/suit'
|
6
3
|
|
@@ -33,7 +30,7 @@ module AcpcPokerTypes
|
|
33
30
|
AcpcPokerTypes::Card.from_components rank, suit
|
34
31
|
end
|
35
32
|
|
36
|
-
|
33
|
+
class << self; alias_method(:from_components, :new) end
|
37
34
|
|
38
35
|
def initialize(rank, suit)
|
39
36
|
@rank = AcpcPokerTypes::Rank.new rank
|
@@ -1,12 +1,15 @@
|
|
1
|
-
require 'dmorrill10-utils/class'
|
2
|
-
require 'dmorrill10-utils/enumerable'
|
3
|
-
require 'dmorrill10-utils/integer'
|
4
1
|
require 'set'
|
5
2
|
|
6
3
|
require 'acpc_poker_types/chip_stack'
|
7
4
|
require 'acpc_poker_types/suit'
|
8
5
|
require 'acpc_poker_types/rank'
|
9
6
|
|
7
|
+
require 'acpc_poker_types/integer_as_seat'
|
8
|
+
using AcpcPokerTypes::IntegerAsSeat
|
9
|
+
|
10
|
+
require 'contextual_exceptions'
|
11
|
+
using ContextualExceptions::ClassRefinement
|
12
|
+
|
10
13
|
# Class that parses and manages game definition information from a game definition file.
|
11
14
|
module AcpcPokerTypes
|
12
15
|
class GameDefinition
|
@@ -165,7 +168,7 @@ module AcpcPokerTypes
|
|
165
168
|
File.open(game_definition_file_name, 'r') { |file| parse file }
|
166
169
|
end
|
167
170
|
|
168
|
-
|
171
|
+
class << self; alias_method(:parse, :new); end
|
169
172
|
|
170
173
|
def initialize(definitions)
|
171
174
|
initialize_members!
|
@@ -317,7 +320,7 @@ module AcpcPokerTypes
|
|
317
320
|
end
|
318
321
|
end
|
319
322
|
|
320
|
-
number_of_cards_required = (@number_of_hole_cards * @number_of_players) + @number_of_board_cards.
|
323
|
+
number_of_cards_required = (@number_of_hole_cards * @number_of_players) + @number_of_board_cards.inject(:+)
|
321
324
|
|
322
325
|
if number_of_cards_required > (@number_of_suits * @number_of_ranks)
|
323
326
|
raise(
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module AcpcPokerTypes
|
2
|
+
module IntegerAsSeat
|
3
|
+
refine Integer do
|
4
|
+
# @param [Integer] seat The seat to which the relative position is desired.
|
5
|
+
# @param [Integer] number_of_players The number of players at the table.
|
6
|
+
# @return [Integer] The relative position of +self+ to +seat+, given the
|
7
|
+
# number of players at the table, +number_of_players+, indexed such that
|
8
|
+
# the seat immediately to the left of +seat+ has a +position_relative_to+ of
|
9
|
+
# zero.
|
10
|
+
# @example <code>1.position_relative_to 0, 3</code> == 0
|
11
|
+
# @example <code>1.position_relative_to 1, 3</code> == 2
|
12
|
+
def position_relative_to(seat, number_of_players)
|
13
|
+
unless seat.seat_in_bounds?(number_of_players) &&
|
14
|
+
seat_in_bounds?(number_of_players)
|
15
|
+
raise "Seat #{seat} out of bounds for #{number_of_players} players"
|
16
|
+
end
|
17
|
+
|
18
|
+
adjusted_seat = if self > seat
|
19
|
+
self
|
20
|
+
else
|
21
|
+
self + number_of_players
|
22
|
+
end
|
23
|
+
adjusted_seat - seat - 1
|
24
|
+
end
|
25
|
+
|
26
|
+
# Inverse operation of +position_relative_to+.
|
27
|
+
# Given
|
28
|
+
# <code>relative_position = seat.position_relative_to to_seat, number_of_players</code>
|
29
|
+
# then
|
30
|
+
# <code>to_seat = seat.seat_from_relative_position relative_position, number_of_players</code>
|
31
|
+
#
|
32
|
+
# @param [Integer] relative_position_of_self_to_result The relative position
|
33
|
+
# of seat +self+ to the seat that is returned by this function.
|
34
|
+
# @param [Integer] number_of_players The number of players at the table.
|
35
|
+
# @return [Integer] The seat to which the relative position,
|
36
|
+
# +relative_position_of_self_to_result+, of +self+ was derived, given the
|
37
|
+
# number of players at the table, +number_of_players+, indexed such that
|
38
|
+
# the seat immediately to the left of +from_seat+ has a
|
39
|
+
# +position_relative_to+ of zero.
|
40
|
+
# @example <code>1.seat_from_relative_position 0, 3</code> == 0
|
41
|
+
# @example <code>1.seat_from_relative_position 2, 3</code> == 1
|
42
|
+
def seat_from_relative_position(relative_position_of_self_to_result,
|
43
|
+
number_of_players)
|
44
|
+
unless seat_in_bounds?(number_of_players)
|
45
|
+
raise "Seat #{seat} out of bounds for #{number_of_players} players"
|
46
|
+
end
|
47
|
+
|
48
|
+
unless relative_position_of_self_to_result.seat_in_bounds?(
|
49
|
+
number_of_players
|
50
|
+
)
|
51
|
+
raise "Relative position #{relative_position_of_self_to_result} out of bounds for #{number_of_players} players"
|
52
|
+
end
|
53
|
+
|
54
|
+
position_adjustment = relative_position_of_self_to_result + 1
|
55
|
+
|
56
|
+
to_seat = self + number_of_players - position_adjustment
|
57
|
+
if self > to_seat || !to_seat.seat_in_bounds?(number_of_players)
|
58
|
+
self - position_adjustment
|
59
|
+
else
|
60
|
+
to_seat
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param [Integer] number_of_players The number of players at the table.
|
65
|
+
# @return [Bool] Reports whether or not +self+ represents an out of bounds
|
66
|
+
# seat.
|
67
|
+
def seat_in_bounds?(number_of_players)
|
68
|
+
self < number_of_players && self >= 0
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
require 'dmorrill10-utils'
|
3
|
-
|
4
1
|
require 'acpc_poker_types/board_cards'
|
5
2
|
require 'acpc_poker_types/hand'
|
6
3
|
require 'acpc_poker_types/rank'
|
7
4
|
require 'acpc_poker_types/suit'
|
8
5
|
require 'acpc_poker_types/poker_action'
|
9
6
|
|
7
|
+
require 'contextual_exceptions'
|
8
|
+
using ContextualExceptions::ClassRefinement
|
9
|
+
|
10
10
|
# Model to parse and manage information from a given match state string.
|
11
11
|
module AcpcPokerTypes
|
12
12
|
class MatchState
|
@@ -39,7 +39,7 @@ module AcpcPokerTypes
|
|
39
39
|
# @return [String] Label for match state strings.
|
40
40
|
LABEL = 'MATCHSTATE'
|
41
41
|
|
42
|
-
|
42
|
+
class << self; alias_method(:parse, :new) end
|
43
43
|
|
44
44
|
# Builds a match state string from its given component parts.
|
45
45
|
#
|
@@ -1,9 +1,9 @@
|
|
1
|
-
|
2
|
-
require 'dmorrill10-utils'
|
3
|
-
|
4
1
|
require 'acpc_poker_types/chip_stack'
|
5
2
|
require 'acpc_poker_types/hand'
|
6
3
|
|
4
|
+
require 'contextual_exceptions'
|
5
|
+
using ContextualExceptions::ClassRefinement
|
6
|
+
|
7
7
|
# Class to model a player.
|
8
8
|
module AcpcPokerTypes
|
9
9
|
class Player
|
@@ -54,7 +54,7 @@ module AcpcPokerTypes
|
|
54
54
|
# the current hand, separated by round.
|
55
55
|
attr_reader :actions_taken_this_hand
|
56
56
|
|
57
|
-
|
57
|
+
class << self; alias_method(:join_match, :new) end
|
58
58
|
|
59
59
|
# @todo These comments don't work as expected
|
60
60
|
# @param [String] name This players name.
|
data/spec/coverage/index.html
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
<img src="./assets/0.7.1/loading.gif" alt="loading"/>
|
15
15
|
</div>
|
16
16
|
<div id="wrapper" style="display:none;">
|
17
|
-
<div class="timestamp">Generated <abbr class="timeago" title="2013-05-
|
17
|
+
<div class="timestamp">Generated <abbr class="timeago" title="2013-05-10T16:18:07-06:00">2013-05-10T16:18:07-06:00</abbr></div>
|
18
18
|
<ul class="group_tabs"></ul>
|
19
19
|
|
20
20
|
<div id="content">
|
data/spec/player_spec.rb
CHANGED
@@ -4,7 +4,6 @@ require_relative 'support/spec_helper'
|
|
4
4
|
|
5
5
|
require 'acpc_dealer'
|
6
6
|
require 'acpc_poker_types/acpc_dealer_data/poker_match_data'
|
7
|
-
require 'dmorrill10-utils'
|
8
7
|
|
9
8
|
require 'acpc_poker_types/player'
|
10
9
|
require 'acpc_poker_types/poker_action'
|
@@ -186,7 +185,7 @@ describe AcpcPokerTypes::Player do
|
|
186
185
|
"#{dealer_log_directory}/#{log_description.results_file_name}",
|
187
186
|
log_description.player_names,
|
188
187
|
AcpcDealer::DEALER_DIRECTORY,
|
189
|
-
|
188
|
+
10
|
190
189
|
)
|
191
190
|
match.for_every_seat! do |seat|
|
192
191
|
@patient = AcpcPokerTypes::Player.join_match(
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acpc_poker_types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dustin Morrill
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: process_runner
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: acpc_dealer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,6 +172,7 @@ files:
|
|
172
172
|
- lib/acpc_poker_types/pile_of_cards.rb
|
173
173
|
- lib/acpc_poker_types/game_definition.rb
|
174
174
|
- lib/acpc_poker_types/rank.rb
|
175
|
+
- lib/acpc_poker_types/integer_as_seat.rb
|
175
176
|
- lib/acpc_poker_types/suit.rb
|
176
177
|
- lib/acpc_poker_types/chip_stack.rb
|
177
178
|
- lib/acpc_poker_types/version.rb
|