diff --git a/lib/sightstone/modules/stats_module.rb b/lib/sightstone/modules/stats_module.rb index 80b0c47..37ad970 100644 --- a/lib/sightstone/modules/stats_module.rb +++ b/lib/sightstone/modules/stats_module.rb @@ -3,11 +3,16 @@ require 'sightstone/summoner' require 'sightstone/player_stats_summary' require 'sightstone/ranked_stats' +# Module to receive stats class StatsModule < SightstoneBaseModule def initialize(sightstone) @sightstone = sightstone end + # get a summary of stats for a summoner + # @param [Summoner, Fixnum] summoner summoner object of name + # @param optional [Hash] optional arguments: :region => replaces default region + # @ return [PlayerStatsSummaryList] of the summoner def summary(summoner, optional={}) region = optional[:region] || @sightstone.region season = optional[:season] @@ -17,7 +22,7 @@ class StatsModule < SightstoneBaseModule else summoner end - uri = "https://prod.api.pvp.net/api/lol/#{region}/v1.1/stats/by-summoner/#{id}/summary" + uri = "https://prod.api.pvp.net/api/lol/#{region}/v1.2/stats/by-summoner/#{id}/summary" response = if season.nil? _get_api_response(uri) else @@ -31,6 +36,10 @@ class StatsModule < SightstoneBaseModule end + # get a summary of stats for a summoner + # @param [Summoner, Fixnum] summoner summoner object of name + # @param optional [Hash] optional arguments: :region => replaces default region + # @ return [RankedStats] of the summoner def ranked(summoner, optional={}) region = optional[:region] || @sightstone.region season = optional[:season] @@ -39,7 +48,7 @@ class StatsModule < SightstoneBaseModule else summoner end - uri = "https://prod.api.pvp.net/api/lol/#{region}/v1.1/stats/by-summoner/#{id}/ranked" + uri = "https://prod.api.pvp.net/api/lol/#{region}/v1.2/stats/by-summoner/#{id}/ranked" response = if season.nil? _get_api_response(uri) else diff --git a/lib/sightstone/player_stats_summary.rb b/lib/sightstone/player_stats_summary.rb index 6240283..4e64e15 100644 --- a/lib/sightstone/player_stats_summary.rb +++ b/lib/sightstone/player_stats_summary.rb @@ -1,11 +1,14 @@ require 'sightstone/stat' +# summary of player statistic +# @attr [Fixnum] summonerId ID of the summoner +# @attr [Array] aggregatedStats a hash of all stats (key) and their values. class PlayerStatSummary - attr_accessor :wins, :losses, :modifyDateStr, :modifyDate, :playerStatSummaryType, :aggregatedStats + attr_accessor :wins, :losses, :modifyDate, :playerStatSummaryType, :aggregatedStats def initialize(data) @wins = data['wins'] @losses = data['losses'] - @modifyDatStr = data['modifyDateStr'] @modifyDate = data['modifyDate'] @playerStatSummaryType = data['playerStatSummaryType'] - @aggregatedStats = [] - data['aggregatedStats'].each do |stat| - @aggregatedStats << Stat.new(data) + @aggregatedStats = {} + stat_keys = data['aggregatedStats'].keys + stat_keys.each do |stat| + @aggregatedStats[stat] = data['aggregatedStats'][stat] end end end \ No newline at end of file diff --git a/lib/sightstone/ranked_stats.rb b/lib/sightstone/ranked_stats.rb index fb83bc5..4be7fc7 100644 --- a/lib/sightstone/ranked_stats.rb +++ b/lib/sightstone/ranked_stats.rb @@ -1,40 +1,23 @@ require 'sightstone/stat' - +# Ranked stats of a summoner +# @attr [Fixnum] modifyDate date of last modification +# @attr [Fixnum] summonerId id of the summoner +# @attr [Hash>] champions Statisitc for each champion in a Hash. Each key stands for a champions id (0 is sum of all champs) and returns a Hash. class RankedStats - attr_accessor :champions, :modifyData, :modifyDateStr, :summonerId + attr_accessor :champions, :modifyDate, :summonerId def initialize(data) @summonerId = data['summonerId'] @modifyDate = data['modifyDate'] - @modifyDateStr = data['modifyDateStr'] - @champions = [] + @champions = {} data['champions'].each do |champ| - @champions << ChampionStats.new(champ) + id = champ['id'] + @champions[id] = Hash.new unless @champions.has_key? id + stat_keys = champ['stats'].keys + stat_keys.each do |key| + @champions[id][key] = champ['stats'][key] + end end end end - -class ChampionStats - attr_accessor :id, :name, :stats - - def initialize(data) - @id = data['id'] - @name = data['name'] - @stats = [] - - data['stats'].each do |stat| - @stats << ChampionStat.new(stat) - end - end -end - -class ChampionStat < Stat - - attr_accessor :count - - def initialize(data) - super(data) - @count = data['c'] - end -end \ No newline at end of file diff --git a/lib/sightstone/stat.rb b/lib/sightstone/stat.rb index 131598f..e47d874 100644 --- a/lib/sightstone/stat.rb +++ b/lib/sightstone/stat.rb @@ -1,8 +1,7 @@ class Stat - attr_accessor :id, :name, :value + attr_accessor :name, :value def initialize(data) - @id = data['id'] @name = data['name'] @value = if data.has_key? 'value' data['value'] diff --git a/sightstone.gemspec b/sightstone.gemspec index c022362..493a62b 100644 --- a/sightstone.gemspec +++ b/sightstone.gemspec @@ -1,7 +1,7 @@ Gem::Specification.new do |s| s.name = 'sightstone' - s.version = '0.5.0' - s.date = '2012-12-30' + s.version = '0.6.0' + s.date = '2012-12-31' s.summary = 'Ruby wrapper for riots league of legends api' s.description = s.summary s.authors = ["Daniel Bauer"] diff --git a/test/test_stats.rb b/test/test_stats.rb new file mode 100644 index 0000000..e0f8c01 --- /dev/null +++ b/test/test_stats.rb @@ -0,0 +1,48 @@ +require 'test/unit' +require 'sightstone' + +class StatsModuleTest < BaseTest + + @@req_id = 30447079 + + def test_summary + summary = @@sightstone.stats.summary @@req_id + assert_instance_of(PlayerStatsSummaryList, summary) + assert_instance_of(Fixnum, summary.summonerId) + assert_instance_of(Array, summary.playerStatSummaries) + summary.playerStatSummaries.each do |summary| + _check_summary(summary) + end + end + + def _check_summary(sum) + assert_instance_of(PlayerStatSummary, sum) + assert_instance_of(Fixnum, sum.wins) + assert_instance_of(Fixnum, sum.losses) + assert_instance_of(Fixnum, sum.modifyDate) + assert_instance_of(String, sum.playerStatSummaryType) + assert_instance_of(Hash, sum.aggregatedStats) + keys = sum.aggregatedStats.keys + keys.each do |key| + assert_instance_of(Fixnum, sum.aggregatedStats[key]) + end + end + + def test_ranked_stats + stats = @@sightstone.stats.ranked @@req_id + assert_instance_of(Fixnum, stats.summonerId) + assert_instance_of(Fixnum, stats.modifyDate) + assert_instance_of(Hash, stats.champions) + keys = stats.champions.keys + keys.each do |champId| + assert_instance_of(Hash, stats.champions[champId]) + statkeys = stats.champions[champId].keys + statkeys.each do |statkey| + assert_instance_of(String, statkey) + assert_instance_of(Fixnum, stats.champions[champId][statkey]) + end + end + end + + +end \ No newline at end of file