ruby-lol 0.0.2 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -0,0 +1,19 @@
|
|
1
|
+
require "lol"
|
2
|
+
require "spec_helper"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe AggregatedStatistic do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { id: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(id name count).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe ChampionStatistic do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { id: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(id name c value).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe ChampionStatisticsSummary do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { id: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(id name).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'stats attribute' do
|
21
|
+
it_behaves_like 'collection attribute' do
|
22
|
+
let(:attribute) { 'stats' }
|
23
|
+
let(:attribute_class) { ChampionStatistic }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/spec/lol/client_spec.rb
CHANGED
@@ -93,6 +93,119 @@ describe Client do
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
describe '#stats' do
|
97
|
+
it 'defaults to v1.1' do
|
98
|
+
expect(subject).to receive(:stats11).with 'foo'
|
99
|
+
subject.stats 'foo'
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe '#stats11' do
|
104
|
+
let(:client) { Client.new 'foo' }
|
105
|
+
let(:fixture) { load_fixture 'stats', 'v1.1', 'get' }
|
106
|
+
|
107
|
+
subject do
|
108
|
+
expect(Client).to receive(:get).with(client.api_url('v1.1', "stats/by-summoner/1/summary")).and_return fixture
|
109
|
+
client.stats11 1
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'requires a summoner' do
|
113
|
+
expect { client.stats }.to raise_error ArgumentError
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'returns an array' do
|
117
|
+
expect(subject).to be_a Array
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'returns an array of PlayerStatistic' do
|
121
|
+
expect(subject.map(&:class).uniq).to eq [PlayerStatistic]
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'fetches PlayerStatistics from the API' do
|
125
|
+
expect(subject.size).to eq load_fixture('stats', 'v1.1', 'get')['playerStatSummaries'].size
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'optionally accepts a season' do
|
129
|
+
expect(Client).to receive(:get).with(client.api_url('v1.1', 'stats/by-summoner/1/summary', season: '1')).and_return fixture
|
130
|
+
client.stats11 '1', season: '1'
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'raises an error when unexpected parameter is received' do
|
134
|
+
expect { client.stats11 '1', asd: 'foo' }.to raise_error ArgumentError
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe '#ranked_stats' do
|
139
|
+
it 'defaults to v1.1' do
|
140
|
+
expect(subject).to receive(:ranked_stats11).with 'foo'
|
141
|
+
subject.ranked_stats 'foo'
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#ranked_stats11' do
|
146
|
+
let(:client) { Client.new 'foo' }
|
147
|
+
let(:fixture) { load_fixture 'ranked_stats', 'v1.1', 'get' }
|
148
|
+
|
149
|
+
subject do
|
150
|
+
expect(Client).to receive(:get).with(client.api_url('v1.1', "stats/by-summoner/1/ranked")).and_return fixture
|
151
|
+
client.ranked_stats11 1
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'requires a summoner' do
|
155
|
+
expect { client.ranked_stats }.to raise_error ArgumentError
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'returns a RankedStatisticsSummary' do
|
159
|
+
expect(subject).to be_a RankedStatisticsSummary
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'fetches RankedStatisticsSummary from the API' do
|
163
|
+
expect(subject.champions.size).to eq load_fixture('ranked_stats', 'v1.1', 'get')['champions'].size
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'optionally accepts a season' do
|
167
|
+
expect(Client).to receive(:get).with(client.api_url('v1.1', 'stats/by-summoner/1/ranked', season: '1')).and_return fixture
|
168
|
+
client.ranked_stats11 '1', season: '1'
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'raises an error when unexpected parameter is received' do
|
172
|
+
expect { client.ranked_stats11 '1', asd: 'foo' }.to raise_error ArgumentError
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe '#team' do
|
177
|
+
it 'defaults to v2.1' do
|
178
|
+
expect(subject).to receive(:team21).with 'foo'
|
179
|
+
subject.team 'foo'
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe '#team21' do
|
184
|
+
let(:client) { Client.new 'foo' }
|
185
|
+
let(:fixture) { load_fixture 'team', 'v2.1', 'get' }
|
186
|
+
|
187
|
+
subject do
|
188
|
+
expect(Client).to receive(:get).with(client.api_url('v2.1', "team/by-summoner/1")).and_return fixture
|
189
|
+
client.team21 1
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'requires a summoner' do
|
193
|
+
expect { client.team21 }.to raise_error ArgumentError
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'returns an array' do
|
197
|
+
expect(subject).to be_a Array
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'returns an array of Team' do
|
201
|
+
expect(subject.map(&:class).uniq).to eq [Team]
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'fetches Team from the API' do
|
205
|
+
expect(subject.size).to eq fixture.size
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
96
209
|
describe "#region" do
|
97
210
|
it "returns current region" do
|
98
211
|
expect(subject.region).to eq("euw")
|
@@ -134,6 +247,10 @@ describe Client do
|
|
134
247
|
it "does not have lol if url is v2.1 or greater" do
|
135
248
|
expect(subject.api_url("v2.1", "foo")).to eq("http://prod.api.pvp.net/api/euw/v2.1/foo?api_key=foo")
|
136
249
|
end
|
250
|
+
|
251
|
+
it "optionally accept query string parameters" do
|
252
|
+
expect(subject.api_url("v2.1", "foo", a: 'b')).to eq("http://prod.api.pvp.net/api/euw/v2.1/foo?a=b&api_key=foo")
|
253
|
+
end
|
137
254
|
end
|
138
255
|
|
139
256
|
describe "league" do
|
data/spec/lol/game_spec.rb
CHANGED
@@ -27,18 +27,13 @@ describe Game do
|
|
27
27
|
describe 'statistics attribute' do
|
28
28
|
it_behaves_like 'collection attribute' do
|
29
29
|
let(:attribute) { 'statistics' }
|
30
|
-
let(:attribute_class) {
|
30
|
+
let(:attribute_class) { RawStatistic }
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
describe 'create_date attribute' do
|
35
|
-
it_behaves_like '
|
35
|
+
it_behaves_like 'time attribute' do
|
36
36
|
let(:attribute) { 'create_date' }
|
37
|
-
let(:attribute_value) { DateTime.now }
|
38
|
-
end
|
39
|
-
|
40
|
-
it "parses the value is it's not a DateTime object" do
|
41
|
-
expect(Game.new(:create_date => Time.now.to_i).create_date).to be_a DateTime
|
42
37
|
end
|
43
38
|
end
|
44
39
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe LeagueEntry do
|
7
|
+
it "inherits from Lol::Model" do
|
8
|
+
expect(League.ancestors[1]).to eq(Model)
|
9
|
+
end
|
10
|
+
|
11
|
+
context "initialization" do
|
12
|
+
it_behaves_like 'Lol model' do
|
13
|
+
let(:valid_attributes) { { player_or_team_id: 123456 } }
|
14
|
+
end
|
15
|
+
|
16
|
+
%w(player_or_team_id player_or_team_name league_name queue_type tier rank league_points wins losses is_hot_streak is_veteran is_fresh_blood is_inactive last_played time_until_decay).each do |attribute|
|
17
|
+
describe "#{attribute} attribute" do
|
18
|
+
it_behaves_like 'plain attribute' do
|
19
|
+
let(:attribute) { attribute }
|
20
|
+
let(:attribute_value) { 'asd' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns a MiniSeries object if a miniseries is available" do
|
26
|
+
mini_series =<<-EOF
|
27
|
+
{
|
28
|
+
"playerOrTeamId" : "30247742",
|
29
|
+
"playerOrTeamName" : "Danterno",
|
30
|
+
"leagueName" : "Annie's Blades",
|
31
|
+
"queueType" : "RANKED_SOLO_5x5",
|
32
|
+
"tier" : "SILVER",
|
33
|
+
"rank" : "II",
|
34
|
+
"leaguePoints" : 84,
|
35
|
+
"wins" : 35,
|
36
|
+
"losses" : 0,
|
37
|
+
"isHotStreak" : false,
|
38
|
+
"isVeteran" : false,
|
39
|
+
"isFreshBlood" : false,
|
40
|
+
"isInactive" : false,
|
41
|
+
"lastPlayed" : 0,
|
42
|
+
"timeUntilDecay" : -1,
|
43
|
+
"miniSeries" : {
|
44
|
+
"target" : 2,
|
45
|
+
"wins" : 0,
|
46
|
+
"losses" : 1,
|
47
|
+
"timeLeftToPlayMillis" : 0,
|
48
|
+
"progress" : "LNN"
|
49
|
+
}
|
50
|
+
}
|
51
|
+
EOF
|
52
|
+
subject = LeagueEntry.new JSON.parse(mini_series)
|
53
|
+
expect(subject.mini_series).to be_a(MiniSeries)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/lol/league_spec.rb
CHANGED
@@ -22,6 +22,9 @@ describe League do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
it "fills entries with LeagueEntry objects" do
|
26
|
+
league = League.new(load_fixture("league", "v2.1", "get")["foo"])
|
27
|
+
expect(league.entries.map(&:class).uniq).to eq([LeagueEntry])
|
28
|
+
end
|
26
29
|
end
|
27
30
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe MatchSummary do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { win: true } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(assists deaths game_id game_mode invalid kills map_id opposing_team_kills opposing_team_name win).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "date attribute" do
|
21
|
+
it_behaves_like 'time attribute' do
|
22
|
+
let(:attribute) { 'date' }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe MiniSeries do
|
7
|
+
it "inherits from Lol::Model" do
|
8
|
+
expect(MiniSeries.ancestors[1]).to eq(Model)
|
9
|
+
end
|
10
|
+
|
11
|
+
context "initialization" do
|
12
|
+
it_behaves_like 'Lol model' do
|
13
|
+
let(:valid_attributes) { { target: 3 } }
|
14
|
+
end
|
15
|
+
|
16
|
+
%w(target wins losses time_left_to_play_millis progress).each do |attribute|
|
17
|
+
describe "#{attribute} attribute" do
|
18
|
+
it_behaves_like 'plain attribute' do
|
19
|
+
let(:attribute) { attribute }
|
20
|
+
let(:attribute_value) { 'asd' }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe PlayerStatistic do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { wins: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(losses modify_date_str player_stat_summary_type wins).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'aggregated_stats attribute' do
|
21
|
+
it_behaves_like 'collection attribute' do
|
22
|
+
let(:attribute) { 'aggregated_stats' }
|
23
|
+
let(:attribute_class) { AggregatedStatistic }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'modify_date attribute' do
|
28
|
+
it_behaves_like 'time attribute' do
|
29
|
+
let(:attribute) { 'modify_date' }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe RankedStatisticsSummary do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { summoner_id: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
%w(summoner_id modify_date_str).each do |attribute|
|
12
|
+
describe "#{attribute} attribute" do
|
13
|
+
it_behaves_like 'plain attribute' do
|
14
|
+
let(:attribute) { attribute }
|
15
|
+
let(:attribute_value) { 'asd' }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'champions attribute' do
|
21
|
+
it_behaves_like 'collection attribute' do
|
22
|
+
let(:attribute) { 'champions' }
|
23
|
+
let(:attribute_class) { ChampionStatisticsSummary }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'modify_date attribute' do
|
28
|
+
it_behaves_like 'time attribute' do
|
29
|
+
let(:attribute) { 'modify_date' }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "lol"
|
3
|
+
|
4
|
+
include Lol
|
5
|
+
|
6
|
+
describe Roster do
|
7
|
+
it_behaves_like 'Lol model' do
|
8
|
+
let(:valid_attributes) { { owner_id: 1 } }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "owner_id attribute" do
|
12
|
+
it_behaves_like 'plain attribute' do
|
13
|
+
let(:attribute) { 'owner_id' }
|
14
|
+
let(:attribute_value) { 'asd' }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'member_list attribute' do
|
19
|
+
it_behaves_like 'collection attribute' do
|
20
|
+
let(:attribute) { 'member_list' }
|
21
|
+
let(:attribute_class) { TeamMember }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|