From f4bea4fe9f07b4f2fc1448e6d0dbfbe94fe2675f Mon Sep 17 00:00:00 2001 From: danijoo Date: Fri, 13 Dec 2013 10:08:36 +0100 Subject: [PATCH] game module --- lib/sightstone.rb | 4 +- lib/sightstone/match_history.rb | 51 ++++++++++++++++++++++ lib/sightstone/modules/champion_module.rb | 2 +- lib/sightstone/modules/game_module.rb | 50 +++++++++++++++++++++ lib/sightstone/modules/summoner_module.rb | 44 +++++++++++-------- lib/sightstone/stat.rb | 7 +++ sightstone-0.0.0.gem | Bin 5632 -> 6656 bytes 7 files changed, 137 insertions(+), 21 deletions(-) create mode 100644 lib/sightstone/match_history.rb create mode 100644 lib/sightstone/modules/game_module.rb create mode 100644 lib/sightstone/stat.rb diff --git a/lib/sightstone.rb b/lib/sightstone.rb index 1064827..c713cf7 100644 --- a/lib/sightstone.rb +++ b/lib/sightstone.rb @@ -2,10 +2,11 @@ require 'rest_client' require 'JSON' require 'sightstone/modules/champion_module' require 'sightstone/modules/summoner_module' +require 'sightstone/modules/game_module' class Sightstone attr_accessor :region, :api_key - attr_accessor :summoner, :champion + attr_accessor :summoner, :champion, :game def initialize(api_key, region) @api_key = api_key @@ -13,6 +14,7 @@ class Sightstone @summoner = SummonerModule.new(self) @champion = ChampionModule.new(self) + @game = GameModule.new(self) end end diff --git a/lib/sightstone/match_history.rb b/lib/sightstone/match_history.rb new file mode 100644 index 0000000..c98ec14 --- /dev/null +++ b/lib/sightstone/match_history.rb @@ -0,0 +1,51 @@ +require 'sightstone/stat' + +class MatchHistory + attr_accessor :games, :summonerId + + def initialize(data) + @summonerId = data['summonerId'] + @games = [] + data['games'].each do |game| + games << Game.new(game) + end + end +end + +class Game + attr_accessor :championId, :createDate, :createDateString, :fellowPlayers, :gameId, :gameMode, :gameType, :invalid, :level, :mapId, :spell1, :spell2, :statistics, :subType, :teamId + + def initialize(data) + @championId=data['championId'] + @createDate=data['createDate'] + @createDateString=data['createDateString'] + @fellowPlayers=[] + data['fellowPlayers'].each do |player| + @fellowPlayers << Player.new(player) + end + @gameId=data['gameId'] + @gameMode=data['gameMode'] + @gameType=data['gameType'] + @invalid=data['invalid'] + @level=data['level'] + @mapId=data['mapId'] + @spell1=data['spell1]'] + @spell2=data['spell2'] + @statistics = [] + data['statistics'].each do |stat| + @statistics << Stat.new(stat) + end + @subType=data['subType'] + @teamId=data['teamId'] + end +end + +class Player + attr_accessor :championId, :summonerId, :teamId + + def initialize(data) + @championId = data['championId'] + @summonerId = data['summonerId'] + @teamId = data['teamId'] + end +end \ No newline at end of file diff --git a/lib/sightstone/modules/champion_module.rb b/lib/sightstone/modules/champion_module.rb index ea2455e..b1e8be6 100644 --- a/lib/sightstone/modules/champion_module.rb +++ b/lib/sightstone/modules/champion_module.rb @@ -6,7 +6,7 @@ class ChampionModule @sightstone = sightstone end - def get_champions(free_to_play=false) + def champions(free_to_play=false) uri = "https://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/champion" response = _get_api_response(uri, {'freeToPlay' => free_to_play}) puts response diff --git a/lib/sightstone/modules/game_module.rb b/lib/sightstone/modules/game_module.rb new file mode 100644 index 0000000..7058803 --- /dev/null +++ b/lib/sightstone/modules/game_module.rb @@ -0,0 +1,50 @@ +require 'sightstone/summoner' +require 'sightstone/match_history' + +class GameModule + + def initialize(sightstone) + @sightstone = sightstone + end + + def recent(summoner) + id = if summoner.is_a? Summoner + summoner.id + else + summoner + end + uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/game/by-summoner/#{id}/recent" + + response = _get_api_response(uri) + _parse_response(response) { |resp| + data = JSON.parse(resp) + return MatchHistory.new(data) + } + end + + private + + def _get_api_response(uri) + params = {'api_key' => @sightstone.api_key} + RestClient.get(uri, headers={:params => params}) {|response, request, result| response } + rescue SocketError => e + nil + + end + + def _parse_response(response, &block) + response_code = if response.nil? + 500 + else + response.code + end + + if response_code == 200 + block.call(response.body) + elsif response_code == 404 + raise Sightstone::SummonerNotFoundException + elsif response_code == 500 + raise Sightstone::SightstoneConnectionException + end + end +end \ No newline at end of file diff --git a/lib/sightstone/modules/summoner_module.rb b/lib/sightstone/modules/summoner_module.rb index fb1849c..b3190f8 100644 --- a/lib/sightstone/modules/summoner_module.rb +++ b/lib/sightstone/modules/summoner_module.rb @@ -2,15 +2,18 @@ require 'sightstone/summoner' require 'sightstone/masterybook' require 'sightstone/runebook' - class SummonerModule - def initialize(sightstone) @sightstone = sightstone end - - def get_summoner_by_name(name) - uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/by-name/#{name}" + + def summoner(name_or_id) + uri = if name_or_id.is_a? Integer + "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{name_or_id}" + else + "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/by-name/#{name_or_id}" + end + response = _get_api_response(uri) _parse_response(response) { |resp| data = JSON.parse(resp) @@ -18,16 +21,8 @@ class SummonerModule } end - def get_summoner_by_id(id) - uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{id}" - response = _get_api_response(uri) - _parse_response(response) { |resp| - data = JSON.parse(resp) - return Summoner.new(data) - } - end - def get_summoners_names(ids) + def names(ids) ids = ids.join(',') uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{ids}/name" response = _get_api_response(uri) @@ -37,8 +32,13 @@ class SummonerModule } end - def get_runes_for_summoner(summoner) - uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{summoner.id}/runes" + def runes(summoner) + id = if summoner.is_a? Summoner + summoner.id + else + summoner + end + uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{id}/runes" response = _get_api_response(uri) _parse_response(response) { |resp| data = JSON.parse(resp) @@ -46,16 +46,22 @@ class SummonerModule } end - def get_masteries_for_summoner(summoner) - uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{summoner.id}/masteries" + def masteries(summoner) + id = if summoner.is_a? Summoner + summoner.id + else + summoner + end + uri = "http://prod.api.pvp.net/api/lol/#{@sightstone.region}/v1.1/summoner/#{id}/masteries" response = _get_api_response(uri) _parse_response(response) { |resp| data = JSON.parse(resp) return MasteryBook.new(data) } end - + private + def _get_api_response(uri) params = {'api_key' => @sightstone.api_key} RestClient.get(uri, headers={:params => params}) {|response, request, result| response } diff --git a/lib/sightstone/stat.rb b/lib/sightstone/stat.rb new file mode 100644 index 0000000..66f4088 --- /dev/null +++ b/lib/sightstone/stat.rb @@ -0,0 +1,7 @@ +class Stat + def initialize(data) + @id = data['id'] + @name = data['name'] + @value = data['value'] + end +end \ No newline at end of file diff --git a/sightstone-0.0.0.gem b/sightstone-0.0.0.gem index 20d0c46214f51dd7524688d551e83675dc94e4f3..bf27279f7d3280f6c5fb874c58d024db445b9ceb 100644 GIT binary patch delta 3069 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 Lvk?*R1d$*Ih%*1T delta 2509 zcmV;;2{QJ8G=MCSgBmb5H!%P(FfcGMFfcGMFfafxF*7tUGyotllVJg5vjG7E0e@S_ zs!{?2#Z*g+6fqFK=U2qjociG)vIG2ysxyPZ_5q}Lt9|8AvwXGYm^ zz>`U!EA`G-Rb5q;d`5G>Z?L}wlhrkNr9MV5Zs&~74uc5VgObVFF{g|H#63`AfjVRP zX%z`6k4kOLTf|A{9g5$j2qZZ< zNe*+86KFew#2r(X&6Cv83GmuYN)DXuE%sMeZ!Dsn7H)0O3wQuCXWdVak$>PJLnsIw zucSK~&~!U@&{-+QU~+wP0=VI4`pBj=^-qOfrwp|35%12+ahTcd(Mh*5F6yS)d%n{p zU77>@HR!>?Ibq?A=pky$B^z^&s%c6WSn#PvvP~fxoEaetVseIoTXDJm@cw=)JY>!F z)=K{PDI%uaxsbA+rp`l3i+@+KAd5?3S8N}9-&dXo+^X$dX3V>9WNCeaE*X+i}}DHd2VlgSgpM}xz|Xa|Km8z@sQFazZ%*!+lqAEPqc>*RcM-xuuox!^;k;nz1Sf*tl6|NMfs>naoZmoWSctP6 z4>OYL#=D7W&NE2Kh~%7@jwv0DXfn;jodJv(As>qm8NP!CmFy;XOcR66@kGjI&?2cM z@?zizSR~2^TH|ui&tL*#?I0(gx)Pyf zYr`b}%HQ4E^d$NG^pw*PI3u~>-sL1y#sIQvrV9=6QY&kiI-F@+v>8NGCk9;AiUv8o z*p8r?kE*JaqM=Q-RP~~X7pg@0e_W%E^(ui?JruLf$*fpwkhg6Ai*%Y1?(%?G1OA^c zSYiJU!a>9SA4G?P*8Xp#F!J}5GJ-k_lE99&6E;0~r#8dxyfN^dtp{)bIO@J(ZIEU# zCL*@7cvnWbu_)paLe0|=&bZ+!f4!F#S?}e2 zMQXsv7`V=Qw^0ze3B6DZ8Q~=elp~Af5P(5!VO@~6kM64>H#&Wds$-kUVU<%bx3<%+ zVjGv3apF1I${xB$53*s+wX}R7`}d1K-v_FXBHc4srx5Q3tRrx!sw+@H%evYfoPk|8 zuES0H;;1*0kh!}Am!nEpy`kl-wHqX~vZdbek}FY0WCgH%jG7Z+|JPELIN zO_ApW^5r5w`zIl#(6<832%>eI-?sm^;rb^0fB)bpZ2EtIwf=uw{@*TsXLk{{az(J1 zfK79vu{M6VFbqxnf3PT>_`(Rnv5>yVZPwvkEHjO+{4*Ckd}ZulnfHcw-%GwgEC0OKvd%?DRi#n7}%)3qz*1>>(K(2hS757m zleU3$TY7Thx2LPhjo}h?HFAfgnZp-n3vGVzH2Fb4>@Uv`%=UXuOt+eY9255wcR_y56h8~<`AxOVB zt7t+2tD2Aif2RqBy_A11JMzF@KuxOl3fRaAE5&$p=jyRHAlYGwc2aPJj4F%lbtEWZ zU!|Z5x5~#74z^N{Qm{kFM*D8Ge*5pj%njQAus=9#+W&skzW;2bG_Pp%(Qa4+bM%!_ zfIMbIGZNFJ$YTXz@^fyie@D}Nfc>uv_B00Z7T|9^d2Ljl z*n)orsH0UQ_B8eo{2{^B&z-)(FP`e>f33&iurR_~;uE`30)Z|K}+zR~fX!`Ti72R#%I05r1^ z1g8PA5(EN&Tga+X0t01`IkFT$3`6rd#av)0xA*=T8968L)+${D*Y)vuK7Yyx4t)Gks$>T;HeX9lt((Vrwk> zY_j$WK8JB9Sa+JN-Q{Pem;R;7!vDA!S6rb-v~UN1VW#w2Re(l2BdURxh!NQ68Dl=x zRZ<;8l<1S|=(yO8Se47zvjN@Nkif5~ZSgVpE^%WcDK%w>>3{oB&drVmOApO-@bYB8 zI9+!mUSTvDG@zH*O3ZbiQ;7