ruby-lol 0.0.2 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +19 -0
- data/lib/lol.rb +13 -1
- data/lib/lol/aggregated_statistic.rb +21 -0
- data/lib/lol/champion.rb +0 -4
- data/lib/lol/champion_statistic.rb +25 -0
- data/lib/lol/champion_statistics_summary.rb +27 -0
- data/lib/lol/client.rb +52 -4
- data/lib/lol/game.rb +4 -8
- data/lib/lol/league.rb +2 -5
- data/lib/lol/league_entry.rb +86 -0
- data/lib/lol/match_summary.rb +59 -0
- data/lib/lol/mini_series.rb +29 -0
- data/lib/lol/model.rb +5 -1
- data/lib/lol/player.rb +1 -5
- data/lib/lol/player_statistic.rb +43 -0
- data/lib/lol/ranked_statistics_summary.rb +35 -0
- data/lib/lol/{statistic.rb → raw_statistic.rb} +2 -6
- data/lib/lol/roster.rb +23 -0
- data/lib/lol/team.rb +122 -0
- data/lib/lol/team_member.rb +33 -0
- data/lib/lol/team_statistic.rb +45 -0
- data/lib/lol/version.rb +1 -1
- data/spec/fixtures/v1.1/get-ranked_stats.json +1 -0
- data/spec/fixtures/v1.1/get-stats.json +1 -0
- data/spec/fixtures/v2.1/get-team.json +962 -0
- data/spec/lol/aggregated_statistic_spec.rb +19 -0
- data/spec/lol/champion_statistic_spec.rb +19 -0
- data/spec/lol/champion_statistics_summary_spec.rb +26 -0
- data/spec/lol/client_spec.rb +117 -0
- data/spec/lol/game_spec.rb +2 -7
- data/spec/lol/league_entry_spec.rb +56 -0
- data/spec/lol/league_spec.rb +4 -1
- data/spec/lol/match_summary_spec.rb +25 -0
- data/spec/lol/mini_series_spec.rb +25 -0
- data/spec/lol/player_statistic_spec.rb +32 -0
- data/spec/lol/ranked_statistics_summary_spec.rb +32 -0
- data/spec/lol/{statistic_spec.rb → raw_statistic_spec.rb} +1 -1
- data/spec/lol/roster_spec.rb +24 -0
- data/spec/lol/team_member_spec.rb +27 -0
- data/spec/lol/team_spec.rb +66 -0
- data/spec/lol/team_statistic_spec.rb +31 -0
- data/spec/support/model_helpers.rb +25 -3
- metadata +47 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e4514fa6155984e91035d39c11f299138b3b104
|
4
|
+
data.tar.gz: 38fd725d0b900483523b5ffb7fb93c5131ce9eda
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a9c947b9c8f803bf1cf13850bfd40f0d7aad75b1bd81878a508cef07f51353306154b859e26a7fab50f496913e3153275119f5d062786477a6d9105f7b08374
|
7
|
+
data.tar.gz: 26103c71d7782de216d3eeb7a81f0062e4bd33f101fa0bb4cc29d6e39de0a798221ce0516042060cbfaa275ff0cf4c51abce4752ff1222e0281a07f8c204383b
|
data/README.md
CHANGED
@@ -39,6 +39,25 @@ Or install it yourself as:
|
|
39
39
|
# let's play a bit, who is free to play?
|
40
40
|
client.champion.select {|c| c.free_to_play }.map {|c| c.name}
|
41
41
|
# => %w(Aatrox Cassiopeia Lux Malphite MissFortune MonkeyKing Nautilus Sivir Talon Taric)
|
42
|
+
|
43
|
+
# it's time to fetch some of my games, isn't it?
|
44
|
+
games = client.game my_summoner_id
|
45
|
+
# => Array of Lol::Game
|
46
|
+
|
47
|
+
# let's get one game and look into it
|
48
|
+
game = games.first
|
49
|
+
|
50
|
+
# who was I playing with?
|
51
|
+
game.fellow_players
|
52
|
+
# => Array of Lol::Player
|
53
|
+
|
54
|
+
# gimme some stats!
|
55
|
+
game.statistics
|
56
|
+
# => Array of Lol::RawStatistic
|
57
|
+
|
58
|
+
# let's get some info about my Leagues now
|
59
|
+
leagues = client.league my_summoner_id
|
60
|
+
# => Array of Lol::League
|
42
61
|
```
|
43
62
|
|
44
63
|
## Contributing
|
data/lib/lol.rb
CHANGED
@@ -3,4 +3,16 @@ require __dir__ + "/lol/champion"
|
|
3
3
|
require __dir__ + "/lol/game"
|
4
4
|
require __dir__ + "/lol/league"
|
5
5
|
require __dir__ + "/lol/player"
|
6
|
-
require __dir__ + "/lol/
|
6
|
+
require __dir__ + "/lol/raw_statistic"
|
7
|
+
require __dir__ + "/lol/player_statistic"
|
8
|
+
require __dir__ + "/lol/aggregated_statistic"
|
9
|
+
require __dir__ + "/lol/ranked_statistics_summary"
|
10
|
+
require __dir__ + "/lol/champion_statistics_summary"
|
11
|
+
require __dir__ + "/lol/champion_statistic"
|
12
|
+
require __dir__ + "/lol/team"
|
13
|
+
require __dir__ + "/lol/roster"
|
14
|
+
require __dir__ + "/lol/team_member"
|
15
|
+
require __dir__ + "/lol/team_statistic"
|
16
|
+
require __dir__ + "/lol/match_summary"
|
17
|
+
require __dir__ + "/lol/league_entry"
|
18
|
+
require __dir__ + "/lol/mini_series"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'lol/model'
|
2
|
+
|
3
|
+
module Lol
|
4
|
+
class AggregatedStatistic < Lol::Model
|
5
|
+
# @!attribute [r] id
|
6
|
+
# @return [Fixnum] Statistic Type Id
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
# @!attribute [r] name
|
10
|
+
# @return [String] Statistic Type name
|
11
|
+
attr_reader :name
|
12
|
+
|
13
|
+
# @!attribute [r] count
|
14
|
+
# @return [Fixnum] Statistic value
|
15
|
+
attr_reader :count
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_writer :id, :name, :count
|
20
|
+
end
|
21
|
+
end
|
data/lib/lol/champion.rb
CHANGED
@@ -2,10 +2,6 @@ require 'lol/model'
|
|
2
2
|
|
3
3
|
module Lol
|
4
4
|
class Champion < Lol::Model
|
5
|
-
# @!attribute [r] raw
|
6
|
-
# @return [String] raw version of options Hash used to initialize Champion
|
7
|
-
attr_reader :raw
|
8
|
-
|
9
5
|
# @!attribute [r] id
|
10
6
|
# @return [Fixnum] id of Champion
|
11
7
|
attr_reader :id
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'lol/model'
|
2
|
+
|
3
|
+
module Lol
|
4
|
+
class ChampionStatistic < Lol::Model
|
5
|
+
# @!attribute [r] c
|
6
|
+
# @return [Fixnum] Count of samples (games) that make up the aggregated value, where relevant.
|
7
|
+
attr_reader :c
|
8
|
+
|
9
|
+
# @!attribute [r] id
|
10
|
+
# @return [Fixnum] Aggregated stat type Id
|
11
|
+
attr_reader :id
|
12
|
+
|
13
|
+
# @!attribute [r] name
|
14
|
+
# @return [String] Aggregated stat type Name
|
15
|
+
attr_reader :name
|
16
|
+
|
17
|
+
# @!attribute [r] value
|
18
|
+
# @return [Fixnum] Aggregated stat type Value
|
19
|
+
attr_reader :value
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
attr_writer :id, :name, :c, :value
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'lol/model'
|
2
|
+
|
3
|
+
module Lol
|
4
|
+
class ChampionStatisticsSummary < Lol::Model
|
5
|
+
# @!attribute [r] id
|
6
|
+
# @return [Fixnum] Champion Id
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
# @!attribute [r] name
|
10
|
+
# @return [String] Champion Name
|
11
|
+
attr_reader :name
|
12
|
+
|
13
|
+
# @!attribute [r] stats
|
14
|
+
# @return [Array] List of stats associated with this champion
|
15
|
+
attr_reader :stats
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_writer :id, :name
|
20
|
+
|
21
|
+
def stats= collection
|
22
|
+
@stats = collection.map do |c|
|
23
|
+
c.respond_to?(:[]) && ChampionStatistic.new(c) || c
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/lol/client.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'httparty'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
module Lol
|
4
5
|
class InvalidAPIResponse < StandardError; end
|
@@ -18,16 +19,17 @@ module Lol
|
|
18
19
|
# @param version [String] API version to call
|
19
20
|
# @param path [String] API path to call
|
20
21
|
# @return [String] full fledged url
|
21
|
-
def api_url version, path
|
22
|
+
def api_url version, path, params = {}
|
22
23
|
lol = version == "v1.1" ? "lol" : ""
|
23
|
-
|
24
|
+
query_string = URI.encode_www_form params.merge api_key: api_key
|
25
|
+
File.join "http://prod.api.pvp.net/api/", lol, "/#{region}/#{version}/", "#{path}?#{query_string}"
|
24
26
|
end
|
25
27
|
|
26
28
|
# Calls the API via HTTParty and handles errors
|
27
29
|
#
|
28
30
|
def get url
|
29
31
|
response = self.class.get(url)
|
30
|
-
if response["status"]
|
32
|
+
if response.is_a?(Hash) && response["status"]
|
31
33
|
raise InvalidAPIResponse.new(response["status"]["message"])
|
32
34
|
else
|
33
35
|
response
|
@@ -69,9 +71,55 @@ module Lol
|
|
69
71
|
# Retrieves leagues data for summoner, including leagues for all of summoner's teams, v2.1
|
70
72
|
# @return [Array] an array of champions
|
71
73
|
def league21 summoner_id
|
72
|
-
get(api_url("v2.1", "league/by-summoner/#{summoner_id}"))[summoner_id]
|
74
|
+
response = get(api_url("v2.1", "league/by-summoner/#{summoner_id}"))[summoner_id]
|
75
|
+
response.is_a?(Hash) ? [League.new(response)] : response.map {|l| League.new l}
|
73
76
|
end
|
74
77
|
|
78
|
+
# Calls the latest API version of stats
|
79
|
+
def stats *args
|
80
|
+
stats11 *args
|
81
|
+
end
|
82
|
+
|
83
|
+
# Retrieves player statistics summaries for the given summoner
|
84
|
+
# @return [Array] an array of player statistics, one per queue type
|
85
|
+
def stats11 summoner_id, extra = {}
|
86
|
+
if extra.keys.select { |k| k.to_sym != :season }.any?
|
87
|
+
raise ArgumentError, 'Only :season is allowed as extra parameter'
|
88
|
+
end
|
89
|
+
stats_api_path = "stats/by-summoner/#{summoner_id}/summary"
|
90
|
+
get(api_url('v1.1', stats_api_path, extra))['playerStatSummaries'].map do |player_stat_data|
|
91
|
+
PlayerStatistic.new player_stat_data
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Calls the latest API version of ranked_stats
|
96
|
+
def ranked_stats *args
|
97
|
+
ranked_stats11 *args
|
98
|
+
end
|
99
|
+
|
100
|
+
# Retrieves ranked statistics summary for the given summoner
|
101
|
+
# @return [RankedStatisticsSummary] Ranked Stats.
|
102
|
+
# Includes stats for Twisted Treeline and Summoner's Rift
|
103
|
+
def ranked_stats11 summoner_id, extra = {}
|
104
|
+
if extra.keys.select { |k| k.to_sym != :season }.any?
|
105
|
+
raise ArgumentError, 'Only :season is allowed as extra parameter'
|
106
|
+
end
|
107
|
+
stats_api_path = "stats/by-summoner/#{summoner_id}/ranked"
|
108
|
+
RankedStatisticsSummary.new get api_url 'v1.1', stats_api_path, extra
|
109
|
+
end
|
110
|
+
|
111
|
+
# Calls the latest API version of team returning the list of teams for the given summoner
|
112
|
+
def team *args
|
113
|
+
team21 *args
|
114
|
+
end
|
115
|
+
|
116
|
+
# Retrieves the list of Teams for the given summoner
|
117
|
+
# @return [Array] List of Team
|
118
|
+
def team21 summoner_id
|
119
|
+
get(api_url 'v2.1', "team/by-summoner/#{summoner_id}").map do |team_data|
|
120
|
+
Team.new team_data
|
121
|
+
end
|
122
|
+
end
|
75
123
|
|
76
124
|
# Initializes a Lol::Client
|
77
125
|
# @param api_key [String]
|
data/lib/lol/game.rb
CHANGED
@@ -2,10 +2,6 @@ require 'lol/model'
|
|
2
2
|
|
3
3
|
module Lol
|
4
4
|
class Game < Lol::Model
|
5
|
-
# @!attribute [r] raw
|
6
|
-
# @return [Hash] raw version of options Hash used to initialize Game
|
7
|
-
attr_reader :raw
|
8
|
-
|
9
5
|
# @!attribute [r] id
|
10
6
|
# @return [Fixnum] Game Id
|
11
7
|
attr_reader :game_id
|
@@ -15,7 +11,7 @@ module Lol
|
|
15
11
|
attr_reader :champion_id
|
16
12
|
|
17
13
|
# @!attribute [r] create_date
|
18
|
-
# @return [
|
14
|
+
# @return [Time] Date game was played
|
19
15
|
attr_reader :create_date
|
20
16
|
|
21
17
|
# @!attribute [r] create_date_str
|
@@ -74,7 +70,7 @@ module Lol
|
|
74
70
|
:create_date_str
|
75
71
|
|
76
72
|
def create_date= value
|
77
|
-
@create_date = value.is_a?(
|
73
|
+
@create_date = value.is_a?(Numeric) && Time.at(value / 1000) || value
|
78
74
|
end
|
79
75
|
|
80
76
|
def fellow_players= collection
|
@@ -85,8 +81,8 @@ module Lol
|
|
85
81
|
|
86
82
|
def statistics= collection
|
87
83
|
@statistics = collection.map do |c|
|
88
|
-
c.respond_to?(:[]) &&
|
84
|
+
c.respond_to?(:[]) && RawStatistic.new(c) || c
|
89
85
|
end
|
90
86
|
end
|
91
87
|
end
|
92
|
-
end
|
88
|
+
end
|
data/lib/lol/league.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
module Lol
|
2
2
|
# Holds the representation of a League
|
3
3
|
class League < Model
|
4
|
-
# @!attribute [r] raw
|
5
|
-
# @return [String] raw version of options Hash used to initialize League
|
6
|
-
attr_reader :raw
|
7
|
-
|
8
4
|
# @!attribute [r] timestamp
|
9
5
|
# @return [String] timestamp of league snapshot
|
10
6
|
attr_reader :timestamp
|
@@ -30,7 +26,8 @@ module Lol
|
|
30
26
|
attr_writer :timestamp, :name, :tier, :queue
|
31
27
|
|
32
28
|
def entries= list
|
33
|
-
|
29
|
+
@entries = []
|
30
|
+
list.each {|entry| @entries << LeagueEntry.new(entry)}
|
34
31
|
end
|
35
32
|
end
|
36
33
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Lol
|
2
|
+
# Holds the representation of a League
|
3
|
+
class LeagueEntry < Model
|
4
|
+
# @!attribute [r] player_or_team_id
|
5
|
+
# @return [String] id for the player or the team returned
|
6
|
+
attr_reader :player_or_team_id
|
7
|
+
|
8
|
+
# @!attribute [r] player_or_team_name
|
9
|
+
# @return [String] name for the player or the team returned
|
10
|
+
attr_reader :player_or_team_name
|
11
|
+
|
12
|
+
# @!attribute [r] league_name
|
13
|
+
# @return [String] name of league
|
14
|
+
attr_reader :league_name
|
15
|
+
|
16
|
+
# @!attribute [r] queue_type
|
17
|
+
# @return [String] type of queue
|
18
|
+
attr_reader :queue_type
|
19
|
+
|
20
|
+
# @!attribute [r] entry tier
|
21
|
+
# @return [String] tier of league
|
22
|
+
attr_reader :tier
|
23
|
+
|
24
|
+
# @!attribute [r] rank
|
25
|
+
# @return [String] entry rank
|
26
|
+
attr_reader :rank
|
27
|
+
|
28
|
+
# @!attribute [r] league_points
|
29
|
+
# @return [String] league points of entry
|
30
|
+
attr_reader :league_points
|
31
|
+
|
32
|
+
# @!attribute [r] wins
|
33
|
+
# @return [String] wins
|
34
|
+
attr_reader :wins
|
35
|
+
|
36
|
+
# @!attribute [r] losses
|
37
|
+
# @return [String] losses
|
38
|
+
attr_reader :losses
|
39
|
+
|
40
|
+
# @!attribute [r] is_hot_streak
|
41
|
+
# @return [Boolean] is currently on hot streak
|
42
|
+
attr_reader :is_hot_streak
|
43
|
+
|
44
|
+
# @!attribute [r] is_veteran
|
45
|
+
# @return [Boolean] is a veteran in this league
|
46
|
+
attr_reader :is_veteran
|
47
|
+
|
48
|
+
# @!attribute [r] is_fresh_blood
|
49
|
+
# @return [Boolean] is fresh blood in this league
|
50
|
+
attr_reader :is_fresh_blood
|
51
|
+
|
52
|
+
# @!attribute [r] is_inactive
|
53
|
+
# @return [Boolean] is marked as inactive
|
54
|
+
attr_reader :is_inactive
|
55
|
+
|
56
|
+
# @!attribute [r] last_played
|
57
|
+
# @return [DateTime] date of last played game
|
58
|
+
# at the time of writing this attributes is broken in the API
|
59
|
+
# it always returns 0.
|
60
|
+
attr_reader :last_played
|
61
|
+
|
62
|
+
# @!attribute [r] time_until_decay
|
63
|
+
# @return [Boolean] time until league decay
|
64
|
+
attr_reader :time_until_decay
|
65
|
+
|
66
|
+
# @!attribute [r] mini_series
|
67
|
+
# @return [MiniSeries] if player is in a mini_series, returns the MiniSeries object
|
68
|
+
# representing it
|
69
|
+
attr_reader :mini_series
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
attr_writer :player_or_team_id, :player_or_team_name, :league_name, :queue_type, :tier,
|
74
|
+
:league_points, :wins, :losses, :is_hot_streak, :is_veteran, :is_fresh_blood,
|
75
|
+
:is_inactive, :time_until_decay, :rank
|
76
|
+
|
77
|
+
def last_played= date
|
78
|
+
@last_played = date
|
79
|
+
end
|
80
|
+
|
81
|
+
def mini_series= raw
|
82
|
+
@mini_series = MiniSeries.new raw
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'lol/model'
|
2
|
+
|
3
|
+
module Lol
|
4
|
+
class MatchSummary < Lol::Model
|
5
|
+
# @!attribute [r] assists
|
6
|
+
# @return [Fixnum] Number of assists
|
7
|
+
attr_reader :assists
|
8
|
+
|
9
|
+
# @!attribute [r] date
|
10
|
+
# @return [Time] Match date
|
11
|
+
attr_reader :date
|
12
|
+
|
13
|
+
# @!attribute [r] deaths
|
14
|
+
# @return [Fixnum] Number of deaths
|
15
|
+
attr_reader :deaths
|
16
|
+
|
17
|
+
# @!attribute [r] game_id
|
18
|
+
# @return [Fixnum] Game Id
|
19
|
+
attr_reader :game_id
|
20
|
+
|
21
|
+
# @!attribute [r] game_mode
|
22
|
+
# @return [String] Game Mode
|
23
|
+
attr_reader :game_mode
|
24
|
+
|
25
|
+
# @!attribute [r] invalid
|
26
|
+
# @return [true] If the match is invalid
|
27
|
+
# @return [false] If the match is valid
|
28
|
+
attr_reader :invalid
|
29
|
+
|
30
|
+
# @!attribute [r] kills
|
31
|
+
# @return [Fixnum] Number of kills
|
32
|
+
attr_reader :kills
|
33
|
+
|
34
|
+
# @!attribute [r] map_id
|
35
|
+
# @return [Fixnum] Map Id
|
36
|
+
attr_reader :map_id
|
37
|
+
|
38
|
+
# @!attribute [r] opposing_team_kills
|
39
|
+
# @return [Fixnum] Opposing Team Kills
|
40
|
+
attr_reader :opposing_team_kills
|
41
|
+
|
42
|
+
# @!attribute [r] opposing_team_name
|
43
|
+
# @return [String] Opposing Team Name
|
44
|
+
attr_reader :opposing_team_name
|
45
|
+
|
46
|
+
# @!attribute [r] win
|
47
|
+
# @return [true] If the team won this match
|
48
|
+
# @return [false] If the team lost this match
|
49
|
+
attr_reader :win
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
attr_writer :assists, :deaths, :game_id, :game_mode, :invalid, :kills, :map_id, :opposing_team_kills, :opposing_team_name, :win
|
54
|
+
|
55
|
+
def date= value
|
56
|
+
@date = value.is_a?(Numeric) && Time.at(value / 1000) || value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Lol
|
2
|
+
# Holds the representation of a MiniSeries
|
3
|
+
class MiniSeries < Model
|
4
|
+
# @!attribute [r] target
|
5
|
+
# @return [String] number of games required to advance
|
6
|
+
attr_reader :target
|
7
|
+
|
8
|
+
# @!attribute [r] wins
|
9
|
+
# @return [Fixnum] wins in the miniseries
|
10
|
+
attr_reader :wins
|
11
|
+
|
12
|
+
# @!attribute [r] losses
|
13
|
+
# @return [Fixnum] losses in the miniseries
|
14
|
+
attr_reader :losses
|
15
|
+
|
16
|
+
# @!attribute [r] time_left_to_play_millis
|
17
|
+
# @return [Fixnum] time left to play the miniseries, expressed in milliseconds
|
18
|
+
attr_reader :time_left_to_play_millis
|
19
|
+
|
20
|
+
# @!attribute [r] progress
|
21
|
+
# @return [String] string representation of the miniseries progress.
|
22
|
+
# i.e. "WLN" (Win / Loss / Not played)
|
23
|
+
attr_reader :progress
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_writer :target, :wins, :losses, :time_left_to_play_millis, :progress
|
28
|
+
end
|
29
|
+
end
|