vigor 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/vigor.rb CHANGED
@@ -1,109 +1,7 @@
1
- require 'httparty'
2
-
3
- module Vigor
4
- class Client
5
- include HTTParty
6
- # debug_output $stderr
7
-
8
- def initialize(api_key, region = "na")
9
- self.class.default_params :api_key => api_key
10
- self.class.base_uri "http://prod.api.pvp.net/api/lol/#{region}/v1.1"
11
- end
12
-
13
- def summoner(lookup_value)
14
- if lookup_value.is_a? String
15
- return Summoner.new(self.class.get("/summoner/by-name/" + lookup_value.gsub(/\s+/, "")))
16
- else
17
- return Summoner.new(self.class.get("/summoner/" + lookup_value.to_s))
18
- end
19
- end
20
- end
21
-
22
- class Summoner
23
- attr_accessor :id, :name, :profile_icon_id, :level, :revision_date
24
-
25
- def initialize(data)
26
- @id = data["id"]
27
- @name = data["name"]
28
- @profile_icon_id = data["profileIconId"]
29
- @level = data["summonerLevel"]
30
- @revision_date = DateTime.strptime(data["revisionDate"].to_s,'%s')
31
- end
32
-
33
- def mastery_pages
34
- @mastery_pages ||= Client.get("/summoner/" + @id.to_s + "/masteries")["pages"].map {|page| MasteryPage.new(page)}
35
- end
36
-
37
- def rune_pages
38
- @rune_pages ||= Client.get("/summoner/" + @id.to_s + "/runes")["pages"].map {|page| RunePage.new(page)}
39
- end
40
-
41
- def current_mastery_page
42
- mastery_pages.find {|page| page.current? }
43
- end
44
-
45
- def current_rune_page
46
- rune_pages.find {|page| page.current? }
47
- end
48
- end
49
-
50
- class Page
51
- attr_accessor :name
52
-
53
- def initialize(data)
54
- @name = data["name"]
55
- @current = data["current"]
56
- end
57
-
58
- def current?
59
- @current
60
- end
61
- end
62
-
63
- class MasteryPage < Page
64
- attr_accessor :talents
65
-
66
- def initialize(data)
67
- super
68
-
69
- return if data["talents"].nil?
70
- @talents = data["talents"].map {|talent| Talent.new(talent)}
71
- end
72
- end
73
-
74
- class Talent
75
- attr_accessor :id, :rank, :name
76
-
77
- def initialize(data)
78
- @id = data["id"]
79
- @rank = data["rank"]
80
- @name = data["name"]
81
- end
82
- end
83
-
84
- class RunePage < Page
85
- attr_accessor :runes, :id
86
-
87
- def initialize(data)
88
- super
89
- @id = data["id"]
90
-
91
- return if data["slots"].nil?
92
- @runes = data["slots"].map {|slot| Rune.new(slot)}
93
- end
94
- end
95
-
96
- class Rune
97
- attr_accessor :slot, :id, :description, :name, :tier
98
-
99
- def initialize(data)
100
- rune = data["rune"]
101
-
102
- @slot = data["runeSlotId"]
103
- @id = rune["id"]
104
- @description = rune["description"]
105
- @name = rune["name"]
106
- @tier = rune["tier"]
107
- end
108
- end
109
- end
1
+ require 'vigor/summoner'
2
+ require 'vigor/client'
3
+ require 'vigor/page'
4
+ require 'vigor/mastery_page'
5
+ require 'vigor/talent'
6
+ require 'vigor/rune_page'
7
+ require 'vigor/rune'
@@ -0,0 +1,21 @@
1
+ require 'httparty'
2
+
3
+ module Vigor
4
+ class Client
5
+ include HTTParty
6
+ # debug_output $stderr
7
+
8
+ def initialize(api_key, region = "na")
9
+ self.class.default_params :api_key => api_key
10
+ self.class.base_uri "http://prod.api.pvp.net/api/lol/#{region}/v1.1"
11
+ end
12
+
13
+ def summoner(lookup_value)
14
+ if lookup_value.is_a? String
15
+ return Summoner.new(self.class.get("/summoner/by-name/" + lookup_value.gsub(/\s+/, "")))
16
+ else
17
+ return Summoner.new(self.class.get("/summoner/" + lookup_value.to_s))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ module Vigor
2
+ class MasteryPage < Page
3
+ include Enumerable
4
+ attr_accessor :talents
5
+
6
+ def initialize(data)
7
+ super
8
+
9
+ return if data["talents"].nil?
10
+ @talents = data["talents"].map {|talent| Talent.new(talent)}
11
+ end
12
+
13
+ def each(&block)
14
+ @talents.each do |talent|
15
+ block.call(talent)
16
+ end
17
+ end
18
+ end
19
+ end
data/lib/vigor/page.rb ADDED
@@ -0,0 +1,14 @@
1
+ module Vigor
2
+ class Page
3
+ attr_accessor :name
4
+
5
+ def initialize(data)
6
+ @name = data["name"]
7
+ @current = data["current"]
8
+ end
9
+
10
+ def current?
11
+ @current
12
+ end
13
+ end
14
+ end
data/lib/vigor/rune.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Vigor
2
+ class Rune
3
+ attr_accessor :slot, :id, :description, :name, :tier
4
+
5
+ def initialize(data)
6
+ rune = data["rune"]
7
+
8
+ @slot = data["runeSlotId"]
9
+ @id = rune["id"]
10
+ @description = rune["description"]
11
+ @name = rune["name"]
12
+ @tier = rune["tier"]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Vigor
2
+ class RunePage < Page
3
+ include Enumerable
4
+ attr_accessor :runes, :id
5
+
6
+ def initialize(data)
7
+ super
8
+ @id = data["id"]
9
+
10
+ return if data["slots"].nil?
11
+ @runes = data["slots"].map {|slot| Rune.new(slot)}
12
+ end
13
+
14
+ def each(&block)
15
+ @runes.each do |rune|
16
+ block.call(rune)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ module Vigor
2
+ class Summoner
3
+ attr_accessor :id, :name, :profile_icon_id, :level, :revision_date
4
+
5
+ def initialize(data)
6
+ @id = data["id"]
7
+ @name = data["name"]
8
+ @profile_icon_id = data["profileIconId"]
9
+ @level = data["summonerLevel"]
10
+ @revision_date = DateTime.strptime(data["revisionDate"].to_s,'%s')
11
+ end
12
+
13
+ def mastery_pages
14
+ Client.get("/summoner/" + @id.to_s + "/masteries")["pages"].map {|page| MasteryPage.new(page)}
15
+ end
16
+
17
+ def rune_pages
18
+ Client.get("/summoner/" + @id.to_s + "/runes")["pages"].map {|page| RunePage.new(page)}
19
+ end
20
+
21
+ def current_mastery_page
22
+ mastery_pages.find {|page| page.current? }
23
+ end
24
+
25
+ def current_rune_page
26
+ rune_pages.find {|page| page.current? }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,11 @@
1
+ module Vigor
2
+ class Talent
3
+ attr_accessor :id, :rank, :name
4
+
5
+ def initialize(data)
6
+ @id = data["id"]
7
+ @rank = data["rank"]
8
+ @name = data["name"]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/23893133?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Access-Control-Allow-Headers:
16
+ - Content-Type
17
+ Access-Control-Allow-Methods:
18
+ - GET, POST, DELETE, PUT
19
+ Access-Control-Allow-Origin:
20
+ - ! '*'
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Date:
24
+ - Thu, 12 Dec 2013 10:36:46 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XSEMRDA9YX1IULVVLE0ohJjYZQBRSFggYAh1VCVAIWARWVwEbTFdPGldRAFJTUwJTXlVTB1BXVQZAbQ==
29
+ Content-Length:
30
+ - '143'
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":23893133,"name":"Semiel","profileIconId":518,"summonerLevel":30,"revisionDate":1386532311000,"revisionDateStr":"12/08/2013
36
+ 07:51 PM UTC"}'
37
+ http_version:
38
+ recorded_at: Thu, 12 Dec 2013 10:36:31 GMT
39
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/semiel?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Access-Control-Allow-Headers:
16
+ - Content-Type
17
+ Access-Control-Allow-Methods:
18
+ - GET, POST, DELETE, PUT
19
+ Access-Control-Allow-Origin:
20
+ - ! '*'
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Date:
24
+ - Thu, 12 Dec 2013 10:36:46 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XUUlJDwNaVGtJH19XXgcbQ0p3J2xLGhQEHANJCU8BUQJbVA4OUEpOCR8SVlcGA1VRVAcGBwtRXgcAUkBl
29
+ Content-Length:
30
+ - '143'
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":23893133,"name":"Semiel","profileIconId":518,"summonerLevel":30,"revisionDate":1386532311000,"revisionDateStr":"12/08/2013
36
+ 07:51 PM UTC"}'
37
+ http_version:
38
+ recorded_at: Thu, 12 Dec 2013 10:36:31 GMT
39
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/BestRivenNA?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Access-Control-Allow-Headers:
16
+ - Content-Type
17
+ Access-Control-Allow-Methods:
18
+ - GET, POST, DELETE, PUT
19
+ Access-Control-Allow-Origin:
20
+ - ! '*'
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Date:
24
+ - Thu, 12 Dec 2013 10:36:47 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XUUlJDwNaVGtJH19XXgcbQ0p3J2xLGhQEHANJCU8BUQBRVgQAVlJPFQIcRgIAAFJTAAJQAQdRBAZXAgEaPw==
29
+ Content-Length:
30
+ - '150'
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":32400810,"name":"Best Riven NA","profileIconId":508,"summonerLevel":30,"revisionDate":1386729379000,"revisionDateStr":"12/11/2013
36
+ 02:36 AM UTC"}'
37
+ http_version:
38
+ recorded_at: Thu, 12 Dec 2013 10:36:31 GMT
39
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/euw/v1.1/summoner/by-name/Froggen?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Access-Control-Allow-Headers:
16
+ - Content-Type
17
+ Access-Control-Allow-Methods:
18
+ - GET, POST, DELETE, PUT
19
+ Access-Control-Allow-Origin:
20
+ - ! '*'
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Date:
24
+ - Thu, 12 Dec 2013 10:36:46 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgPUkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XUUlJDwNaVGtJH19XXgcbQ0p3J2xLGhQEHANJCU8BUQBQVwAOWUpOCR8SUlNTAQVSVVUHDlFQVFoAVUBl
29
+ Content-Length:
30
+ - '144'
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":19531813,"name":"Froggen","profileIconId":562,"summonerLevel":30,"revisionDate":1386782571000,"revisionDateStr":"12/11/2013
36
+ 05:22 PM UTC"}'
37
+ http_version:
38
+ recorded_at: Thu, 12 Dec 2013 10:36:31 GMT
39
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,145 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/semiel?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Access-Control-Allow-Headers:
16
+ - Content-Type
17
+ Access-Control-Allow-Methods:
18
+ - GET, POST, DELETE, PUT
19
+ Access-Control-Allow-Origin:
20
+ - ! '*'
21
+ Content-Type:
22
+ - application/json;charset=UTF-8
23
+ Date:
24
+ - Thu, 12 Dec 2013 10:34:37 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XUUlJDwNaVGtJH19XXgcbQ0p3J2xLGhQEHANJCU8BUQBQUQICV0pOCR8SVlcGUVdUXwdXAQoEUFBXEj8=
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":23893133,"name":"Semiel","profileIconId":518,"summonerLevel":30,"revisionDate":1386532311000,"revisionDateStr":"12/08/2013
36
+ 07:51 PM UTC"}'
37
+ http_version:
38
+ recorded_at: Thu, 12 Dec 2013 10:34:21 GMT
39
+ - request:
40
+ method: get
41
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/23893133/masteries?api_key=<API_KEY>
42
+ body:
43
+ encoding: US-ASCII
44
+ string: ''
45
+ headers: {}
46
+ response:
47
+ status:
48
+ code: 200
49
+ message: OK
50
+ headers:
51
+ Access-Control-Allow-Headers:
52
+ - Content-Type
53
+ Access-Control-Allow-Methods:
54
+ - GET, POST, DELETE, PUT
55
+ Access-Control-Allow-Origin:
56
+ - ! '*'
57
+ Content-Type:
58
+ - application/json;charset=UTF-8
59
+ Date:
60
+ - Thu, 12 Dec 2013 10:34:37 GMT
61
+ Server:
62
+ - Jetty(9.1.0.v20131115)
63
+ X-Newrelic-App-Data:
64
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XSEMRDA9YX1IULVVLb00LAhFEB0oLXUsUGnQgbUgTTQNMVBoHT1ZVDAoAXFhbGxwGSkYABlBaA1FaB1cNUA5aAAMKR2Q=
65
+ Content-Length:
66
+ - '2757'
67
+ Connection:
68
+ - keep-alive
69
+ body:
70
+ encoding: US-ASCII
71
+ string: ! '{"summonerId":23893133,"pages":[{"name":"Mastery Page 4","current":false,"talents":[{"id":4233,"name":"Hardiness","rank":3},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
72
+ Weakness","rank":1},{"id":4213,"name":"Enchanted Armor","rank":2},{"id":4244,"name":"Evasive","rank":1},{"id":4234,"name":"Resistance","rank":3},{"id":4222,"name":"Veteran
73
+ Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4252,"name":"Tenacious","rank":4},{"id":4123,"name":"Mental
74
+ Force","rank":3},{"id":4262,"name":"Legendary Guardian","rank":1},{"id":4133,"name":"Arcane
75
+ Mastery","rank":1},{"id":4232,"name":"Juggernaut","rank":1}]},{"name":"Mastery
76
+ Page 1","current":false,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4242,"name":"Swiftness","rank":1},{"id":4213,"name":"Enchanted
77
+ Armor","rank":2},{"id":4211,"name":"Block","rank":1},{"id":4244,"name":"Evasive","rank":1},{"id":4333,"name":"Vampirism","rank":1},{"id":4234,"name":"Resistance","rank":3},{"id":4322,"name":"Summoner''s
78
+ Insight","rank":1},{"id":4323,"name":"Strength of Spirit","rank":1},{"id":4222,"name":"Veteran
79
+ Scars","rank":3},{"id":4252,"name":"Tenacious","rank":4},{"id":4262,"name":"Legendary
80
+ Guardian","rank":1},{"id":4312,"name":"Fleet of Foot","rank":3},{"id":4313,"name":"Meditation","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4233,"name":"Hardiness","rank":2}]},{"name":"Mastery
81
+ Page 2","current":false,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
82
+ Weakness","rank":1},{"id":4134,"name":"Executioner","rank":3},{"id":4154,"name":"Arcane
83
+ Blade","rank":1},{"id":4222,"name":"Veteran Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4144,"name":"Dangerous
84
+ Game","rank":1},{"id":4152,"name":"Devastating Strikes","rank":3},{"id":4123,"name":"Mental
85
+ Force","rank":3},{"id":4133,"name":"Arcane Mastery","rank":1},{"id":4143,"name":"Archmage","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4162,"name":"Havoc","rank":1}]},{"name":"AP","current":true,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
86
+ Weakness","rank":1},{"id":4134,"name":"Executioner","rank":3},{"id":4154,"name":"Arcane
87
+ Blade","rank":1},{"id":4222,"name":"Veteran Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4144,"name":"Dangerous
88
+ Game","rank":1},{"id":4152,"name":"Devastating Strikes","rank":3},{"id":4123,"name":"Mental
89
+ Force","rank":3},{"id":4133,"name":"Arcane Mastery","rank":1},{"id":4143,"name":"Archmage","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4162,"name":"Havoc","rank":1}]}]}'
90
+ http_version:
91
+ recorded_at: Thu, 12 Dec 2013 10:34:21 GMT
92
+ - request:
93
+ method: get
94
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/23893133/masteries?api_key=<API_KEY>
95
+ body:
96
+ encoding: US-ASCII
97
+ string: ''
98
+ headers: {}
99
+ response:
100
+ status:
101
+ code: 200
102
+ message: OK
103
+ headers:
104
+ Access-Control-Allow-Headers:
105
+ - Content-Type
106
+ Access-Control-Allow-Methods:
107
+ - GET, POST, DELETE, PUT
108
+ Access-Control-Allow-Origin:
109
+ - ! '*'
110
+ Content-Type:
111
+ - application/json;charset=UTF-8
112
+ Date:
113
+ - Fri, 13 Dec 2013 20:03:18 GMT
114
+ Server:
115
+ - Jetty(9.1.0.v20131115)
116
+ X-Newrelic-App-Data:
117
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XSEMRDA9YX1IULVVLb00LAhFEB0oLXUsUGnQgbUgTTQNMVBoHT1ZWDQoHUFRaAx0aV0gTBQZTVQJVU1UPAAsLAVRWR2Q=
118
+ Transfer-Encoding:
119
+ - chunked
120
+ Connection:
121
+ - keep-alive
122
+ body:
123
+ encoding: US-ASCII
124
+ string: ! '{"summonerId":23893133,"pages":[{"name":"Mastery Page 4","current":false,"talents":[{"id":4233,"name":"Hardiness","rank":3},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
125
+ Weakness","rank":1},{"id":4213,"name":"Enchanted Armor","rank":2},{"id":4244,"name":"Evasive","rank":1},{"id":4234,"name":"Resistance","rank":3},{"id":4222,"name":"Veteran''s
126
+ Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4252,"name":"Legendary
127
+ Guardian","rank":4},{"id":4123,"name":"Mental Force","rank":3},{"id":4262,"name":"Tenacious","rank":1},{"id":4133,"name":"Arcane
128
+ Mastery","rank":1},{"id":4232,"name":"Juggernaut","rank":1}]},{"name":"Mastery
129
+ Page 1","current":false,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4242,"name":"Swiftness","rank":1},{"id":4213,"name":"Enchanted
130
+ Armor","rank":2},{"id":4211,"name":"Block","rank":1},{"id":4244,"name":"Evasive","rank":1},{"id":4333,"name":"Vampirism","rank":1},{"id":4234,"name":"Resistance","rank":3},{"id":4322,"name":"Summoner''s
131
+ Insight","rank":1},{"id":4323,"name":"Strength of Spirit","rank":1},{"id":4222,"name":"Veteran''s
132
+ Scars","rank":3},{"id":4252,"name":"Legendary Guardian","rank":4},{"id":4262,"name":"Tenacious","rank":1},{"id":4312,"name":"Fleet
133
+ of Foot","rank":3},{"id":4313,"name":"Meditation","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4233,"name":"Hardiness","rank":2}]},{"name":"Mastery
134
+ Page 2","current":false,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
135
+ Weakness","rank":1},{"id":4134,"name":"Executioner","rank":3},{"id":4154,"name":"Arcane
136
+ Blade","rank":1},{"id":4222,"name":"Veteran''s Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4144,"name":"Dangerous
137
+ Game","rank":1},{"id":4152,"name":"Devastating Strikes","rank":3},{"id":4123,"name":"Mental
138
+ Force","rank":3},{"id":4133,"name":"Arcane Mastery","rank":1},{"id":4143,"name":"Archmage","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4162,"name":"Havoc","rank":1}]},{"name":"AP","current":true,"talents":[{"id":4212,"name":"Recovery","rank":2},{"id":4211,"name":"Block","rank":2},{"id":4121,"name":"Expose
139
+ Weakness","rank":1},{"id":4134,"name":"Executioner","rank":3},{"id":4154,"name":"Arcane
140
+ Blade","rank":1},{"id":4222,"name":"Veteran''s Scars","rank":3},{"id":4113,"name":"Sorcery","rank":4},{"id":4221,"name":"Unyielding","rank":1},{"id":4144,"name":"Dangerous
141
+ Game","rank":1},{"id":4152,"name":"Devastating Strikes","rank":3},{"id":4123,"name":"Mental
142
+ Force","rank":3},{"id":4133,"name":"Arcane Mastery","rank":1},{"id":4143,"name":"Archmage","rank":3},{"id":4232,"name":"Juggernaut","rank":1},{"id":4162,"name":"Havoc","rank":1}]}]}'
143
+ http_version:
144
+ recorded_at: Fri, 13 Dec 2013 20:03:19 GMT
145
+ recorded_with: VCR 2.8.0