giant_bomb_api 0.5.1
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 +7 -0
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/.rubocop.yml +6 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +81 -0
- data/LICENSE +22 -0
- data/README.md +155 -0
- data/Rakefile +7 -0
- data/circle.yml +6 -0
- data/giant_bomb_api.gemspec +31 -0
- data/lib/giant_bomb_api.rb +38 -0
- data/lib/giant_bomb_api/client.rb +54 -0
- data/lib/giant_bomb_api/collection_resource.rb +40 -0
- data/lib/giant_bomb_api/exception.rb +5 -0
- data/lib/giant_bomb_api/exception/api_error.rb +14 -0
- data/lib/giant_bomb_api/request.rb +10 -0
- data/lib/giant_bomb_api/request/collection.rb +36 -0
- data/lib/giant_bomb_api/request/detail.rb +9 -0
- data/lib/giant_bomb_api/request/search.rb +18 -0
- data/lib/giant_bomb_api/resource.rb +34 -0
- data/lib/giant_bomb_api/resource/accessory.rb +10 -0
- data/lib/giant_bomb_api/resource/character.rb +24 -0
- data/lib/giant_bomb_api/resource/chat.rb +11 -0
- data/lib/giant_bomb_api/resource/company.rb +32 -0
- data/lib/giant_bomb_api/resource/concept.rb +21 -0
- data/lib/giant_bomb_api/resource/factory.rb +36 -0
- data/lib/giant_bomb_api/resource/franchise.rb +17 -0
- data/lib/giant_bomb_api/resource/game.rb +40 -0
- data/lib/giant_bomb_api/resource/game_rating.rb +8 -0
- data/lib/giant_bomb_api/resource/genre.rb +10 -0
- data/lib/giant_bomb_api/resource/image.rb +12 -0
- data/lib/giant_bomb_api/resource/location.rb +12 -0
- data/lib/giant_bomb_api/resource/object.rb +20 -0
- data/lib/giant_bomb_api/resource/person.rb +24 -0
- data/lib/giant_bomb_api/resource/platform.rb +16 -0
- data/lib/giant_bomb_api/resource/promo.rb +11 -0
- data/lib/giant_bomb_api/resource/rating_board.rb +11 -0
- data/lib/giant_bomb_api/resource/region.rb +11 -0
- data/lib/giant_bomb_api/resource/release.rb +24 -0
- data/lib/giant_bomb_api/resource/review.rb +15 -0
- data/lib/giant_bomb_api/resource/theme.rb +7 -0
- data/lib/giant_bomb_api/resource/user_review.rb +11 -0
- data/lib/giant_bomb_api/resource/video.rb +17 -0
- data/lib/giant_bomb_api/resource/video_type.rb +8 -0
- data/lib/giant_bomb_api/resource_value_setter.rb +29 -0
- data/lib/giant_bomb_api/response.rb +17 -0
- data/spec/fixtures/detail-response.json +740 -0
- data/spec/fixtures/search-response.json +59 -0
- data/spec/lib/collection_resource_spec.rb +76 -0
- data/spec/lib/giant_bomb_api_spec.rb +56 -0
- data/spec/lib/request/collection_spec.rb +32 -0
- data/spec/lib/request/search_spec.rb +38 -0
- data/spec/lib/resource/factory_spec.rb +35 -0
- data/spec/lib/resource/game_spec.rb +28 -0
- data/spec/lib/resource_spec.rb +37 -0
- data/spec/lib/response_spec.rb +102 -0
- data/spec/spec_helper.rb +15 -0
- metadata +241 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Request::Collection < GiantBombApi::Request
|
3
|
+
|
4
|
+
def initialize(resource, filter: {}, sort: {}, limit: 100, offset: 0)
|
5
|
+
@resource = resource
|
6
|
+
@filter = filter
|
7
|
+
@sort = sort
|
8
|
+
|
9
|
+
params = {}
|
10
|
+
params[:filter] = filter_params if filter_params.present?
|
11
|
+
params[:sort] = sort_params if sort_params.present?
|
12
|
+
params[:limit] = limit if limit.present?
|
13
|
+
params[:offset] = offset if offset.present?
|
14
|
+
|
15
|
+
super end_point, params
|
16
|
+
end
|
17
|
+
|
18
|
+
def filter_params
|
19
|
+
params_join @filter
|
20
|
+
end
|
21
|
+
|
22
|
+
def sort_params
|
23
|
+
params_join @sort
|
24
|
+
end
|
25
|
+
|
26
|
+
def end_point
|
27
|
+
@resource.collection_resource_name
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def params_join(params)
|
33
|
+
params.map { |key,value| "#{key}:#{value}" }.join(",")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Request::Search < GiantBombApi::Request
|
3
|
+
|
4
|
+
def initialize(query, resources: [GiantBombApi::Resource::Game], limit: 100, page: 1)
|
5
|
+
params = {
|
6
|
+
query: query,
|
7
|
+
resources: resources.map { |res| res.resource_name }.join(','),
|
8
|
+
limit: limit,
|
9
|
+
page: page
|
10
|
+
}
|
11
|
+
super end_point, params
|
12
|
+
end
|
13
|
+
|
14
|
+
def end_point
|
15
|
+
'/search'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
module Resource
|
3
|
+
|
4
|
+
def self.extended(base)
|
5
|
+
base.instance_variable_set("@resource_attributes", {})
|
6
|
+
base.include ResourceValueSetter
|
7
|
+
|
8
|
+
base.class_eval do
|
9
|
+
resource_attribute :id, :api_detail_url, :date_added, :date_last_updated
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def resource_name(resource_name = nil)
|
14
|
+
if resource_name.present?
|
15
|
+
self.instance_variable_set("@resource_name", resource_name)
|
16
|
+
end
|
17
|
+
self.instance_variable_get("@resource_name") || self.name.split('::').last.underscore
|
18
|
+
end
|
19
|
+
|
20
|
+
def find(id, params = {})
|
21
|
+
GiantBombApi.client.send_request(Request::Detail.new(resource_name, id, params))
|
22
|
+
end
|
23
|
+
|
24
|
+
def resource_attribute(*attributes, resource_name: nil)
|
25
|
+
attributes.each do |attribute_name|
|
26
|
+
instance_variable_get("@resource_attributes")[attribute_name] = resource_name
|
27
|
+
|
28
|
+
class_eval do
|
29
|
+
attr_accessor attribute_name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Character
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :birthday
|
6
|
+
resource_attribute :concepts
|
7
|
+
resource_attribute :deck
|
8
|
+
resource_attribute :description
|
9
|
+
resource_attribute :enemies
|
10
|
+
resource_attribute :first_appeared_in_game, resource_name: :game
|
11
|
+
resource_attribute :franchises
|
12
|
+
resource_attribute :friends
|
13
|
+
resource_attribute :games
|
14
|
+
resource_attribute :gender
|
15
|
+
resource_attribute :image
|
16
|
+
resource_attribute :last_name
|
17
|
+
resource_attribute :locations
|
18
|
+
resource_attribute :name
|
19
|
+
resource_attribute :objects
|
20
|
+
resource_attribute :people
|
21
|
+
resource_attribute :real_name
|
22
|
+
resource_attribute :site_detail_url
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Company
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :abbreviation
|
5
|
+
resource_attribute :aliases
|
6
|
+
resource_attribute :characters
|
7
|
+
resource_attribute :concepts
|
8
|
+
resource_attribute :date_last_updated
|
9
|
+
resource_attribute :deck
|
10
|
+
resource_attribute :description
|
11
|
+
resource_attribute :developed_games, resource_name: :game
|
12
|
+
resource_attribute :developer_releases, resource_name: :release
|
13
|
+
resource_attribute :distributor_releases, resource_name: :release
|
14
|
+
resource_attribute :image
|
15
|
+
resource_attribute :location_address
|
16
|
+
resource_attribute :location_city
|
17
|
+
resource_attribute :location_country
|
18
|
+
resource_attribute :location_address
|
19
|
+
resource_attribute :location_city
|
20
|
+
resource_attribute :location_country
|
21
|
+
resource_attribute :location_state
|
22
|
+
resource_attribute :locations
|
23
|
+
resource_attribute :name
|
24
|
+
resource_attribute :objects
|
25
|
+
resource_attribute :people
|
26
|
+
resource_attribute :phone
|
27
|
+
resource_attribute :published_games, resource_name: :game
|
28
|
+
resource_attribute :publisher_releases, resource_name: :release
|
29
|
+
resource_attribute :site_detail_url
|
30
|
+
resource_attribute :website
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Concept
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :characters
|
6
|
+
resource_attribute :concepts
|
7
|
+
resource_attribute :deck
|
8
|
+
resource_attribute :description
|
9
|
+
resource_attribute :first_appeared_in_franchise
|
10
|
+
resource_attribute :first_appeared_in_game, resource_name: :game
|
11
|
+
resource_attribute :franchises
|
12
|
+
resource_attribute :games
|
13
|
+
resource_attribute :image
|
14
|
+
resource_attribute :locations
|
15
|
+
resource_attribute :name
|
16
|
+
resource_attribute :objects
|
17
|
+
resource_attribute :people
|
18
|
+
resource_attribute :related_concepts, resource_name: :concept
|
19
|
+
resource_attribute :site_detail_url
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Factory
|
3
|
+
|
4
|
+
def self.init_resource_from(json, attribute_name: nil, resource_name: nil)
|
5
|
+
resource_name ||= discover_resource_name(json["api_detail_url"])
|
6
|
+
resource_name ||= attribute_name if resource_exists?(attribute_name)
|
7
|
+
resource_name ||= attribute_name.to_s.singularize if resource_exists?(attribute_name.to_s.singularize)
|
8
|
+
return if resource_name.nil?
|
9
|
+
|
10
|
+
init_object(resource_name, json)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.init_object(resource_name, json)
|
14
|
+
if resource_exists? resource_name
|
15
|
+
constant_for(resource_name).constantize.new(json)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.discover_resource_name(string)
|
20
|
+
return unless string
|
21
|
+
match_data = string.match("/api/(?<resource_name>[a-z_]*)/")
|
22
|
+
return if match_data.nil?
|
23
|
+
return match_data["resource_name"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.resource_exists?(resource_name)
|
27
|
+
return false unless resource_name.present?
|
28
|
+
Object.const_defined? constant_for(resource_name)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.constant_for(resource_name)
|
32
|
+
"GiantBombApi::Resource::#{resource_name.to_s.classify}"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Franchise
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :characters
|
6
|
+
resource_attribute :concepts
|
7
|
+
resource_attribute :deck
|
8
|
+
resource_attribute :description
|
9
|
+
resource_attribute :games
|
10
|
+
resource_attribute :image
|
11
|
+
resource_attribute :locations
|
12
|
+
resource_attribute :name
|
13
|
+
resource_attribute :objects
|
14
|
+
resource_attribute :people
|
15
|
+
resource_attribute :site_detail_url
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Game
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :characters
|
6
|
+
resource_attribute :concepts
|
7
|
+
resource_attribute :deck
|
8
|
+
resource_attribute :description
|
9
|
+
resource_attribute :developers, resource_name: :company
|
10
|
+
resource_attribute :expected_release_day
|
11
|
+
resource_attribute :expected_release_month
|
12
|
+
resource_attribute :expected_release_quarter
|
13
|
+
resource_attribute :expected_release_year
|
14
|
+
resource_attribute :first_appearance_characters, resource_name: :character
|
15
|
+
resource_attribute :first_appearance_concepts, resource_name: :concept
|
16
|
+
resource_attribute :first_appearance_locations, resource_name: :location
|
17
|
+
resource_attribute :first_appearance_objects
|
18
|
+
resource_attribute :first_appearance_people
|
19
|
+
resource_attribute :franchises
|
20
|
+
resource_attribute :genres
|
21
|
+
resource_attribute :image
|
22
|
+
resource_attribute :images
|
23
|
+
resource_attribute :killed_characters, resource_name: :character
|
24
|
+
resource_attribute :locations
|
25
|
+
resource_attribute :name
|
26
|
+
resource_attribute :number_of_user_reviews
|
27
|
+
resource_attribute :objects
|
28
|
+
resource_attribute :original_game_rating
|
29
|
+
resource_attribute :original_release_date
|
30
|
+
resource_attribute :people
|
31
|
+
resource_attribute :platforms
|
32
|
+
resource_attribute :publishers, resource_name: :company
|
33
|
+
resource_attribute :releases
|
34
|
+
resource_attribute :reviews
|
35
|
+
resource_attribute :similar_games, resource_name: :game
|
36
|
+
resource_attribute :site_detail_url
|
37
|
+
resource_attribute :themes
|
38
|
+
resource_attribute :videos
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Image
|
3
|
+
extend GiantBombApi::Resource
|
4
|
+
resource_attribute :icon_url
|
5
|
+
resource_attribute :medium_url
|
6
|
+
resource_attribute :screen_url
|
7
|
+
resource_attribute :small_url
|
8
|
+
resource_attribute :super_url
|
9
|
+
resource_attribute :thumb_url
|
10
|
+
resource_attribute :tiny_url
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Location
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :deck
|
6
|
+
resource_attribute :description
|
7
|
+
resource_attribute :first_appeared_in_game, resource_name: :game
|
8
|
+
resource_attribute :image
|
9
|
+
resource_attribute :name
|
10
|
+
resource_attribute :site_detail_url
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Object
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :characters
|
6
|
+
resource_attribute :companies
|
7
|
+
resource_attribute :concepts
|
8
|
+
resource_attribute :deck
|
9
|
+
resource_attribute :description
|
10
|
+
resource_attribute :first_appeared_in_game, resource_name: :game
|
11
|
+
resource_attribute :franchises
|
12
|
+
resource_attribute :games
|
13
|
+
resource_attribute :image
|
14
|
+
resource_attribute :locations
|
15
|
+
resource_attribute :name
|
16
|
+
resource_attribute :objects
|
17
|
+
resource_attribute :people
|
18
|
+
resource_attribute :site_detail_url
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module GiantBombApi
|
2
|
+
class Resource::Person
|
3
|
+
extend GiantBombApi::CollectionResource
|
4
|
+
resource_attribute :aliases
|
5
|
+
resource_attribute :birth_date
|
6
|
+
resource_attribute :characters
|
7
|
+
resource_attribute :concepts
|
8
|
+
resource_attribute :country
|
9
|
+
resource_attribute :death_date
|
10
|
+
resource_attribute :deck
|
11
|
+
resource_attribute :description
|
12
|
+
resource_attribute :first_credited_game, resource_name: :game
|
13
|
+
resource_attribute :franchises
|
14
|
+
resource_attribute :games
|
15
|
+
resource_attribute :gender
|
16
|
+
resource_attribute :hometown
|
17
|
+
resource_attribute :image
|
18
|
+
resource_attribute :locations
|
19
|
+
resource_attribute :name
|
20
|
+
resource_attribute :objects
|
21
|
+
resource_attribute :people
|
22
|
+
resource_attribute :site_detail_url
|
23
|
+
end
|
24
|
+
end
|