riot_api 0.0.2 → 0.0.4

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.
Files changed (38) hide show
  1. data/CHANGELOG.md +11 -0
  2. data/README.md +33 -1
  3. data/lib/riot_api/api.rb +36 -4
  4. data/lib/riot_api/model/base.rb +9 -0
  5. data/lib/riot_api/model/summoner.rb +13 -0
  6. data/lib/riot_api/model.rb +8 -0
  7. data/lib/riot_api/resource/base.rb +4 -3
  8. data/lib/riot_api/resource/base_v21.rb +9 -0
  9. data/lib/riot_api/resource/champions.rb +20 -0
  10. data/lib/riot_api/resource/game.rb +21 -0
  11. data/lib/riot_api/resource/league.rb +21 -0
  12. data/lib/riot_api/resource/stats.rb +3 -3
  13. data/lib/riot_api/resource/summoner.rb +18 -3
  14. data/lib/riot_api/resource/team.rb +21 -0
  15. data/lib/riot_api/resource.rb +6 -1
  16. data/lib/riot_api/version.rb +1 -1
  17. data/lib/riot_api.rb +1 -0
  18. data/riot_api.gemspec +1 -0
  19. data/spec/api_spec.rb +154 -9
  20. data/spec/model/summoner_spec.rb +14 -0
  21. data/spec/spec_helper.rb +6 -0
  22. data/spec/support/vcr.rb +1 -1
  23. data/spec/vcr/cassettes/RiotApi_API/_champions/_free/should_return_a_list_of_all_free_champions.yml +40 -0
  24. data/spec/vcr/cassettes/RiotApi_API/_champions/_list/should_return_a_list_of_all_champions.yml +40 -0
  25. data/spec/vcr/cassettes/RiotApi_API/_game/_recent/should_return_a_list_of_recent_games_played.yml +40 -0
  26. data/spec/vcr/cassettes/RiotApi_API/_league/_by_summoner/should_return_leagues_data_for_summoner.yml +862 -0
  27. data/spec/vcr/cassettes/RiotApi_API/_stats/_ranked/omitting_season/should_return_ranked_information_from_the_summoner_id.yml +40 -0
  28. data/spec/vcr/cassettes/RiotApi_API/_stats/_ranked/specifying_season/should_return_ranked_information_from_the_summoner_id_for_the_specified_season.yml +40 -0
  29. data/spec/vcr/cassettes/RiotApi_API/_stats/_summary/omitting_season/should_return_summary_information_from_the_summoner_id.yml +40 -0
  30. data/spec/vcr/cassettes/RiotApi_API/_stats/_summary/specifying_season/should_return_summary_information_from_the_summoner_id_for_the_specified_season.yml +40 -0
  31. data/spec/vcr/cassettes/RiotApi_API/_summoner/_masteries/should_return_a_list_of_mastery_pages_containing_lists_of_talents.yml +79 -0
  32. data/spec/vcr/cassettes/RiotApi_API/_summoner/_names/should_return_an_array_of_summoners_with_name_set.yml +40 -0
  33. data/spec/vcr/cassettes/RiotApi_API/_summoner/_runes/should_return_a_list_of_rune_pages_containing_lists_of_talents.yml +479 -0
  34. data/spec/vcr/cassettes/RiotApi_API/_team/_by_summoner/should_return_team_data_for_summoner.yml +201 -0
  35. metadata +89 -11
  36. checksums.yaml +0 -7
  37. data/spec/vcr/cassettes/RiotApi_API/_stats/_ranked/should_return_ranked_information_from_the_summoner_name.yml +0 -44
  38. data/spec/vcr/cassettes/RiotApi_API/_stats/_summary/should_return_summary_information_from_the_summoner_id.yml +0 -44
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## 0.0.4
2
+ * Yanked 0.0.3 release as Team method not implemented
3
+ * Fixed team method
4
+ * Otherwise same as 0.0.3
5
+
6
+ ## 0.0.3 (Yanked)
7
+ * All Endpoints Implemented
8
+ * Initial Model Approach for Summoner using Virtus
9
+ * Refactoring of base paths and regions to DRY up resources
10
+ * Errors for invalid regions parameter
11
+
1
12
  ## 0.0.2
2
13
  * Refactored URL building
3
14
  * Add Stats method
data/README.md CHANGED
@@ -45,6 +45,38 @@ summoner_details = ra.summoner.name('Best Lux EUW')
45
45
  summoner.name # => "Best Lux EUW"
