games_radar_api 1.0.0

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 (42) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +46 -0
  5. data/Rakefile +9 -0
  6. data/games_radar_api.gemspec +28 -0
  7. data/lib/faraday/raise_http_exception.rb +51 -0
  8. data/lib/games_radar_api.rb +26 -0
  9. data/lib/games_radar_api/api.rb +22 -0
  10. data/lib/games_radar_api/client.rb +18 -0
  11. data/lib/games_radar_api/client/cheats.rb +18 -0
  12. data/lib/games_radar_api/client/developers.rb +9 -0
  13. data/lib/games_radar_api/client/franchises.rb +9 -0
  14. data/lib/games_radar_api/client/games.rb +25 -0
  15. data/lib/games_radar_api/client/genres.rb +9 -0
  16. data/lib/games_radar_api/client/guides.rb +18 -0
  17. data/lib/games_radar_api/client/news.rb +57 -0
  18. data/lib/games_radar_api/client/platforms.rb +9 -0
  19. data/lib/games_radar_api/client/publishers.rb +9 -0
  20. data/lib/games_radar_api/client/screenshots.rb +20 -0
  21. data/lib/games_radar_api/client/videos.rb +18 -0
  22. data/lib/games_radar_api/configuration.rb +51 -0
  23. data/lib/games_radar_api/connection.rb +32 -0
  24. data/lib/games_radar_api/error.rb +19 -0
  25. data/lib/games_radar_api/request.rb +42 -0
  26. data/lib/games_radar_api/version.rb +3 -0
  27. data/spec/lib/games_radar_api/client/cheats_spec.rb +33 -0
  28. data/spec/lib/games_radar_api/client/developers_spec.rb +22 -0
  29. data/spec/lib/games_radar_api/client/franchises_spec.rb +22 -0
  30. data/spec/lib/games_radar_api/client/games_spec.rb +52 -0
  31. data/spec/lib/games_radar_api/client/genres_spec.rb +21 -0
  32. data/spec/lib/games_radar_api/client/guides_spec.rb +31 -0
  33. data/spec/lib/games_radar_api/client/news_spec.rb +77 -0
  34. data/spec/lib/games_radar_api/client/platforms_spec.rb +22 -0
  35. data/spec/lib/games_radar_api/client/publishers_spec.rb +22 -0
  36. data/spec/lib/games_radar_api/client/screenshots_spec.rb +29 -0
  37. data/spec/lib/games_radar_api/client/videos_spec.rb +24 -0
  38. data/spec/lib/games_radar_api/client_spec.rb +59 -0
  39. data/spec/lib/games_radar_api/configuration_spec.rb +26 -0
  40. data/spec/lib/games_radar_api/games_radar_api_spec.rb +7 -0
  41. data/spec/spec_helper.rb +15 -0
  42. metadata +204 -0
