Class: AcpcDealerData::HandResults

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

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.



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

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 = AcpcDealerData::MatchDefinition.parse(log_line, player_names, game_def_directory)
    else
      parsed_message = AcpcDealerData::HandResults.parse_state(log_line)
      if parsed_message
        accumulating_data << parsed_message
        break accumulating_data if accumulating_data.length == num_hands
      else
        @final_score = AcpcDealerData::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



44
45
46
47
48
49
50
51
52
53
# File 'lib/acpc_dealer_data/hand_results.rb', line 44

def self.parse_file(
  acpc_log_file_path,
  player_names,
  game_def_directory,
  num_hands=nil
)
  AcpcDealerData::LogFile.open(acpc_log_file_path, 'r') do |file|
    AcpcDealerData::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