Class: GameStats

Inherits:
Object
  • Object
show all
Defined in:
lib/steam/community/game_stats.rb

Overview

The GameStats class represents the game statistics for a single user and a specific game

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, game_name) ⇒ GameStats

Creates a GameStats object and fetches data from the Steam Community for the given user and game



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/steam/community/game_stats.rb', line 53

def initialize(id, game_name)
  if id.is_a? Numeric
    @steam_id64 = id
  else
    @custom_url = id.downcase
  end
  @game_friendly_name = game_name

  url = base_url + '?xml=all'
  @xml_data = REXML::Document.new(open(url, {:proxy => true}).read).root

  error = @xml_data.elements['error']
  raise SteamCondenserException.new(error.text) unless error.nil?

  @privacy_state = @xml_data.elements['privacyState'].text
  if public?
    @app_id       = @xml_data.elements['game/gameLink'].text.match(/http:\/\/store.steampowered.com\/app\/([1-9][0-9]+)/)[1].to_i
    @custom_url   = @xml_data.elements['player/customURL'].text if @custom_url.nil?
    @game_name    = @xml_data.elements['game/gameName'].text
    @hours_played = @xml_data.elements['stats/hoursPlayed'].text unless @xml_data.elements['stats/hoursPlayed'].nil?
    @steam_id64   = @xml_data.elements['player/steamID64'].text.to_i if @steam_id64.nil?
  end
end

Instance Attribute Details

#app_idObject (readonly)

Returns the value of attribute app_id.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def app_id
  @app_id
end

#custom_urlObject (readonly)

Returns the value of attribute custom_url.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def custom_url
  @custom_url
end

#game_friendly_nameObject (readonly)

Returns the value of attribute game_friendly_name.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def game_friendly_name
  @game_friendly_name
end

#game_nameObject (readonly)

Returns the value of attribute game_name.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def game_name
  @game_name
end

#hours_playedObject (readonly)

Returns the value of attribute hours_played.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def hours_played
  @hours_played
end

#privacy_stateObject (readonly)

Returns the value of attribute privacy_state.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def privacy_state
  @privacy_state
end

#steam_id64Object (readonly)

Returns the value of attribute steam_id64.



15
16
17
# File 'lib/steam/community/game_stats.rb', line 15

def steam_id64
  @steam_id64
end

Class Method Details

.create_game_stats(steam_id, game_name) ⇒ Object

Creates a GameStats (or one of its subclasses) object for the given user depending on the game selected



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/steam/community/game_stats.rb', line 20

def self.create_game_stats(steam_id, game_name)
  case game_name
    when 'alienswarm'
      require 'steam/community/alien_swarm/alien_swarm_stats'
      AlienSwarmStats.new(steam_id)
    when 'cs:s'
      require 'steam/community/css/css_stats'
      CSSStats.new(steam_id)
    when 'defensegrid:awakening'
      require 'steam/community/defense_grid/defense_grid_stats'
      DefenseGridStats.new(steam_id)
    when 'dod:s'
      require 'steam/community/dods/dods_stats'
      DoDSStats.new(steam_id)
    when 'l4d'
      require 'steam/community/l4d/l4d_stats'
      L4DStats.new(steam_id)
    when 'l4d2'
      require 'steam/community/l4d/l4d2_stats'
      L4D2Stats.new(steam_id)
    when 'portal2'
      require 'steam/community/portal2/portal2_stats'
      Portal2Stats.new steam_id
    when 'tf2'
      require 'steam/community/tf2/tf2_stats'
      TF2Stats.new(steam_id)
    else
      new(steam_id, game_name)
  end
end

Instance Method Details

#achievementsObject

Returns the achievements for this stats’ user and game. If the achievements haven’t been parsed already, parsing is done now.



79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/steam/community/game_stats.rb', line 79

def achievements
  return unless public?

  if @achievements.nil?
    @achievements = Array.new
    @xml_data.elements.each('achievements/achievement') do |achievement_data|
      @achievements << GameAchievement.new(@steam_id64, @app_id, achievement_data)
    end

    @achievements_done = @achievements.reject{ |a| !a.unlocked? }.size
  end

  @achievements
end

#achievements_doneObject

Returns the count of achievements done by this player. If achievements haven’t been parsed yet, parsing is done now.



96
97
98
99
# File 'lib/steam/community/game_stats.rb', line 96

def achievements_done
  achievements if @achievements_done.nil?
  @achievements_done
end

#achievements_percentageObject

Returns a float value representing the percentage of achievements done by this player. If achievements haven’t been parsed yet, parsing is done now.



103
104
105
# File 'lib/steam/community/game_stats.rb', line 103

def achievements_percentage
  achievements_done.to_f / @achievements.size
end

#base_urlObject

Returns the base URL for this Steam Communtiy object



108
109
110
111
112
113
114
# File 'lib/steam/community/game_stats.rb', line 108

def base_url
  if @custom_url.nil?
    "http://steamcommunity.com/profiles/#{@steam_id64}/stats/#{@game_friendly_name}"
  else
    "http://steamcommunity.com/id/#{@custom_url}/stats/#{@game_friendly_name}"
  end
end

#public?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/steam/community/game_stats.rb', line 116

def public?
  @privacy_state == 'public'
end