lib/pokerstats/hand_statistics.rb in pokerstats-2.0.13 vs lib/pokerstats/hand_statistics.rb in pokerstats-2.0.14

- old
+ new

@@ -10,15 +10,16 @@ include Pluggable include HandConstants plugin_include_module HandStatisticsAPI def initialize install_plugins self - @hand_information = {} + @hand_information = {:number_players => 0, :ante => "0.0".to_d} @player_hashes = [] @button_player_index = nil @cached_player_position = nil @street_state = nil + @last_street_state = nil street_transition(:prelude) end ## # Hand Information @@ -28,10 +29,14 @@ raise Pokerstats::HandHistoryParseError, "#{HAND_RECORD_INCOMPLETE_MESSAGE}: #{(HAND_INFORMATION_KEYS - @hand_information.keys).inspect}" unless (HAND_INFORMATION_KEYS - @hand_information.keys).empty? HAND_INFORMATION_KEYS.inject({}) do |hash, key| hash.merge!(key => @hand_information[key]) end end + + def hand_information(field) + @hand_information[field] + end def update_hand update street_transition(update[:street]) unless update[:street] == @street_state @hand_information.update(update) self @@ -63,23 +68,29 @@ def register_player player screen_name = player[:screen_name] raise Pokerstats::HandHistoryParseError, "#{PLAYER_RECORDS_DUPLICATE_PLAYER_NAME}: #{screen_name.inspect}" if players.member?(screen_name) @cached_player_position = nil @player_hashes << player - plugins.each{|each| each.register_player(screen_name, @street_state)} #why the second parameter? + @hand_information[:number_players]+=1 + plugins.each{|each| each.register_player(screen_name, @street_state, player)} #why the second parameter? street_transition_for_player(@street_state, screen_name) end ### # Street state information ## def street @street_state end + + def last_street + @last_street_state + end def street_transition street + @last_street_state = @street_state @street_state = street plugins.each{|each| each.street_transition(street)} players.each {|player| street_transition_for_player(street, player)} end @@ -114,10 +125,21 @@ end def position screen_name (@cached_player_position && @cached_player_position[screen_name]) || calculate_player_position(screen_name) end + + # player screen_name_first goes before player screen_name_second + def betting_order?(screen_name_first, screen_name_second) + if button?(screen_name_first) + false + elsif button?(screen_name_second) + true + else + position(screen_name_first) < position(screen_name_second) + end + end def button?(screen_name) position(screen_name) && position(screen_name).zero? end @@ -144,11 +166,10 @@ end def attacker?(screen_name) (number_players > 2) && (button?(screen_name) || cutoff?(screen_name)) end - - + ## # Action Information ## def aggression(description) case description