@@ -0,0 +1,18 @@
1
+ module GamesRadarApi
2
+ class Client
3
+ module Videos
4
+ def videos(options={:region=>'us',:platform=>'all',:genre=>'all',:game_name=>'',:page_num=>1,:page_size=>10,:sort=>'newest'})
5
+ response = get('/videos',options)
6
+ self.total_rows = response.videos.total_rows.to_i
7
+ response.videos.video
8
+ end
9
+
10
+ def game_videos(id,options={:region=>'us',:page_num=>1,:page_size=>10})
11
+ response = get("/game/videos/#{id}",options)
12
+ self.total_rows = response.videos.total_rows.to_i
13
+ response.videos.video
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,51 @@
1
+ require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ module GamesRadarApi
5
+ module Configuration
6
+ VALID_CONNECTION_KEYS = [:adapter,:endpoint,:user_agent,:method,:proxy].freeze
7
+ VALID_OPTIONS_KEYS = [:api_key,:format].freeze
8
+ VALID_CONFIG_KEYS = VALID_CONNECTION_KEYS + VALID_OPTIONS_KEYS
9
+
10
+ DEFAULT_ADAPTER = Faraday.default_adapter.freeze
11
+ DEFAULT_ENDPOINT = 'http://api.gamesradar.com'.freeze
12
+ DEFAULT_METHOD = 'get'.freeze
13
+ DEFAULT_USER_AGENT = "Games Radar API Gem #{GamesRadarApi::VERSION}".freeze
14
+
15
+ DEFAULT_API_KEY = nil
16
+ DEFAULT_FORMAT = :xml
17
+ DEFAULT_PROXY = nil
18
+
19
+ # Build accessor methods for every config options so we can do this, for example:
20
+ # GamesRadarApi.format = :xml
21
+ attr_accessor *VALID_CONFIG_KEYS
22
+
23
+ # Make sure we have the default values set when we get 'extended'
24
+ def self.extended(base)
25
+ base.reset
26
+ end
27
+
28
+ # Convenience method to allow configuration options to be set in a block
29
+ def configure
30
+ yield self
31
+ end
32
+
33
+ # Create a has of options and their values
34
+ def options
35
+ Hash[* VALID_CONFIG_KEYS.map { |key| [key,send(key)] }.flatten ]
36
+ end
37
+
38
+ # Reset all configuration options to defaults
39
+ def reset
40
+ self.adapter = DEFAULT_ADAPTER
41
+ self.endpoint = DEFAULT_ENDPOINT
42
+ self.method = DEFAULT_METHOD
43
+ self.user_agent = DEFAULT_USER_AGENT
44
+
45
+ self.api_key = DEFAULT_API_KEY
46
+ self.format = DEFAULT_FORMAT
47
+ self.proxy = DEFAULT_PROXY
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,32 @@
1
+ require 'faraday_middleware'
2
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
3
+
4
+ module GamesRadarApi
5
+ # @private
6
+ module Connection
7
+ private
8
+
9
+ def connection(raw=false)
10
+ options = {
11
+ :headers => {'Accept' => "application/#{format}; charset=utf-8", 'User-Agent' => user_agent},
12
+ :proxy => proxy,
13
+ :ssl => {:verify => false},
14
+ :url => endpoint,
15
+ }
16
+
17
+ Faraday::Connection.new(options) do |connection|
18
+ #connection.use FaradayMiddleware::OAuth2, client_id, access_token
19
+ connection.use Faraday::Request::UrlEncoded
20
+ connection.use FaradayMiddleware::Mashify unless raw
21
+ unless raw
22
+ case format.to_s.downcase
23
+ when 'json' then connection.use Faraday::Response::ParseJson
24
+ when 'xml' then connection.use Faraday::Response::ParseXml
25
+ end
26
+ end
27
+ connection.use FaradayMiddleware::RaiseHttpException
28
+ connection.adapter(adapter)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module GamesRadarApi
2
+ # Custom error class for rescuing from all Instagram errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Instagram returns the HTTP status code 400
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Instagram returns the HTTP status code 404
9
+ class NotFound < Error; end
10
+
11
+ # Raised when Instagram returns the HTTP status code 500
12
+ class InternalServerError < Error; end
13
+
14
+ # Raised when Instagram returns the HTTP status code 503
15
+ class ServiceUnavailable < Error; end
16
+
17
+ # Raised when a subscription payload hash is invalid
18
+ class InvalidSignature < Error; end
19
+ end
@@ -0,0 +1,42 @@
1
+ module GamesRadarApi
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, options={}, raw=false, unformatted=false)
6
+ request(:get, path, options, raw, unformatted)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, options={}, raw=false, unformatted=false)
11
+ request(:post, path, options, raw, unformatted)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, options={}, raw=false, unformatted=false)
16
+ request(:put, path, options, raw, unformatted)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, options={}, raw=false, unformatted=false)
21
+ request(:delete, path, options, raw, unformatted)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, options, raw=false, unformatted=false)
28
+ options = options.merge(:api_key=>api_key)
29
+ options.delete_if { |k, v| v.nil? or v.eql?'' }
30
+ response = connection(raw).send(method) do |request|
31
+ case method
32
+ when :get, :delete
33
+ request.url(path, options)
34
+ when :post, :put
35
+ request.path = path
36
+ request.body = options unless options.empty?
37
+ end
38
+ end
39
+ raw ? response : response.body
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ module GamesRadarApi
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,33 @@
1
+
2
+ require File.expand_path('../../../../spec_helper', __FILE__)
3
+
4
+ describe GamesRadarApi::Client::Cheats do
5
+
6
+ before do
7
+ @client = get_client
8
+ end
9
+
10
+ describe 'Cheats List' do
11
+ it 'should have at least one result' do
12
+ @client.cheats
13
+ @client.total_rows.must_be :>, 0
14
+ end
15
+
16
+ it 'should have a cheat url' do
17
+ response = @client.cheats
18
+ response.each do |c|
19
+ c.url.wont_be_nil
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ describe 'Game Cheats' do
26
+ it 'should fetch cheats for a specified game' do
27
+ @client.game_cheats(2008021217411530005)
28
+ @client.total_rows.must_be :>, 0
29
+ end
30
+ end
31
+
32
+
33
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ describe GamesRadarApi::Client::Developers do
4
+
5
+ before do
6
+ @client = get_client
7
+ end
8
+
9
+ describe 'Developers list' do
10
+ let(:response) { @client.developers }
11
+ it 'should have at least one result' do
12
+ response.size.must_be :>, 0
13
+ end
14
+
15
+ it 'should return valid developers' do
16
+ response.first.name.must_equal ' Eyebrow Interactive'
17
+ end
18
+ end
19
+
20
+
21
+
22
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ describe GamesRadarApi::Client::Franchises do
4
+
5
+ before do
6
+ @client = get_client
7
+ end
8
+
9
+ describe 'Franchises list' do
10
+ let(:response) { @client.franchises }
11
+ it 'should have at least one result' do
12
+ response.size.must_be :>, 0
13
+ end
14
+
15
+ it 'should return valid franchises' do
16
+ response.first.name.us.must_equal '.hack'
17
+ end
18
+ end
19
+
20
+
21
+
22
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ describe GamesRadarApi::Client::Games do
4
+
5
+ before do
6
+ @client = get_client
7
+ end
8
+
9
+ describe 'Game List' do
10
+ it 'should fetch 10 games by default' do
11
+ response = @client.games
12
+ response.size.must_equal 10
13
+ end
14
+
15
+ it 'should filter by platform' do
16
+ response = @client.games(:platform=>'ps3')
17
+ response.each do |g|
18
+ g.platform.name.must_equal 'PS3'
19
+ end
20
+ end
21
+ end
22
+
23
+ describe 'Game Detail' do
24
+ it 'should fetch the correct game' do
25
+ response = @client.game('16725')
26
+ response.name.uk.must_equal 'God of War Saga'
27
+ end
28
+
29
+ it 'should return nil for an invalid game' do
30
+ response = @client.game('34$')
31
+ response.must_be_nil
32
+ end
33
+
34
+ end
35
+
36
+ describe 'Game Search' do
37
+ it 'should fetch relevant games' do
38
+ response = @client.game_search('Darksiders','xbox360')
39
+ response.each do |g|
40
+ g.name.downcase.must_include 'darksiders'
41
+ end
42
+ end
43
+
44
+ it 'should return nil if no games are found' do
45
+ response = @client.game_search('Darksdiers','xbox360')
46
+ response.must_be_nil
47
+ end
48
+
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ describe GamesRadarApi::Client::Genres do
4
+
5
+ before do
6
+ @client = get_client
7
+ end
8
+
9
+ describe 'genres list' do
10
+ it 'should have at least one result' do
11
+ response = @client.genres
12
+ response.size.must_be :>, 0
13
+ end
14
+
15
+
16
+
17
+ end
18
+
19
+
20
+
21
+ end
@@ -0,0 +1,31 @@
1
+
2
+ require File.expand_path('../../../../spec_helper', __FILE__)
3
+
4
+ describe GamesRadarApi::Client::Guides do
5
+
6
+ before do
7
+ @client = get_client
8
+ end
9
+
10
+ describe 'Guides and Faqs List' do
11
+ it 'should have at least one result' do
12
+ @client.guides
13
+ @client.total_rows.must_be :>, 0
14
+ end
15
+
16
+ it 'should have a cheat url' do
17
+ response = @client.guides
18
+ response.each do |c|
19
+ c.url.wont_be_nil
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ describe 'Game Guides' do
26
+ it 'should fetch guides for a specified game' do
27
+ @client.game_guides(8783).size.must_be :>, 0
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path('../../../../spec_helper', __FILE__)
2
+
3
+ describe GamesRadarApi::Client::News do
4
+
5
+ before do
6
+ @client = get_client
7
+ end
8
+
9
+ describe 'News list' do
10
+ it 'should have at least one result' do
11
+ @client.news
12
+ @client.total_rows.must_be :>, 0
13
+ end
14
+ end
15
+
16
+ describe 'Features List' do
17
+
18
+ it 'should fetch 10 features by default' do
19
+ @client.features.size.must_equal 10
20
+ end
21
+
22
+ it 'should allow filtering by game name' do
23
+ response = @client.features(:game_name=>'d')
24
+ response.each do |f|
25
+ f.game.name.downcase[0].must_equal 'd'
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ describe 'Previews List' do
32
+
33
+ it 'should fetch some previews by default' do
34
+ @client.previews.size.must_be :>, 0
35
+ end
36
+
37
+ end
38
+
39
+ describe 'Reviews List' do
40
+
41
+ it 'should fetch some reviews by default' do
42
+ @client.reviews.size.must_be :>, 0
43
+ end
44
+
45
+
46
+ end
47
+
48
+ describe 'Game News' do
49
+ it 'should fetch news for a specified game' do
50
+ @client.game_news(8783)
51
+ @client.total_rows.must_be :>, 0
52
+ end
53
+ end
54
+
55
+ describe 'Game Reviews' do
56
+ it 'should fetch reviews for a specified game' do
57
+ @client.game_reviews(8783)
58
+ @client.total_rows.must_be :>, 0
59
+ end
60
+ end
61
+
62
+ describe 'Game Previews' do
63
+ it 'should fetch previews for a specified game' do
64
+ @client.game_previews(8783)
65
+ @client.total_rows.must_be :>, 0
66
+ end
67
+ end
68
+
69
+ describe 'Game Features' do
70
+ it 'should fetch features for a specified game' do
71
+ @client.game_features(8783)
72
+ @client.total_rows.must_be :>, 0
73
+ end
74
+ end
75
+
76
+
77
+ end