giant_bomb 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
data/giant_bomb.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{giant_bomb}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jon Maddox"]
12
- s.date = %q{2009-10-21}
12
+ s.date = %q{2009-10-27}
13
13
  s.description = %q{Simple library to talkto the awesome GiantBomb data}
14
14
  s.email = %q{jon@fanzter.com}
15
15
  s.extra_rdoc_files = [
@@ -25,9 +25,15 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "giant_bomb.gemspec",
27
27
  "lib/giant_bomb.rb",
28
+ "lib/giant_bomb/attributes.rb",
29
+ "lib/giant_bomb/core_extensions.rb",
30
+ "lib/giant_bomb/developer.rb",
28
31
  "lib/giant_bomb/game.rb",
32
+ "lib/giant_bomb/genre.rb",
29
33
  "lib/giant_bomb/httparty_icebox.rb",
34
+ "lib/giant_bomb/publisher.rb",
30
35
  "lib/giant_bomb/search.rb",
36
+ "test/fixtures/get_info.json",
31
37
  "test/fixtures/search.json",
32
38
  "test/fixtures/sketchy_results.json",
33
39
  "test/giant_bomb_test.rb",
@@ -0,0 +1,52 @@
1
+ module GiantBomb
2
+ module Attributes
3
+ # based on http://github.com/nullstyle/ruby-satisfaction
4
+
5
+ def self.included(base)
6
+ base.class_eval do
7
+ extend ClassMethods
8
+ include InstanceMethods
9
+ attr_reader :attributes
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ def attributes(*names)
15
+ options = names.extract_options!
16
+
17
+ names.each do |name|
18
+ attribute name, options unless name.blank?
19
+ end
20
+ end
21
+
22
+ def attribute(name, options)
23
+ options.replace({:type => 'nil', :lazy=>false}.merge(options))
24
+ raise "Name can't be empty" if name.blank?
25
+ lazy_load = "self.#{options[:lazy]} unless self.loaded?" if options[:lazy]
26
+ class_eval <<-EOS
27
+ def #{name}
28
+ #{lazy_load}
29
+ @#{name} ||= decode_raw_attribute(@attributes['#{name}'], #{options[:type]}) if @attributes
30
+ end
31
+ EOS
32
+ end
33
+
34
+ end
35
+
36
+ module InstanceMethods
37
+ def attributes=(value)
38
+ @attributes = value
39
+ end
40
+
41
+ def loaded?
42
+ @loaded
43
+ end
44
+
45
+ private
46
+ def decode_raw_attribute(value, type)
47
+ return nil unless value
48
+ type.respond_to?(:parse) ? type.parse(value) : value
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,18 @@
1
+ class Array
2
+ def extract_options!
3
+ last.is_a?(::Hash) ? pop : {}
4
+ end
5
+
6
+ end
7
+
8
+ class Float
9
+ def self.parse(val)
10
+ Float(val)
11
+ end
12
+ end
13
+
14
+ class Integer
15
+ def self.parse(val)
16
+ Integer(val)
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module GiantBomb
2
+ class Developer
3
+ include Attributes
4
+ attributes :name, :id
5
+
6
+ def initialize(values)
7
+ self.attributes = values
8
+ end
9
+
10
+ def self.parse(data)
11
+ return unless data
12
+ if data.is_a?(Array)
13
+ data.collect do |g|
14
+ Developer.new(g)
15
+ end
16
+ else
17
+ [Developer.new(data)]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,26 +1,34 @@
1
1
  module GiantBomb
2
2
  class Game
3
- attr_accessor :id, :name, :deck, :description, :date_last_updated, :original_release_date, :site_detail_url,
4
- :number_of_user_reviews, :date_added, :original_game_rating, :image
3
+ include Attributes
4
+ attr_reader :client
5
5
 
6
- def initialize(options={})
7
- @image = {}
6
+ attributes :id, :name, :deck, :description, :original_game_rating, :image
8
7
 
9
- @id = options["id"]
10
- @name = options["name"]
11
- @deck = options["deck"]
12
- @description = options["description"]
13
- @site_detail_url = options["site_detail_url"]
14
- @number_of_user_reviews = options["number_of_user_reviews"]
15
- @original_game_rating = options["original_game_rating"]
8
+ attributes :number_of_user_reviews, :type => Integer
9
+ attributes :date_last_updated, :original_release_date, :date_added, :type => Date
16
10
 
17
- @date_last_updated = DateTime.parse(options["date_last_updated"]) if options["date_last_updated"]
18
- @original_release_date = DateTime.parse(options["original_release_date"]) if options["original_release_date"]
19
- @date_added = DateTime.parse(options["date_added"]) if options["date_added"]
11
+ attributes :genres, :lazy => :get_info!, :type => Genre
12
+ attributes :publishers, :lazy => :get_info!, :type => Publisher
13
+ attributes :developers, :lazy => :get_info!, :type => Developer
20
14
 
21
- options["image"].each{|key,value| @image[key.gsub('_url', '').to_sym] = value } if options["image"]
15
+ attributes :images, :lazy => :get_info!
16
+
17
+ alias_method :cover, :image
18
+
19
+ def initialize(values, client)
20
+ @client = client
21
+ self.attributes = values
22
+ end
23
+
24
+ def get_info!
25
+ game = client.get_game_info(self.id)
26
+ @attributes.merge!(game.attributes) if game
27
+ @loaded = true
22
28
  end
23
29
 
30
+
31
+
24
32
  end
25
33
 
26
34
  end
@@ -0,0 +1,21 @@
1
+ module GiantBomb
2
+ class Genre
3
+ include Attributes
4
+ attributes :name, :id
5
+
6
+ def initialize(values)
7
+ self.attributes = values
8
+ end
9
+
10
+ def self.parse(data)
11
+ return unless data
12
+ if data.is_a?(Array)
13
+ data.collect do |g|
14
+ Genre.new(g)
15
+ end
16
+ else
17
+ [Genre.new(data)]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module GiantBomb
2
+ class Publisher
3
+ include Attributes
4
+ attributes :name, :id
5
+
6
+ def initialize(values)
7
+ self.attributes = values
8
+ end
9
+
10
+ def self.parse(data)
11
+ return unless data
12
+ if data.is_a?(Array)
13
+ data.collect do |g|
14
+ Publisher.new(g)
15
+ end
16
+ else
17
+ [Publisher.new(data)]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -2,8 +2,8 @@ module GiantBomb
2
2
  class Search
3
3
  include HTTParty
4
4
  format :json
5
- include HTTParty::Icebox
6
- cache :store => 'file', :timeout => 120, :location => Dir.tmpdir
5
+ # include HTTParty::Icebox
6
+ # cache :store => 'file', :timeout => 120, :location => Dir.tmpdir
7
7
 
8
8
  base_uri 'api.giantbomb.com'
9
9
 
@@ -21,7 +21,15 @@ module GiantBomb
21
21
  options = {"query" => keywords, "resources" => "game"}
22
22
  options.merge!(default_query_options)
23
23
  response = self.class.get("/search", :query => options)
24
- response["results"].collect{|r| Game.new(r)}
24
+ response["results"].collect{|r| Game.new(r, self)}
25
+ end
26
+
27
+ def get_game_info(game_id)
28
+ field_list = %w{developers genres images publishers}
29
+ options = {"field_list" => field_list.join(',')}
30
+ options.merge!(default_query_options)
31
+ response = self.class.get("/game/#{game_id}/", :query => options)
32
+ Game.new(response["results"], self)
25
33
  end
26
34
 
27
35
  end
data/lib/giant_bomb.rb CHANGED
@@ -2,5 +2,10 @@ require 'httparty'
2
2
 
3
3
  directory = File.expand_path(File.dirname(__FILE__))
4
4
  require File.join(directory, 'giant_bomb', 'httparty_icebox')
5
+ require File.join(directory, 'giant_bomb', 'core_extensions')
6
+ require File.join(directory, 'giant_bomb', 'attributes')
5
7
  require File.join(directory, 'giant_bomb', 'search')
8
+ require File.join(directory, 'giant_bomb', 'genre')
9
+ require File.join(directory, 'giant_bomb', 'developer')
10
+ require File.join(directory, 'giant_bomb', 'publisher')
6
11
  require File.join(directory, 'giant_bomb', 'game')
@@ -0,0 +1,117 @@
1
+ {
2
+ "number_of_page_results": 1,
3
+ "status_code": 1,
4
+ "error": "OK",
5
+ "results": {
6
+ "images": [{
7
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141522-odst_campaign_onialphasite_screen.jpg",
8
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141522-odst_campaign_onialphasite_small.jpg",
9
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141522-odst_campaign_onialphasite_thumb.jpg",
10
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141522-odst_campaign_onialphasite_tiny.jpg",
11
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141522-odst_campaign_onialphasite_super.jpg"
12
+ },
13
+ {
14
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141521-odst_campaign_kizingo04_screen.jpg",
15
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141521-odst_campaign_kizingo04_small.jpg",
16
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141521-odst_campaign_kizingo04_thumb.jpg",
17
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141521-odst_campaign_kizingo04_tiny.jpg",
18
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141521-odst_campaign_kizingo04_super.jpg"
19
+ },
20
+ {
21
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141520-odst_campaign_kizingo03_screen.jpg",
22
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141520-odst_campaign_kizingo03_small.jpg",
23
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141520-odst_campaign_kizingo03_thumb.jpg",
24
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141520-odst_campaign_kizingo03_tiny.jpg",
25
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141520-odst_campaign_kizingo03_super.jpg"
26
+ },
27
+ {
28
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141518-odst_campaign_kizingo02_screen.jpg",
29
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141518-odst_campaign_kizingo02_small.jpg",
30
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141518-odst_campaign_kizingo02_thumb.jpg",
31
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141518-odst_campaign_kizingo02_tiny.jpg",
32
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141518-odst_campaign_kizingo02_super.jpg"
33
+ },
34
+ {
35
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141517-odst_campaign_kizingo01_screen.jpg",
36
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141517-odst_campaign_kizingo01_small.jpg",
37
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141517-odst_campaign_kizingo01_thumb.jpg",
38
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141517-odst_campaign_kizingo01_tiny.jpg",
39
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141517-odst_campaign_kizingo01_super.jpg"
40
+ },
41
+ {
42
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141516-odst_campaign_kikowani03_screen.jpg",
43
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141516-odst_campaign_kikowani03_small.jpg",
44
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141516-odst_campaign_kikowani03_thumb.jpg",
45
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141516-odst_campaign_kikowani03_tiny.jpg",
46
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141516-odst_campaign_kikowani03_super.jpg"
47
+ },
48
+ {
49
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141515-odst_campaign_kikowani02_screen.jpg",
50
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141515-odst_campaign_kikowani02_small.jpg",
51
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141515-odst_campaign_kikowani02_thumb.jpg",
52
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141515-odst_campaign_kikowani02_tiny.jpg",
53
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141515-odst_campaign_kikowani02_super.jpg"
54
+ },
55
+ {
56
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141514-odst_campaign_kikowani01_screen.jpg",
57
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141514-odst_campaign_kikowani01_small.jpg",
58
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141514-odst_campaign_kikowani01_thumb.jpg",
59
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141514-odst_campaign_kikowani01_tiny.jpg",
60
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141514-odst_campaign_kikowani01_super.jpg"
61
+ },
62
+ {
63
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141511-odst_firefight_lostplatoon08_screen.jpg",
64
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141511-odst_firefight_lostplatoon08_small.jpg",
65
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141511-odst_firefight_lostplatoon08_thumb.jpg",
66
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141511-odst_firefight_lostplatoon08_tiny.jpg",
67
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141511-odst_firefight_lostplatoon08_super.jpg"
68
+ },
69
+ {
70
+ "screen_url": "http://media.giantbomb.com/uploads/0/26/1141504-odst_firefight_lostplatoon06_screen.jpg",
71
+ "small_url": "http://media.giantbomb.com/uploads/0/26/1141504-odst_firefight_lostplatoon06_small.jpg",
72
+ "thumb_url": "http://media.giantbomb.com/uploads/0/26/1141504-odst_firefight_lostplatoon06_thumb.jpg",
73
+ "tiny_url": "http://media.giantbomb.com/uploads/0/26/1141504-odst_firefight_lostplatoon06_tiny.jpg",
74
+ "super_url": "http://media.giantbomb.com/uploads/0/26/1141504-odst_firefight_lostplatoon06_super.jpg"
75
+ }],
76
+ "publishers": [{
77
+ "api_detail_url": "http://api.giantbomb.com/company/6753/",
78
+ "id": 6753,
79
+ "name": "343 Industries"
80
+ },
81
+ {
82
+ "api_detail_url": "http://api.giantbomb.com/company/340/",
83
+ "id": 340,
84
+ "name": "Microsoft Game Studios"
85
+ }],
86
+ "genres": [{
87
+ "api_detail_url": "http://api.giantbomb.com/genre/11/",
88
+ "id": 11,
89
+ "name": "Shooter"
90
+ },
91
+ {
92
+ "api_detail_url": "http://api.giantbomb.com/genre/1/",
93
+ "id": 1,
94
+ "name": "Action"
95
+ },
96
+ {
97
+ "api_detail_url": "http://api.giantbomb.com/genre/32/",
98
+ "id": 32,
99
+ "name": "First-Person Shooter"
100
+ }],
101
+ "developers": [{
102
+ "api_detail_url": "http://api.giantbomb.com/company/476/",
103
+ "id": 476,
104
+ "name": "Bungie Studios"
105
+ }],
106
+ "image": {
107
+ "screen_url": "http://media.giantbomb.com/uploads/1/14735/1101733-20090611232449_halo_3_odst_box_art_screen.png",
108
+ "small_url": "http://media.giantbomb.com/uploads/1/14735/1101733-20090611232449_halo_3_odst_box_art_small.png",
109
+ "thumb_url": "http://media.giantbomb.com/uploads/1/14735/1101733-20090611232449_halo_3_odst_box_art_thumb.png",
110
+ "tiny_url": "http://media.giantbomb.com/uploads/1/14735/1101733-20090611232449_halo_3_odst_box_art_tiny.png",
111
+ "super_url": "http://media.giantbomb.com/uploads/1/14735/1101733-20090611232449_halo_3_odst_box_art_super.png"
112
+ }
113
+ },
114
+ "limit": 1,
115
+ "offset": 0,
116
+ "number_of_total_results": 1
117
+ }
@@ -6,104 +6,131 @@ class GiantBombTest < Test::Unit::TestCase
6
6
  setup do
7
7
  @gb = GiantBomb::Search.new("key")
8
8
  end
9
-
9
+
10
10
  context 'searching' do
11
11
  context 'for a game' do
12
12
  setup do
13
- stub_get('/search/?api_key=key&query=halo&resources=game&format=json', 'search.json')
13
+ stub_get('/search?format=json&api_key=key&resources=game&query=halo', 'search.json')
14
14
  @results = @gb.find_game('halo')
15
15
  end
16
16
 
17
17
  should "return an array" do
18
18
  assert_equal Array, @results.class
19
19
  end
20
-
20
+
21
21
  should "return an array of Games" do
22
22
  assert_equal GiantBomb::Game, @results.first.class
23
23
  end
24
24
  end
25
25
  end
26
-
26
+
27
27
  context 'Games' do
28
28
  context 'with good data' do
29
29
  setup do
30
- stub_get('/search/?api_key=key&query=halo&resources=game&format=json', 'search.json')
30
+ stub_get('/search?format=json&api_key=key&resources=game&query=halo', 'search.json')
31
+ stub_get('/game/24035/?format=json&api_key=key&field_list=developers%2Cgenres%2Cimages%2Cpublishers', 'get_info.json')
32
+
31
33
  @game = @gb.find_game('halo').first
32
34
  end
33
-
35
+
34
36
  should "have a name" do
35
37
  assert_equal 'Halo 3: ODST', @game.name
36
38
  end
37
-
39
+
38
40
  should "have a deck" do
39
41
  assert_not_nil @game.deck
40
42
  end
41
-
43
+
42
44
  should "have a description" do
43
45
  assert_not_nil @game.deck
44
46
  end
45
-
47
+
46
48
  should "have parsed date_last_updated to be a real date" do
47
- assert_equal DateTime, @game.date_last_updated.class
49
+ assert_equal Date, @game.date_last_updated.class
48
50
  end
49
-
51
+
50
52
  should "have parsed original_release_date to be a real date" do
51
- assert_equal DateTime, @game.original_release_date.class
53
+ assert_equal Date, @game.original_release_date.class
52
54
  end
53
-
55
+
54
56
  should "have parsed date_added to be a real date" do
55
- assert_equal DateTime, @game.date_added.class
57
+ assert_equal Date, @game.date_added.class
56
58
  end
57
-
59
+
58
60
  context 'with an image' do
61
+
62
+ should 'cover should be an alias to image' do
63
+ assert_equal @game.image, @game.cover
64
+ end
59
65
 
60
66
  should 'have an image hash' do
61
67
  assert_equal Hash, @game.image.class
62
68
  end
63
-
69
+
64
70
  should 'have multiple sizes for the image' do
65
71
  assert_equal 5, @game.image.keys.size
66
72
  end
67
-
73
+
68
74
  should 'have these sizes with symbols for keys' do
69
- assert_not_nil @game.image[:super]
70
- assert_not_nil @game.image[:small]
71
- assert_not_nil @game.image[:thumb]
72
- assert_not_nil @game.image[:tiny]
73
- assert_not_nil @game.image[:screen]
75
+ assert_not_nil @game.image["super_url"]
76
+ assert_not_nil @game.image["small_url"]
77
+ assert_not_nil @game.image["thumb_url"]
78
+ assert_not_nil @game.image["tiny_url"]
79
+ assert_not_nil @game.image["screen_url"]
80
+ end
81
+ end
82
+
83
+ context 'lazy loaded attrs' do
84
+
85
+ should 'have a genres array' do
86
+ assert_equal Array, @game.genres.class
87
+ end
88
+
89
+ should 'have a developers array' do
90
+ assert_equal Array, @game.developers.class
91
+ end
92
+
93
+ should 'have a publishers array' do
94
+ assert_equal Array, @game.publishers.class
95
+ end
96
+
97
+ should 'have an images array' do
98
+ assert_equal Array, @game.images.class
74
99
  end
75
100
 
101
+ should 'have an images array of hashes' do
102
+ assert_equal Hash, @game.images.first.class
103
+ end
104
+
76
105
  end
106
+
77
107
  end
78
108
 
79
109
 
80
110
  context 'with sketchy data' do
81
111
  setup do
82
- stub_get('/search/?api_key=key&query=halo2&resources=game&format=json', 'sketchy_results.json')
112
+ stub_get('/search?format=json&api_key=key&resources=game&query=halo2', 'sketchy_results.json')
83
113
  @game = @gb.find_game('halo2').first
84
- puts @game.name
85
114
  end
86
115
 
87
116
  should 'handle not having date_added' do
88
117
  assert_nil @game.date_added
89
118
  end
90
-
119
+
91
120
  should 'handle not having original_release_date' do
92
121
  assert_nil @game.original_release_date
93
122
  end
94
-
123
+
95
124
  should 'handle not having date_last_updated' do
96
125
  assert_nil @game.date_last_updated
97
126
  end
98
-
127
+
99
128
  should 'handle not having image urls' do
100
- assert_equal Hash, @game.image.class
101
- assert_equal 0, @game.image.keys.size
129
+ assert_nil @game.image
102
130
  end
103
-
104
131
  end
105
-
106
-
132
+
133
+
107
134
  end
108
135
 
109
136
  end
data/test/test_helper.rb CHANGED
@@ -8,6 +8,8 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
8
  $LOAD_PATH.unshift(File.dirname(__FILE__))
9
9
  require 'giant_bomb'
10
10
 
11
+ # FakeWeb.allow_net_connect = false
12
+
11
13
  class Test::Unit::TestCase
12
14
  end
13
15
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: giant_bomb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Maddox
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-21 00:00:00 -04:00
12
+ date: 2009-10-27 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -60,9 +60,15 @@ files:
60
60
  - VERSION
61
61
  - giant_bomb.gemspec
62
62
  - lib/giant_bomb.rb
63
+ - lib/giant_bomb/attributes.rb
64
+ - lib/giant_bomb/core_extensions.rb
65
+ - lib/giant_bomb/developer.rb
63
66
  - lib/giant_bomb/game.rb
67
+ - lib/giant_bomb/genre.rb
64
68
  - lib/giant_bomb/httparty_icebox.rb
69
+ - lib/giant_bomb/publisher.rb
65
70
  - lib/giant_bomb/search.rb
71
+ - test/fixtures/get_info.json
66
72
  - test/fixtures/search.json
67
73
  - test/fixtures/sketchy_results.json
68
74
  - test/giant_bomb_test.rb