vigor 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,3 +5,4 @@ require 'vigor/mastery_page'
5
5
  require 'vigor/talent'
6
6
  require 'vigor/rune_page'
7
7
  require 'vigor/rune'
8
+ require 'vigor/error'
@@ -17,5 +17,14 @@ module Vigor
17
17
  return Summoner.new(self.class.get("/summoner/" + lookup_value.to_s))
18
18
  end
19
19
  end
20
+
21
+ private
22
+
23
+ def self.get(path)
24
+ response = super
25
+ raise Vigor::Error.from_status(response.code), response.message unless response.code == 200
26
+ return response
27
+ end
28
+
20
29
  end
21
30
  end
@@ -0,0 +1,34 @@
1
+ module Vigor
2
+ module Error
3
+
4
+ def self.from_status(status)
5
+ case status
6
+ when 400
7
+ BadRequest
8
+ when 401
9
+ Unauthorized
10
+ when 404
11
+ SummonerNotFound
12
+ when 500
13
+ InternalServerError
14
+ else
15
+ ApiError
16
+ end
17
+ end
18
+
19
+ class ApiError < StandardError; end
20
+
21
+ # 400 response - invalid API endpoint. Should never be raised if gem build is stable,
22
+ class BadRequest < ApiError; end
23
+
24
+ # 401 response - when API_KEY is missing or invalid,
25
+ class Unauthorized < ApiError; end
26
+
27
+ # 404 response - no summoner found,
28
+ class SummonerNotFound < ApiError; end
29
+
30
+ # 500 response - when Riot's API is down.
31
+ class InternalServerError < ApiError; end
32
+
33
+ end
34
+ end
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/31640240?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
+ - Sat, 14 Dec 2013 00:40:19 GMT
25
+ Server:
26
+ - Jetty(9.1.0.v20131115)
27
+ X-Newrelic-App-Data:
28
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XSEMRDA9YX1IULVVLE0ohJjYZQBRSFggYAh1VCVIDUwpSXAcbTFdPGgcIBQNVAVQGBFMEDgNTBFpAbQ==
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: US-ASCII
35
+ string: ! '{"id":31640240,"name":"IS11f9c710874850c9b7b3c","profileIconId":9,"summonerLevel":1,"revisionDate":1371607602000,"revisionDateStr":"06/19/2013
36
+ 02:06 AM UTC"}'
37
+ http_version:
38
+ recorded_at: Sat, 14 Dec 2013 00:40:03 GMT
39
+ - request:
40
+ method: get
41
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/0?api_key=<API_KEY>
42
+ body:
43
+ encoding: US-ASCII
44
+ string: ''
45
+ headers: {}
46
+ response:
47
+ status:
48
+ code: 404
49
+ message: Not Found
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
+ Cache-Control:
58
+ - must-revalidate,no-cache,no-store
59
+ Content-Type:
60
+ - text/html; charset=UTF-8
61
+ Date:
62
+ - Sat, 14 Dec 2013 01:11:39 GMT
63
+ Server:
64
+ - Jetty(9.1.0.v20131115)
65
+ X-Newrelic-App-Data:
66
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XSEMRDA9YX1IULVVLE0ohJjYZQBRSFggYAh1VDlMJVQNWVhoaUEpBD1YFXVFWUgBVUQdQAVZWAkE/
67
+ Transfer-Encoding:
68
+ - chunked
69
+ Connection:
70
+ - keep-alive
71
+ body:
72
+ encoding: US-ASCII
73
+ string: ! "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;
74
+ charset=ISO-8859-1\"/>\n<title>Error 404 Not Found</title>\n</head>\n<body><h2>HTTP
75
+ ERROR 404</h2>\n<p>Problem accessing /api/lol/na/v1.1/summoner/0. Reason:\n<pre>
76
+ \ Not Found</pre></p><br/> \n<br/>
77
+ \ \n<br/> \n<br/>
78
+ \ \n<br/> \n<br/>
79
+ \ \n<br/> \n<br/>
80
+ \ \n<br/> \n<br/>
81
+ \ \n<br/> \n<br/>
82
+ \ \n<br/> \n<br/>
83
+ \ \n<br/> \n<br/>
84
+ \ \n<br/> \n<br/>
85
+ \ \n<br/> \n<br/>
86
+ \ \n\n</body>\n</html>\n"
87
+ http_version:
88
+ recorded_at: Sat, 14 Dec 2013 01:11:23 GMT
89
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,53 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/invalid1234?api_key=<API_KEY>
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 404
13
+ message: Not Found
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
+ Cache-Control:
22
+ - must-revalidate,no-cache,no-store
23
+ Content-Type:
24
+ - text/html; charset=UTF-8
25
+ Date:
26
+ - Sat, 14 Dec 2013 00:38:22 GMT
27
+ Server:
28
+ - Jetty(9.1.0.v20131115)
29
+ X-Newrelic-App-Data:
30
+ - PxQFWFFSDwQTVVdUBAgAVkYdFGQHBDcQUQxLA1tMXV1dORYzVBJHNQFUZAQUFVFQVThOA0dYa0kIXlpvTR0RB1cLVwxFZBtEAksIPR4SRg8JWVkEFD8XUUlJDwNaVGtJH19XXgcbQ0p3J2xLGhQEHANJCU8BVApQVgMCU1BPFQIcRgRXAQhRUVRTU1EGV1ABCQMaPw==
31
+ Content-Length:
32
+ - '1362'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! "<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;
38
+ charset=ISO-8859-1\"/>\n<title>Error 404 Not Found</title>\n</head>\n<body><h2>HTTP
39
+ ERROR 404</h2>\n<p>Problem accessing /api/lol/na/v1.1/summoner/by-name/invalid1234.
40
+ Reason:\n<pre> Not Found</pre></p><br/> \n<br/>
41
+ \ \n<br/> \n<br/>
42
+ \ \n<br/> \n<br/>
43
+ \ \n<br/> \n<br/>
44
+ \ \n<br/> \n<br/>
45
+ \ \n<br/> \n<br/>
46
+ \ \n<br/> \n<br/>
47
+ \ \n<br/> \n<br/>
48
+ \ \n<br/> \n<br/>
49
+ \ \n<br/> \n<br/>
50
+ \ \n\n</body>\n</html>\n"
51
+ http_version:
52
+ recorded_at: Sat, 14 Dec 2013 00:38:06 GMT
53
+ recorded_with: VCR 2.8.0
@@ -0,0 +1,53 @@
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=bad_key
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 401
13
+ message: Unauthorized
14
+ headers:
15
+ Content-Type:
16
+ - application/json;charset=UTF-8
17
+ Server:
18
+ - Jetty(9.1.0.v20131115)
19
+ Content-Length:
20
+ - '60'
21
+ Connection:
22
+ - keep-alive
23
+ body:
24
+ encoding: US-ASCII
25
+ string: ! '{"status": {"message": "Access denied", "status_code": 401}}'
26
+ http_version:
27
+ recorded_at: Sat, 14 Dec 2013 00:36:15 GMT
28
+ - request:
29
+ method: get
30
+ uri: http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/semiel?api_key=bad_key
31
+ body:
32
+ encoding: US-ASCII
33
+ string: ''
34
+ headers: {}
35
+ response:
36
+ status:
37
+ code: 401
38
+ message: Unauthorized
39
+ headers:
40
+ Content-Type:
41
+ - application/json;charset=UTF-8
42
+ Server:
43
+ - Jetty(9.1.0.v20131115)
44
+ Content-Length:
45
+ - '60'
46
+ Connection:
47
+ - keep-alive
48
+ body:
49
+ encoding: US-ASCII
50
+ string: ! '{"status": {"message": "Access denied", "status_code": 401}}'
51
+ http_version:
52
+ recorded_at: Sat, 14 Dec 2013 01:13:19 GMT
53
+ recorded_with: VCR 2.8.0
@@ -32,4 +32,27 @@ describe Vigor::Client, :vcr do
32
32
  summoner.name.should == "Best Riven NA"