46
46
  ```
47
47
 
48
+ ## Methods
49
+
50
+ ```
51
+ RiotApi::API
52
+ #summoner
53
+ #name(summoner_name)
54
+ should return information from a given summoner name
55
+ #id(summoner_name)
56
+ should return information from a given summoner id
57
+ #names(summoner_name_1, summoner_name_2)
58
+ should return an array of summoners with name set
59
+ #stats
60
+ #ranked(summoner_name)
61
+ should return ranked information from a given summoner name
62
+ #summary(summoner_name)
63
+ should return summary information from a given summoner id
64
+ #champions
65
+ #list
66
+ should return a list of all champions
67
+ #free
68
+ should return a list of all free champions
69
+ #game
70
+ #recent(summoner_name)
71
+ should return a list of recent games played from a given summoner id
72
+ #league
73
+ #by_summoner(summoner_name)
74
+ should return leagues data from a given summoner id
75
+ #team
76
+ #by_summoner(summoner_id)
77
+ should return team data from a given summoner id
78
+ ```
79
+
48
80
  ## ChangeLog / History / Releases
49
81
 
50
82
  see the [CHANGELOG.md](./CHANGELOG.md) file.
@@ -77,7 +109,7 @@ rspec
77
109
 
78
110
  ### Contributors
79
111
 
80
- * None Yet :)
112
+ * [pcg79](https://github.com/pcg79)
81
113
 
82
114
  For more information and a complete list see [the contributor page on GitHub](https://github.com/petems/riot_api/contributors).
83
115
 
data/lib/riot_api/api.rb CHANGED
@@ -1,11 +1,26 @@
1
1
  module RiotApi
2
2
  class API
3
+
4
+ # Creates a new Riot API client instance.
5
+ #
6
+ # @param [Hash] params
7
+ # @option params [String] :api_key The api_key (required)
8
+ # @option params [String] :api_key The region ('eune','br','tr','na','euw') (required)
9
+ # @option params [String] :base_url ("http://prod.api.pvp.net/api/lol/#{@region}/") API base url with region
10
+ # @option params [Symbol] :faraday_adapter ('Faraday.default_adapter') Faraday adapter/http client library to use.
11
+ # @raise [ArgumentError] when no api_key is provided
12
+ # @raise [ArgumentError] when no region is provided
13
+ # @raise [ArgumentError] when region is not one of 'eune','br','tr','na', or 'euw'
14
+ # @example
15
+ # ra = RiotApi::API.new :api_key => '######', :region => 'euw'
16
+ #
17
+ # @see [Faraday]
3
18
  def initialize(params)
4
19
  @api_key = params[:api_key]
5
20
  @region = params[:region]
6
21
  @debug = params[:debug]
7
22
  @ssl = params[:ssl] || { :verify => true }
8
- @base_url = params[:base_url] || "http://prod.api.pvp.net/api/lol/#{@region}/"
23
+ @base_url = params[:base_url] || "http://prod.api.pvp.net/api/"
9
24
  @faraday_adapter = params[:faraday_adapter] || Faraday.default_adapter
10
25
  @raise_status_errors = params[:raise_status_errors] || false
11
26
  @faraday = params[:faraday] || default_faraday
@@ -14,12 +29,28 @@ module RiotApi
14
29
  raise ArgumentError, "Invalid Region (Valid regions: 'eune','br','tr','na','euw')" unless ['eune','br','tr','na','euw'].include?(@region)
15
30
  end
16
31
 
17
- def summoner
18
- RiotApi::Resource::Summoner.new(@faraday)
32
+ def champions
33
+ RiotApi::Resource::Champions.new(@faraday, @region)
34
+ end
35
+
36
+ def game
37
+ RiotApi::Resource::Game.new(@faraday, @region)
38
+ end
39
+
40
+ def league
41
+ RiotApi::Resource::League.new(@faraday, @region)
19
42
  end
20
43
 
21
44
  def stats
22
- RiotApi::Resource::Stats.new(@faraday)
45
+ RiotApi::Resource::Stats.new(@faraday, @region)
46
+ end
47
+
48
+ def summoner
49
+ RiotApi::Resource::Summoner.new(@faraday, @region)
50
+ end
51
+
52
+ def team
53
+ RiotApi::Resource::Team.new(@faraday, @region)
23
54
  end
24
55
 
25
56
  def default_faraday
@@ -34,5 +65,6 @@ module RiotApi
34
65
  faraday.headers['User-Agent'] = "riot_api rubygem v#{RiotApi::VERSION}"
35
66
  end
36
67
  end
68
+
37
69
  end
38
70
  end
@@ -0,0 +1,9 @@
1
+ require 'virtus'
2
+
3
+ module RiotApi
4
+ module Model
5
+ class Base
6
+ include Virtus.model
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module RiotApi
2
+ module Model
3
+ class Summoner < Base
4
+ attribute :id, Integer
5
+ attribute :name, String
6
+ attribute :profile_icon_id, Integer
7
+ attribute :summoner_level, Integer
8
+ attribute :revision_date_str, String
9
+ attribute :revision_date, Integer
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ require 'riot_api/model/base'
2
+ require 'riot_api/model/summoner'
3
+
4
+ module RiotApi
5
+ module Model
6
+
7
+ end
8
+ end
@@ -1,12 +1,13 @@
1
1
  module RiotApi
2
2
  module Resource
3
3
  class Base
4
- def initialize(connection, options = {})
4
+ def initialize(connection, region, options = {})
5
5
  @connection = connection
6
+ @region = region
6
7
  end
7
8
 
8
- def endpoint_version
9
- "v1.1"
9
+ def endpoint_precursor
10
+ "lol/#{@region}/v1.1"
10
11
  end
11
12
  end
12
13
  end
@@ -0,0 +1,9 @@
1
+ module RiotApi
2
+ module Resource
3
+ class BaseV21 < Base
4
+ def endpoint_precursor
5
+ "#{@region}/v2.1"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ module RiotApi
2
+ module Resource
3
+ class Champions < Base
4
+
5
+ def list(free=false)
6
+ @connection.get(base_path, { :freeToPlay => free }).body.champions
7
+ end
8
+
9
+ def free
10
+ list(true)
11
+ end
12
+
13
+ private
14
+
15
+ def base_path
16
+ "#{endpoint_precursor}/champion"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ module RiotApi
2
+ module Resource
3
+ class Game < Base
4
+
5
+ def recent(summoner_id)
6
+ @connection.get(recent_path(summoner_id)).body.games
7
+ end
8
+
9
+ private
10
+
11
+ def recent_path(summoner_id)
12
+ "#{base_path(summoner_id)}/recent"
13
+ end
14
+
15
+ def base_path(summoner_id)
16
+ "#{endpoint_precursor}/game/by-summoner/#{summoner_id}"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module RiotApi
2
+ module Resource
3
+ class League < BaseV21
4
+
5
+ def by_summoner(summoner_id)
6
+ @connection.get(by_summoner_path(summoner_id)).body[summoner_id.to_s]
7
+ end
8
+
9
+ private
10
+
11
+ def by_summoner_path(summoner_id)
12
+ "#{base_path}/by-summoner/#{summoner_id}"
13
+ end
14
+
15
+ def base_path
16
+ "#{endpoint_precursor}/league"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -3,17 +3,17 @@ module RiotApi
3
3
  class Stats < Base
4
4
 
5
5
  def ranked(id, opts = {})
6
- @connection.get("#{base_path(id)}/ranked").body
6
+ @connection.get("#{base_path(id)}/ranked", opts).body
7
7
  end
8
8
 
9
9
  def summary(id, opts = {})
10
- @connection.get("#{base_path(id)}/summary").body
10
+ @connection.get("#{base_path(id)}/summary", opts).body
11
11
  end
12
12
 
13
13
  private
14
14
 
15
15
  def base_path(id)
16
- "#{endpoint_version}/stats/by-summoner/#{id}"
16
+ "#{endpoint_precursor}/stats/by-summoner/#{id}"
17
17
  end
18
18
  end
19
19
  end
@@ -3,17 +3,32 @@ module RiotApi
3
3
  class Summoner < Base
4
4
 
5
5
  def name(name, opts = {})
6
- @connection.get("#{base_path}/by-name/#{name}/").body
6
+ RiotApi::Model::Summoner.new @connection.get("#{base_path}/by-name/#{name}/").body
7
7
  end
8
8
 
9
9
  def id(id, opts = {})
10
- @connection.get("#{base_path}/#{id}/").body
10
+ RiotApi::Model::Summoner.new @connection.get("#{base_path}/#{id}/").body
11
+ end
12
+
13
+ def masteries(id)
14
+ @connection.get("#{base_path}/#{id}/masteries").body
15
+ end
16
+
17
+ def names(*ids)
18
+ ids = ids.compact.join(',')
19
+ @connection.get("#{base_path}/#{ids}/name").body.summoners.map do |summoner|
20
+ RiotApi::Model::Summoner.new summoner
21
+ end
22
+ end
23
+
24
+ def runes(id)
25
+ @connection.get("#{base_path}/#{id}/runes").body
11
26
  end
12
27
 
13
28
  private
14
29
 
15
30
  def base_path
16
- "#{endpoint_version}/summoner/"
31
+ "#{endpoint_precursor}/summoner/"
17
32
  end
18
33
 
19
34
  end
@@ -0,0 +1,21 @@
1
+ module RiotApi
2
+ module Resource
3
+ class Team < BaseV21
4
+
5
+ def by_summoner(summoner_id)
6
+ @connection.get(by_summoner_path(summoner_id)).body
7
+ end
8
+
9
+ private
10
+
11
+ def by_summoner_path(summoner_id)
12
+ "#{base_path}/by-summoner/#{summoner_id}"
13
+ end
14
+
15
+ def base_path
16
+ "#{endpoint_precursor}/team"
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -1,6 +1,11 @@
1
1
  require 'riot_api/resource/base'
2
- require 'riot_api/resource/summoner'
2
+ require 'riot_api/resource/base_v21'
3
+ require 'riot_api/resource/champions'
4
+ require 'riot_api/resource/game'
5
+ require 'riot_api/resource/league'
3
6
  require 'riot_api/resource/stats'
7
+ require 'riot_api/resource/summoner'
8
+ require 'riot_api/resource/team'
4
9
 
5
10
  module RiotApi
6
11
  module Resource
@@ -1,3 +1,3 @@
1
1
  module RiotApi
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.4'
3
3
  end
data/lib/riot_api.rb CHANGED
@@ -4,6 +4,7 @@ require 'faraday_middleware'
4
4
  require 'riot_api/version'
5
5
  require 'riot_api/api'
6
6
  require 'riot_api/resource'
7
+ require 'riot_api/model'
7
8
 
8
9
  module RiotApi
9
10
  end
data/riot_api.gemspec CHANGED
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
26
26
  gem.add_dependency 'faraday_middleware', '~> 0.9.0'
27
27
  gem.add_dependency 'json', '~> 1.8.1'
28
28
  gem.add_dependency 'rash', '~> 0.4.0'
29
+ gem.add_dependency 'virtus', '~> 1.0.1'
29
30
 
30
31
  gem.add_development_dependency 'rspec', '~> 2.0'
31
32
  gem.add_development_dependency 'guard', '~> 2.1.0'
data/spec/api_spec.rb CHANGED
@@ -59,6 +59,46 @@ describe RiotApi::API, :vcr do
59
59
  end
60
60
  end
61
61
 
62
+ describe '#masteries' do
63
+ let(:summoner_id) { '19531813' }
64
+
65
+ let(:response) {
66
+ subject.summoner.masteries summoner_id
67
+ }
68
+
69
+ it 'should return a list of mastery pages containing lists of talents' do
70
+ response.pages.count.should be > 0
71
+ response.pages.first.talents.count.should be > 0
72
+ end
73
+ end
74
+
75
+ describe '#names' do
76
+ let(:froggen) { '19531813' }
77
+ let(:response) {
78
+ subject.summoner.names summoner_id, froggen
79
+ }
80
+
81
+ it "should return an array of summoners with name set" do
82
+ response.class.should == Array
83
+ response.count.should == 2
84
+ response.first.class.should == RiotApi::Model::Summoner
85
+ response.first.name.should == "Best Lux EUW"
86
+ end
87
+ end
88
+
89
+ describe '#runes' do
90
+ let(:summoner_id) { '19531813' }
91
+
92
+ let(:response) {
93
+ subject.summoner.runes summoner_id
94
+ }
95
+
96
+ it 'should return a list of rune pages containing lists of talents' do
97
+ response.pages.count.should be > 0
98
+ response.pages.first.slots.count.should be > 0
99
+ end
100
+ end
101
+
62
102
  end
63
103
 
64
104
  describe '#stats' do
@@ -66,26 +106,131 @@ describe RiotApi::API, :vcr do
66
106
 
67
107
  # Ranked command requires user has played ranked
68
108
  describe '#ranked' do
109
+
110
+ describe 'omitting season' do
111
+ let(:response) {
112
+ subject.stats.ranked summoner_id
113
+ }
114
+
115
+ it 'should return ranked information from the summoner id' do
116
+ response.summonerId.should eql(19531813)
117
+ response.champions.first.first.should eql ["id", 111]
118
+ end
119
+ end
120
+
121
+ describe 'specifying season' do
122
+ let(:response) {
123
+ subject.stats.ranked summoner_id, :season => "SEASON3"
124
+ }
125
+
126
+ it 'should return ranked information from the summoner id for the specified season' do
127
+ response.summonerId.should eql(19531813)
128
+ response.champions.first.first.should eql ["id", 111]
129
+ end
130
+ end
131
+ end
132
+
133
+ describe '#summary' do
134
+
135
+ describe 'omitting season' do
136
+ let(:response) {
137
+ subject.stats.summary summoner_id
138
+ }
139
+
140
+ it 'should return summary information from the summoner id' do
141
+ response.summonerId.should eql(19531813)
142
+ response.playerStatSummaries.first.should include 'aggregated_stats'
143
+ end
144
+ end
145
+
146
+ describe 'specifying season' do
147
+ let(:response) {
148
+ subject.stats.summary summoner_id, :season => "SEASON3"
149
+ }
150
+
151
+ it 'should return summary information from the summoner id for the specified season' do
152
+ response.summonerId.should eql(19531813)
153
+ response.playerStatSummaries.first.should include 'aggregated_stats'
154
+ end
155
+ end
156
+ end
157
+
158
+ end
159
+
160
+ describe '#champions' do
161
+ let(:current_champion_count) { 116 }
162
+
163
+ describe '#list' do
69
164
  let(:response) {
70
- subject.stats.ranked summoner_id
165
+ subject.champions.list
71
166
  }
72
167
 
73
- it 'should return ranked information from the summoner name' do
74
- response.summonerId.should eql(19531813)
75
- response.champions.first.first.should eql ["id", 111]
168
+ it 'should return a list of all champions' do
169
+ response.count.should be >= current_champion_count
170
+ response.first.respond_to?(:name).should be_true
76
171
  end
77
172
  end
78
173
 
79
- describe '#summary' do
174
+ describe '#free' do
80
175
  let(:response) {
81
- subject.stats.summary summoner_id
176
+ subject.champions.free
82
177
  }
83
178
 
84
- it 'should return summary information from the summoner id' do
85
- response.summonerId.should eql(19531813)
86
- response.playerStatSummaries.first.should include 'aggregated_stats'
179
+ it 'should return a list of all free champions' do
180
+ response.count.should be < current_champion_count
181
+ response.count.should be > 0
182
+ response.first.respond_to?(:name).should be_true
183
+ response.first.free_to_play.should be_true
87
184
  end
88
185
  end
89
186
 
90
187
  end
188
+
189
+ describe '#game' do
190
+ let(:summoner_id) { '19531813' }
191
+
192
+ # Ranked command requires user has played ranked
193
+ describe '#recent' do
194
+ let(:response) {
195
+ subject.game.recent summoner_id
196
+ }
197
+
198
+ it 'should return a list of recent games played' do
199
+ response.count.should > 0
200
+ response.first.respond_to?(:champion_id).should be_true
201
+ end
202
+ end
203
+ end
204
+
205
+ describe '#league', :vcr do
206
+ let(:summoner_id) { '19531813' }
207
+
208
+ describe '#by_summoner' do
209
+ let(:response) {
210
+ subject.league.by_summoner summoner_id
211
+ }
212
+
213
+ it 'should return leagues data for summoner' do
214
+ response["entries"].count.should > 0
215
+ response.tier.should == 'CHALLENGER'
216
+ end
217
+ end
218
+ end
219
+
220
+
221
+ describe '#team', :vcr do
222
+ let(:summoner_id) { '19531813' }
223
+
224
+ describe '#by_summoner' do
225
+ let(:response) {
226
+ subject.team.by_summoner summoner_id
227
+ }
228
+
229
+ it 'should return team data for summoner' do
230
+ response.count.should > 0
231
+ response.first.first.should == ["timestamp", 1387051307170]
232
+ end
233
+ end
234
+ end
235
+
91
236
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe RiotApi::Model::Summoner do
4
+
5
+ describe '#initialize' do
6
+ let(:data) { { id: 44600324, name: "Best Lux EUW", profile_icon_id: 7, summoner_level: 6, revision_date: 1375116256000, revision_date_str: "07/29/2013 04:44 PM UTC" } }
7
+ let(:summoner) { RiotApi::Model::Summoner.new data }
8
+
9
+ it "should create a valid object" do
10
+ summoner.id.should == data[:id]
11
+ summoner.revision_date.should == data[:revision_date]
12
+ end
13
+ end
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,11 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'simplecov'
2
3
  require 'coveralls'
4
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
+ SimpleCov.start do
6
+ add_filter 'support/vcr'
7
+ end
8
+
3
9
  Coveralls.wear!
4
10
 
5
11
  require 'rspec/autorun'
data/spec/support/vcr.rb CHANGED
@@ -12,7 +12,7 @@ VCR.configure do |c|
12
12
 
13
13
  c.filter_sensitive_data('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') do |http_interaction|
14
14
  #Not sure if this needs removing, but better safe than sorry...
15
- if http_interaction.response.headers['x-newrelic-app-data'].first != nil
15
+ if http_interaction.response.headers['x-newrelic-app-data'] != nil
16
16
  http_interaction.response.headers['x-newrelic-app-data'].first
17
17
  end
18
18
  end
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/euw/v1.1/champion?api_key=api_key_YYYYYYYYYYYYYYYYYYYYY&freeToPlay=true
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - riot_api rubygem v0.0.1
12
+ response:
13
+ status:
14
+ code: 200
15
+ message:
16
+ headers:
17
+ access-control-allow-headers:
18
+ - Content-Type
19
+ access-control-allow-methods:
20
+ - GET, POST, DELETE, PUT
21
+ access-control-allow-origin:
22
+ - ! '*'
23
+ content-type:
24
+ - application/json;charset=UTF-8
25
+ date:
26
+ - Wed, 11 Dec 2013 15:44:19 GMT
27
+ server:
28
+ - Jetty(9.1.0.v20131115)
29
+ x-newrelic-app-data:
30
+ - XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
31
+ content-length:
32
+ - '1890'
33
+ connection:
34
+ - Close
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! '{"champions":[{"id":31,"name":"Chogath","active":true,"attackRank":3,"defenseRank":7,"magicRank":7,"difficultyRank":7,"botEnabled":true,"freeToPlay":true,"botMmEnabled":true,"rankedPlayEnabled":true},{"id":104,"name":"Graves","active":true,"attackRank":8,"defenseRank":5,"magicRank":3,"difficultyRank":4,"botEnabled":true,"freeToPlay":true,"botMmEnabled":true,"rankedPlayEnabled":true},{"id":74,"name":"Heimerdinger","active":true,"attackRank":2,"defenseRank":6,"magicRank":8,"difficultyRank":4,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true},{"id":39,"name":"Irelia","active":true,"attackRank":7,"defenseRank":4,"magicRank":5,"difficultyRank":5,"botEnabled":false,"freeToPlay":true,"botMmEnabled":true,"rankedPlayEnabled":true},{"id":43,"name":"Karma","active":true,"attackRank":1,"defenseRank":7,"magicRank":8,"difficultyRank":8,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true},{"id":117,"name":"Lulu","active":true,"attackRank":4,"defenseRank":5,"magicRank":7,"difficultyRank":7,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true},{"id":11,"name":"MasterYi","active":true,"attackRank":10,"defenseRank":4,"magicRank":2,"difficultyRank":2,"botEnabled":true,"freeToPlay":true,"botMmEnabled":true,"rankedPlayEnabled":true},{"id":133,"name":"Quinn","active":true,"attackRank":9,"defenseRank":4,"magicRank":2,"difficultyRank":7,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true},{"id":35,"name":"Shaco","active":true,"attackRank":8,"defenseRank":4,"magicRank":6,"difficultyRank":9,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true},{"id":4,"name":"TwistedFate","active":true,"attackRank":6,"defenseRank":2,"magicRank":6,"difficultyRank":9,"botEnabled":false,"freeToPlay":true,"botMmEnabled":false,"rankedPlayEnabled":true}]}'
38
+ http_version:
39
+ recorded_at: Wed, 11 Dec 2013 15:44:19 GMT
40
+ recorded_with: VCR 2.8.0