Class: HandResults

Inherits:
Object
  • Object
show all
Defined in:
lib/acpc_dealer_data/hand_results.rb

Defined Under Namespace

Classes: LogFile

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(acpc_log_statements, player_names, game_def_directory, num_hands = nil) ⇒ HandResults

Returns a new instance of HandResults.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/acpc_dealer_data/hand_results.rb', line 55

def initialize(acpc_log_statements, player_names, game_def_directory, num_hands=nil)
  @final_score = nil
  @match_def = nil
  
  @data = acpc_log_statements.inject([]) do |accumulating_data, log_line|
    if @match_def.nil?
      @match_def = MatchDefinition.parse(log_line, player_names, game_def_directory)
    else
      parsed_message = HandResults.parse_state(log_line)
      if parsed_message
        accumulating_data << parsed_message
        break accumulating_data if accumulating_data.length == num_hands
      else
        @final_score = HandResults.parse_score(log_line) unless @final_score
      end
    end
    
    accumulating_data
  end
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



8
9
10
# File 'lib/acpc_dealer_data/hand_results.rb', line 8

def data
  @data
end

#final_scoreObject (readonly)

Returns the value of attribute final_score.



8
9
10
# File 'lib/acpc_dealer_data/hand_results.rb', line 8

def final_score
  @final_score
end

#match_defObject (readonly)

Returns the value of attribute match_def.



8
9
10
# File 'lib/acpc_dealer_data/hand_results.rb', line 8

def match_def
  @match_def
end

Class Method Details

.parse_file(acpc_log_file_path, player_names, game_def_directory, num_hands = nil) ⇒ Object



47
48
49
50
51
# File 'lib/acpc_dealer_data/hand_results.rb', line 47

def self.parse_file(acpc_log_file_path, player_names, game_def_directory, num_hands=nil)
  LogFile.open(acpc_log_file_path, 'r') do |file| 
    HandResults.parse file, player_names, game_def_directory, num_hands
  end
end

.parse_score(score_string) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/acpc_dealer_data/hand_results.rb', line 27

def self.parse_score(score_string)
  if score_string.strip.match(
    /^SCORE:([\d\-\.|]+):([\w|]+)$/
    )
     
    stack_changes = $1.split '|'
    players = $2.split '|'
       
    players.each_index.inject({}) do |player_results, j|
       player_results[players[j].to_sym] = stack_changes[j].to_r
       player_results
    end
  else
    nil
  end
end

.parse_state(state_string) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/acpc_dealer_data/hand_results.rb', line 10

def self.parse_state(state_string)
  if state_string.strip.match(
    /^STATE:\d+:[cfr\d\/]+:[^:]+:([\d\-\.|]+):([\w|]+)$/
    )
     
    stack_changes = $1.split '|'
    players = $2.split '|'
       
    players.each_index.inject({}) do |player_results, j|
       player_results[players[j].to_sym] = stack_changes[j].to_r
       player_results
    end
  else
    nil
  end
end