33
33
  summoner.level.should == 30
34
34
  end
35
+
36
+ it "raises an exception when using a bad key" do
37
+ vigor = Vigor::Client.new("bad_key")
38
+ lambda { vigor.summoner("semiel") }.should raise_error(Vigor::Error::Unauthorized)
39
+ end
40
+
41
+ it "raises an exception when no summoner name exists" do
42
+ vigor = Vigor::Client.new(ENV["API_KEY"])
43
+ lambda { vigor.summoner("invalid1234") }.should raise_error(Vigor::Error::SummonerNotFound)
44
+ end
45
+
46
+ it "raises an exception when no summoner id exists" do
47
+ vigor = Vigor::Client.new(ENV["API_KEY"])
48
+ lambda { vigor.summoner(0)}.should raise_error(Vigor::Error::SummonerNotFound)
49
+ end
50
+
51
+ it "raises an exception when the API is down" do
52
+ stub_request(:get, "http://prod.api.pvp.net/api/lol/na/v1.1/summoner/by-name/semiel?api_key=#{ENV["API_KEY"]}").
53
+ to_return(:status => 500, :body => "", :headers => {})
54
+ vigor = Vigor::Client.new(ENV["API_KEY"])
55
+ lambda { vigor.summoner("semiel") }.should raise_error(Vigor::Error::InternalServerError)
56
+ end
57
+
35
58
  end
