ruby-lol 0.0.7 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -7
- data/Rakefile +3 -1
- data/demo/demo.rb +16 -0
- data/lib/lol.rb +7 -0
- data/lib/lol/client.rb +5 -2
- data/lib/lol/game_request.rb +1 -1
- data/lib/lol/league_request.rb +1 -1
- data/lib/lol/mastery_page.rb +28 -0
- data/{spec → lib}/lol/request.rb +8 -13
- data/lib/lol/rune.rb +23 -0
- data/lib/lol/rune_page.rb +28 -0
- data/lib/lol/rune_slot.rb +27 -0
- data/{spec → lib}/lol/stats_request.rb +0 -0
- data/lib/lol/summoner.rb +36 -0
- data/lib/lol/summoner_request.rb +45 -0
- data/lib/lol/talent.rb +20 -0
- data/lib/lol/version.rb +1 -1
- data/spec/acceptance_spec.rb +46 -0
- data/spec/fixtures/v1.1/get-summoner-by-name.json +8 -0
- data/spec/fixtures/v1.1/get-summoner-masteries.json +1 -0
- data/spec/fixtures/v1.1/get-summoner-name.json +10 -0
- data/spec/fixtures/v1.1/get-summoner-runes.json +1 -0
- data/spec/fixtures/v1.1/get-summoner.json +8 -0
- data/spec/fixtures/v1.2/get-game.json +1 -0
- data/spec/fixtures/v2.1/get-league.json +1 -1
- data/spec/lol/client_spec.rb +12 -0
- data/spec/lol/game_request_spec.rb +1 -1
- data/spec/lol/league_request_spec.rb +2 -2
- data/spec/lol/league_spec.rb +1 -1
- data/spec/lol/mastery_page_spec.rb +29 -0
- data/spec/lol/request_spec.rb +20 -6
- data/spec/lol/rune_page_spec.rb +28 -0
- data/spec/lol/rune_slot_spec.rb +26 -0
- data/spec/lol/rune_spec.rb +17 -0
- data/spec/lol/summoner_request_spec.rb +77 -0
- data/spec/lol/summoner_spec.rb +20 -0
- data/spec/lol/talent_spec.rb +17 -0
- data/spec/spec_helper.rb +9 -0
- metadata +40 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ed1b5474d3abe4a83a978853e1e40f51b205d51
|
4
|
+
data.tar.gz: 951a6a05d57d7574b7a01e1a7d1168941a993b9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a639d3260ba7b4dec631e22c30295114736be5ac3065ef15198e411fe56493983f2784e5e676a724203eb94bcd920e2a0d4ec0a7d18f3590e7bf8992c6200866
|
7
|
+
data.tar.gz: 9cca04e89cf82bf3736a0b1667dd8b69166b29d6d77c6ac754da6166b875f51ae815efa26a491c3548b052e10568b69b546f4712c5ff03a4f2d39c38d6890c81
|
data/README.md
CHANGED
@@ -3,10 +3,6 @@
|
|
3
3
|
|
4
4
|
ruby-lol is a wrapper to the [Riot Games API](https://developer.riotgames.com).
|
5
5
|
|
6
|
-
## IMPORTANT NOTICE
|
7
|
-
|
8
|
-
An important piece of refactoring is happening in the *refactoring* branch. Check it out for updated docs. I plan to merge it in this week.
|
9
|
-
|
10
6
|
## Installation
|
11
7
|
|
12
8
|
Add this line to your application's Gemfile:
|
@@ -66,15 +62,15 @@ Or install it yourself as:
|
|
66
62
|
# => Lol::RankedStats
|
67
63
|
|
68
64
|
client.summoner.masteries(summoner_id)
|
69
|
-
# => Lol::
|
65
|
+
# => [Lol::Masterypage]
|
70
66
|
client.summoner.runes(summoner_id)
|
71
|
-
# => Lol::
|
67
|
+
# => [Lol::Runepage]
|
72
68
|
client.summoner.by_name(name)
|
73
69
|
# => Lol::Summoner
|
74
70
|
client.summoner.get(summoner_id)
|
75
71
|
# => Lol::Summoner
|
76
72
|
client.summoner.name(summoner_ids)
|
77
|
-
# =>
|
73
|
+
# => [Hash]
|
78
74
|
|
79
75
|
client.team.get(summoner_id)
|
80
76
|
# => Array
|
data/Rakefile
CHANGED
@@ -2,7 +2,9 @@ require "bundler/setup"
|
|
2
2
|
require "bundler/gem_tasks"
|
3
3
|
require "rspec/core/rake_task"
|
4
4
|
|
5
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
RSpec::Core::RakeTask.new(:spec, :tag) do |t, task_args|
|
6
|
+
t.rspec_opts = "--tag #{task_args[:tag]}" if task_args[:tag]
|
7
|
+
end
|
6
8
|
|
7
9
|
task :default => :spec
|
8
10
|
|
data/demo/demo.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift(__dir__ + "/../lib")
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "ap"
|
5
|
+
require "lol"
|
6
|
+
|
7
|
+
include Lol
|
8
|
+
|
9
|
+
client = Client.new "18b7c486-0d5a-459f-9d60-cf8776b154c6"
|
10
|
+
intinig = client.summoner.by_name "intinig"
|
11
|
+
leagues = client.league.get intinig.id
|
12
|
+
my_league = leagues.first
|
13
|
+
|
14
|
+
my_league.entries.select {|entry| entry.player_or_team_name == "intinig"}.each do |entry|
|
15
|
+
ap entry
|
16
|
+
end
|
data/lib/lol.rb
CHANGED
@@ -6,12 +6,19 @@ require "lol/game_request"
|
|
6
6
|
require "lol/stats_request"
|
7
7
|
require "lol/team_request"
|
8
8
|
require "lol/league_request"
|
9
|
+
require "lol/summoner_request"
|
9
10
|
|
10
11
|
require "lol/model"
|
11
12
|
require "lol/champion"
|
12
13
|
require "lol/game"
|
13
14
|
require "lol/league"
|
14
15
|
require "lol/player"
|
16
|
+
require "lol/summoner"
|
17
|
+
require "lol/rune_page"
|
18
|
+
require "lol/rune_slot"
|
19
|
+
require "lol/rune"
|
20
|
+
require "lol/mastery_page"
|
21
|
+
require "lol/talent"
|
15
22
|
require "lol/raw_statistic"
|
16
23
|
require "lol/player_statistic"
|
17
24
|
require "lol/aggregated_statistic"
|
data/lib/lol/client.rb
CHANGED
@@ -2,8 +2,6 @@ require 'httparty'
|
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
module Lol
|
5
|
-
class InvalidAPIResponse < StandardError; end
|
6
|
-
|
7
5
|
class Client
|
8
6
|
|
9
7
|
# @!attribute [rw] region
|
@@ -39,6 +37,11 @@ module Lol
|
|
39
37
|
@team_request ||= TeamRequest.new(api_key, region)
|
40
38
|
end
|
41
39
|
|
40
|
+
# @return [SummonerRequest]
|
41
|
+
def summoner
|
42
|
+
@summoner_request ||= SummonerRequest.new(api_key, region)
|
43
|
+
end
|
44
|
+
|
42
45
|
# Initializes a Lol::Client
|
43
46
|
# @param api_key [String]
|
44
47
|
# @param options [Hash]
|
data/lib/lol/game_request.rb
CHANGED
@@ -5,7 +5,7 @@ module Lol
|
|
5
5
|
# @return [Array] an array of games
|
6
6
|
def recent summoner_id
|
7
7
|
summoner_api_path = "game/by-summoner/#{summoner_id}/recent"
|
8
|
-
perform_request(api_url("v1.
|
8
|
+
perform_request(api_url("v1.2", summoner_api_path))["games"].map do |game_data|
|
9
9
|
Game.new game_data
|
10
10
|
end
|
11
11
|
end
|
data/lib/lol/league_request.rb
CHANGED
@@ -3,7 +3,7 @@ module Lol
|
|
3
3
|
# Retrieves leagues data for summoner, including leagues for all of summoner's teams, v2.1
|
4
4
|
# @return [Array] an array of champions
|
5
5
|
def get summoner_id
|
6
|
-
response = perform_request(api_url("v2.1", "league/by-summoner/#{summoner_id}"))[summoner_id]
|
6
|
+
response = perform_request(api_url("v2.1", "league/by-summoner/#{summoner_id}"))[summoner_id.to_s]
|
7
7
|
response.is_a?(Hash) ? [League.new(response)] : response.map {|l| League.new l}
|
8
8
|
end
|
9
9
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Lol
|
2
|
+
class MasteryPage < Model
|
3
|
+
|
4
|
+
# @!attribute [r] id
|
5
|
+
# @return [Fixnum] id of summoner
|
6
|
+
attr_reader :summoner_id
|
7
|
+
|
8
|
+
# @!attribute [r] talents
|
9
|
+
# @return [Array] array of Lol::Talent
|
10
|
+
attr_reader :talents
|
11
|
+
|
12
|
+
# @!attribute [r] name
|
13
|
+
# @return [String] name of mastery page
|
14
|
+
attr_reader :name
|
15
|
+
|
16
|
+
# @!attribute [r] current
|
17
|
+
# @return [Boolean] is it the current mastery page?
|
18
|
+
attr_reader :current
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_writer :summoner_id, :name, :current
|
23
|
+
|
24
|
+
def talents= new_talents
|
25
|
+
@talents = new_talents.map {|t| Talent.new t}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/{spec → lib}/lol/request.rb
RENAMED
@@ -1,4 +1,7 @@
|
|
1
1
|
module Lol
|
2
|
+
class InvalidAPIResponse < StandardError; end
|
3
|
+
class NotFound < StandardError; end
|
4
|
+
|
2
5
|
# Encapsulates common methods for all requests
|
3
6
|
# Request classes inherit from this
|
4
7
|
class Request
|
@@ -18,7 +21,7 @@ module Lol
|
|
18
21
|
# @param path [String] API path to call
|
19
22
|
# @return [String] full fledged url
|
20
23
|
def api_url version, path, params = {}
|
21
|
-
lol = version == "
|
24
|
+
lol = version == "v2.1" ? "" : "lol"
|
22
25
|
query_string = URI.encode_www_form params.merge api_key: api_key
|
23
26
|
File.join "http://prod.api.pvp.net/api/", lol, "/#{region}/#{version}/", "#{path}?#{query_string}"
|
24
27
|
end
|
@@ -28,24 +31,16 @@ module Lol
|
|
28
31
|
# @return [String] raw response of the call
|
29
32
|
def perform_request url
|
30
33
|
response = self.class.get(url)
|
31
|
-
if response.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
34
|
+
raise NotFound.new("404 Not Found") if response.respond_to?(:code) && response.not_found?
|
35
|
+
raise InvalidAPIResponse.new(response["status"]["message"]) if response.is_a?(Hash) && response["status"]
|
36
|
+
|
37
|
+
response
|
36
38
|
end
|
37
39
|
|
38
40
|
def initialize api_key, region
|
39
41
|
@api_key = api_key
|
40
42
|
@region = region
|
41
43
|
end
|
42
|
-
private
|
43
44
|
|
44
|
-
# Sets api_key to new_key
|
45
|
-
# @param new_key [String] a Riot Games API key
|
46
|
-
# @return [String] new_key
|
47
|
-
def api_key= new_key
|
48
|
-
@api_key = new_key
|
49
|
-
end
|
50
45
|
end
|
51
46
|
end
|
data/lib/lol/rune.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Lol
|
2
|
+
class Rune < Model
|
3
|
+
# @!attribute [r] id
|
4
|
+
# @return [Fixnum] Rune id
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @!attribute [r] name
|
8
|
+
# @return [String] Rune name
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# @!attribute [r] description
|
12
|
+
# @return [String] Rune description
|
13
|
+
attr_reader :description
|
14
|
+
|
15
|
+
# @!attribute [r] tier
|
16
|
+
# @return [Fixnum] Rune tier
|
17
|
+
attr_reader :tier
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_writer :id, :name, :description, :tier
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Lol
|
2
|
+
class RunePage < Model
|
3
|
+
# @!attribute [r] id
|
4
|
+
# @return [Fixnum] id of Runepage
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @!attribute [r] name
|
8
|
+
# @return [String] name of Runepage
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# @!attribute [r] current
|
12
|
+
# @return [Boolean] is the Runepage currently active?
|
13
|
+
attr_reader :current
|
14
|
+
|
15
|
+
|
16
|
+
# @!attribute [r] current
|
17
|
+
# @return [Array] array of Lol::RuneSlot
|
18
|
+
attr_reader :slots
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_writer :id, :name, :current
|
24
|
+
|
25
|
+
def slots= *runeslots
|
26
|
+
@slots = runeslots.flatten.map {|slot| RuneSlot.new slot}
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Lol
|
2
|
+
class RuneSlot < Model
|
3
|
+
# @!attribute [r] id
|
4
|
+
# @return [Fixnum] id of RuneSlot
|
5
|
+
def id
|
6
|
+
@rune_slot_id
|
7
|
+
end
|
8
|
+
|
9
|
+
# @!attribute [r] rune
|
10
|
+
# @return [Rune] rune placed in the slot
|
11
|
+
attr_reader :rune
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def rune= rune_data
|
16
|
+
@rune = Rune.new rune_data
|
17
|
+
end
|
18
|
+
|
19
|
+
def id= new_id
|
20
|
+
@rune_slot_id = new_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def rune_slot_id= new_id
|
24
|
+
@rune_slot_id = new_id
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
File without changes
|
data/lib/lol/summoner.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Lol
|
2
|
+
class Summoner < Model
|
3
|
+
# @!attribute [r] id
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @!attribute [r] name
|
8
|
+
# @return [String] Summoner Name
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# @!attribute [r] profile_icon_id
|
12
|
+
# @return [String] Id of the profile icon. No way to get the icon out for now
|
13
|
+
attr_reader :profile_icon_id
|
14
|
+
|
15
|
+
# @!attribute [r] revision_date
|
16
|
+
# @return [Time] Last date of summoner profile revision
|
17
|
+
attr_reader :revision_date
|
18
|
+
|
19
|
+
# @!attribute [r] revision_date_str
|
20
|
+
# @return [String] Human readable string representing date of summoner profile revision
|
21
|
+
attr_reader :revision_date_str
|
22
|
+
|
23
|
+
# @!attribute [r] summoner_level
|
24
|
+
# @return [Numeric] 1-30
|
25
|
+
attr_reader :summoner_level
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_writer :id, :name, :profile_icon_id, :summoner_level, :revision_date_str
|
30
|
+
|
31
|
+
def revision_date= value
|
32
|
+
@revision_date = value.is_a?(Numeric) && Time.at(value / 1000) || value
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Lol
|
2
|
+
class SummonerRequest < Request
|
3
|
+
# Looks for a summoner name and returns the associated summoner
|
4
|
+
# @param [String] name Summoner name
|
5
|
+
# @return [Summoner] matching summoner
|
6
|
+
def by_name name
|
7
|
+
Summoner.new perform_request(api_url("v1.1", "summoner/by-name/#{name}"))
|
8
|
+
end
|
9
|
+
|
10
|
+
# Get list of summoner names by summoner IDs
|
11
|
+
# @param [Array] array of summoner ids
|
12
|
+
# @return [Array] array of Hash { "id" => "foo", "name" => "bar" }
|
13
|
+
def name *summoner_ids
|
14
|
+
perform_request(api_url("v1.1", "summoner/#{summoner_ids.join(",")}/name"))["summoners"].map do |summoner|
|
15
|
+
summoner
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Get summoner by summoner ID
|
20
|
+
# @param [String] summoner_id
|
21
|
+
# @return [Lol::Summoner]
|
22
|
+
def get summoner_id
|
23
|
+
Summoner.new perform_request(api_url("v1.1", "summoner/#{summoner_id}"))
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get rune pages by summoner ID
|
27
|
+
# @param [String] summoner_id
|
28
|
+
# @return [Array] array of Lol::RunePage
|
29
|
+
def runes summoner_id
|
30
|
+
perform_request(api_url("v1.1", "summoner/#{summoner_id}/runes"))["pages"].map do |runepage|
|
31
|
+
RunePage.new runepage
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get mastery pages by summoner ID
|
36
|
+
# @param [String] summoner_id
|
37
|
+
# @return [Array] array of Lol::MasteryPage
|
38
|
+
def masteries summoner_id
|
39
|
+
perform_request(api_url("v1.1", "summoner/#{summoner_id}/masteries"))["pages"].map do |masterypage|
|
40
|
+
MasteryPage.new masterypage
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
data/lib/lol/talent.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Lol
|
2
|
+
class Talent < Model
|
3
|
+
|
4
|
+
# @!attribute [r] id
|
5
|
+
# @return [Fixnum] id of talent
|
6
|
+
attr_reader :id
|
7
|
+
|
8
|
+
# @!attribute [r] name
|
9
|
+
# @return [String] name of talent
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
# @!attribute [r] rank
|
13
|
+
# @return [Fixnum] rank of talent
|
14
|
+
attr_reader :rank
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
attr_writer :id, :name, :rank
|
19
|
+
end
|
20
|
+
end
|
data/lib/lol/version.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
require "awesome_print"
|
4
|
+
|
5
|
+
# Requires connection
|
6
|
+
describe "Live API testing", :remote => true do
|
7
|
+
before(:all) do
|
8
|
+
VCR.configure do |c|
|
9
|
+
c.allow_http_connections_when_no_cassette = true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
subject { Lol::Client.new ENV['RIOT_GAMES_API_KEY'] }
|
14
|
+
let(:na) { Lol::Client.new ENV['RIOT_GAMES_API_KEY'], :region => "na" }
|
15
|
+
let(:eune) { Lol::Client.new ENV['RIOT_GAMES_API_KEY'], :region => "eune" }
|
16
|
+
let(:br) { Lol::Client.new ENV['RIOT_GAMES_API_KEY'], :region => "br"}
|
17
|
+
let(:tr) { Lol::Client.new ENV['RIOT_GAMES_API_KEY'], :region => "tr"}
|
18
|
+
|
19
|
+
describe "champion-v1.1" do
|
20
|
+
context "working realms" do
|
21
|
+
%w(euw na eune).each do |realm|
|
22
|
+
it "works on #{realm}" do
|
23
|
+
subject.region = realm
|
24
|
+
expect { subject.champion.get }.not_to raise_error
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "game-v1.2" do
|
31
|
+
context "working realms" do
|
32
|
+
%w(euw na eune).each do |realm|
|
33
|
+
it "works on #{realm}" do
|
34
|
+
subject.region = realm
|
35
|
+
expect { subject.game.recent(summoners[realm]) }.not_to raise_error
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
after(:all) do
|
42
|
+
VCR.configure do |c|
|
43
|
+
c.allow_http_connections_when_no_cassette = true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|