diff --git a/lib/sightstone/modules/summoner_module.rb b/lib/sightstone/modules/summoner_module.rb index 156a19f..4e0a7ea 100644 --- a/lib/sightstone/modules/summoner_module.rb +++ b/lib/sightstone/modules/summoner_module.rb @@ -158,11 +158,11 @@ class SummonerModule < SightstoneBaseModule else summoner end - uri = "http://prod.api.pvp.net/api/lol/#{region}/v1.2/summoner/#{id}/masteries" + uri = "http://prod.api.pvp.net/api/lol/#{region}/v1.3/summoner/#{id}/masteries" response = _get_api_response(uri) _parse_response(response) { |resp| data = JSON.parse(resp) - book = MasteryBook.new(data) + book = MasteryBook.new(data.values[0]) if block_given? yield book else @@ -170,5 +170,36 @@ class SummonerModule < SightstoneBaseModule end } end + + # returns the masterybooks for multiple summoners + # @param summoners [Array<(Summoner, Integer)>] list of summoner objects or ids of summoners + # @param optional [Hash] optional arguments: :region => replaces default region + # @return [Hash] A hash mapping masterybooks to the ids of summoners + def masterybooks(summoners, optional={}) + return {} if summoners.empty? + region = optional[:region] || @sightstone.region + ids = summoners.collect { |summoner| + if summoner.is_a? Summoner + summoner.id + else + summoner + end + } + + uri = "http://prod.api.pvp.net/api/lol/#{region}/v1.3/summoner/#{ids.join(',')}/masteries" + response = _get_api_response(uri) + _parse_response(response) { |resp| + data = JSON.parse(resp) + books = {} + data.each do |key, raw_book| + books[key] = MasteryBook.new(raw_book) + end + if block_given? + yield books + else + return books + end + } + end end end diff --git a/test/test_summoner_module.rb b/test/test_summoner_module.rb index b76df60..bcb9bce 100644 --- a/test/test_summoner_module.rb +++ b/test/test_summoner_module.rb @@ -162,6 +162,40 @@ class SummonerModuleTest < BaseTest end end end + + def test_summoner_masterybooks + begin + masterybooks = @@sightstone.summoner.masterybooks(@@test_id_array) + rescue Sightstone::RateLimitExceededException + puts "Rate limit exeeded, waiting 1 sec" + sleep 1 + retry + end + masterybooks.each do |id, masterybook| + assert_equal(@@test_id_array[0], masterybook.summonerId) + assert_instance_of(Array, masterybook.pages) + if masterybook.pages.size > 0 + # test a page + page = masterybook.pages[0] + if(page.current == true || page.current == false) + assert_equal(true, true) + else + assert_equal(page.current, "asd") + end + assert_instance_of(Fixnum, page.id) + assert_instance_of(String, page.name) + assert_instance_of(Array, page.talents) + + if(page.talents.size > 0) + # test talent + talent = page.talents[0] + assert_instance_of(Fixnum, talent.rank) + assert_instance_of(String, talent.name) + assert_instance_of(Fixnum, talent.id) + end + end + end + end end \ No newline at end of file