diff --git a/lib/sightstone/modules/summoner_module.rb b/lib/sightstone/modules/summoner_module.rb index 9941b04..156a19f 100644 --- a/lib/sightstone/modules/summoner_module.rb +++ b/lib/sightstone/modules/summoner_module.rb @@ -103,11 +103,11 @@ class SummonerModule < SightstoneBaseModule else summoner end - uri = "http://prod.api.pvp.net/api/lol/#{region}/v1.2/summoner/#{id}/runes" + uri = "http://prod.api.pvp.net/api/lol/#{region}/v1.3/summoner/#{id}/runes" response = _get_api_response(uri) _parse_response(response) { |resp| data = JSON.parse(resp) - book = RuneBook.new(data) + book = RuneBook.new(data.values[0]) if block_given? yield book else @@ -116,6 +116,37 @@ class SummonerModule < SightstoneBaseModule } end + # returns the runebook 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 runebooks to the ids of summoners + def runebooks(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(',')}/runes" + response = _get_api_response(uri) + _parse_response(response) { |resp| + data = JSON.parse(resp) + books = {} + data.each do |key, raw_book| + books[key] = RuneBook.new(raw_book) + end + if block_given? + yield books + else + return books + end + } + end + # returns the masterybook of a summoner # @param summoner [Summoner, id] summoner object or id of a summoner # @param optional [Hash] optional arguments: :region => replaces default region diff --git a/test/test_summoner_module.rb b/test/test_summoner_module.rb index 0119164..b76df60 100644 --- a/test/test_summoner_module.rb +++ b/test/test_summoner_module.rb @@ -95,6 +95,41 @@ class SummonerModuleTest < BaseTest end end end + + def test_summoner_runebooks + begin + runebooks = @@sightstone.summoner.runebooks(@@test_id_array) + rescue Sightstone::RateLimitExceededException + puts "Rate limit exeeded, waiting 1 sec" + sleep 1 + retry + end + runebooks.each do |key, runebook| + assert_equal(@@test_id_array[0], runebook.summonerId) + assert_instance_of(Array, runebook.pages) + if runebook.pages.size > 0 + # test a page + page = runebook.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(Hash, page.slots) + + if(page.slots.keys.size > 0) + # test rune + rune = page.slots[page.slots.keys[0]] + assert_instance_of(String, rune.description) + assert_instance_of(String, rune.name) + assert_instance_of(Fixnum, rune.tier) + assert_instance_of(Fixnum, rune.id) + end + end + end + end def test_summoner_masterybook begin