@@ -1,5 +1,6 @@
1
1
  require 'vigor'
2
2
  require 'vcr'
3
+ require 'webmock/rspec'
3
4
 
4
5
  VCR.configure do |c|
5
6
  c.cassette_library_dir = 'spec/cassettes'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vigor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -85,6 +85,7 @@ files:
85
85
  - lib/vigor/client.rb
86
86
  - lib/vigor/summoner.rb
87
87
  - lib/vigor/rune_page.rb
88
+ - lib/vigor/error.rb
88
89
  - lib/vigor/page.rb
89
90
  - lib/vigor/talent.rb
90
91
  - lib/vigor/mastery_page.rb
@@ -95,7 +96,10 @@ files:
95
96
  - spec/cassettes/Vigor_Client/works_on_servers_other_than_NA.yml
96
97
  - spec/cassettes/Vigor_Client/can_find_a_summoner_by_name.yml
97
98
  - spec/cassettes/Vigor_Client/can_find_a_summoner_by_id.yml
99
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_no_summoner_id_exists.yml
100
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_no_summoner_name_exists.yml
98
101
  - spec/cassettes/Vigor_Client/can_find_summoners_whose_names_have_whitespace.yml
102
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_using_a_bad_key.yml
99
103
  - spec/cassettes/Vigor_Summoner/can_fetch_runes.yml
100
104
  - spec/cassettes/Vigor_Summoner/can_fetch_masteries.yml
101
105
  - spec/client_spec.rb
@@ -130,7 +134,10 @@ test_files:
130
134
  - spec/cassettes/Vigor_Client/works_on_servers_other_than_NA.yml
131
135
  - spec/cassettes/Vigor_Client/can_find_a_summoner_by_name.yml
132
136
  - spec/cassettes/Vigor_Client/can_find_a_summoner_by_id.yml
137
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_no_summoner_id_exists.yml
138
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_no_summoner_name_exists.yml
133
139
  - spec/cassettes/Vigor_Client/can_find_summoners_whose_names_have_whitespace.yml
140
+ - spec/cassettes/Vigor_Client/raises_an_exception_when_using_a_bad_key.yml
134
141
  - spec/cassettes/Vigor_Summoner/can_fetch_runes.yml
135
142
  - spec/cassettes/Vigor_Summoner/can_fetch_masteries.yml
136
143
  - spec/client_spec.rb