comic_vine 0.0.8 → 0.1.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.
data/.gitignore CHANGED
@@ -15,3 +15,5 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ coverage
19
+ .DS_Store
data/comic_vine.gemspec CHANGED
@@ -17,4 +17,6 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency 'json'
19
19
  gem.add_development_dependency "rspec", ">= 2.0.0"
20
+ gem.add_development_dependency "webmock"
21
+ gem.add_development_dependency "simplecov"
20
22
  end
@@ -1,3 +1,3 @@
1
1
  module ComicVine
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/comic_vine.rb CHANGED
@@ -50,7 +50,7 @@ module ComicVine
50
50
  end
51
51
 
52
52
  def types
53
- if @@types.nil? || (@@last_type_check + (4 *60 *60)) > Time.now
53
+ if @@types.nil? || (@@last_type_check + (4 *60 *60)) < Time.now
54
54
  @@last_type_check = Time.now
55
55
  @@types = hit_api(build_base_url('types'))['results']
56
56
  end
@@ -1,11 +1,122 @@
1
1
  require 'spec_helper'
2
2
  describe ComicVine do
3
- it "should allow the user to set the API key" do
3
+ before(:all) do
4
4
  ComicVine::API.key = "some_api_key"
5
- ComicVine::API.key.should == "some_api_key"
6
5
  end
7
6
 
8
- it "should raise a ComicVine::CVError on an API call without the key set" do
9
- expect{ ComicVine::API.issues }.to raise_error(ComicVine::CVError)
7
+ specify { ComicVine::API.key.should == "some_api_key" }
8
+
9
+ context "when has invalid api key" do
10
+ it "should get a CVError" do
11
+ WebMock.allow_net_connect!
12
+ lambda { ComicVine::API.issues }.should raise_error(ComicVine::CVError)
13
+ WebMock.disable_net_connect!
14
+ end
15
+ end
16
+
17
+ context "when has valid api key" do
18
+ before { stub_request(:get, "http://api.comicvine.com/types/").with(:query => {:format => 'json', :api_key => ComicVine::API.key}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => TYPES_BODY, :headers => {}) }
19
+
20
+ describe "invalid method" do
21
+ it "should raise NoMethodError" do
22
+ lambda { ComicVine::API.something }.should raise_error(NoMethodError)
23
+ end
24
+ end
25
+
26
+ describe "types_detail" do
27
+ before { @types_detail = ComicVine::API.find_detail "issue" }
28
+ subject { @types_detail }
29
+
30
+ specify { @types_detail["list_resource_name"].should == "issues" }
31
+ specify { @types_detail["detail_resource_name"].should == "issue" }
32
+ end
33
+
34
+ describe "types_list" do
35
+ before { @types_list = ComicVine::API.find_list "issues" }
36
+ subject { @types_list }
37
+
38
+ specify { @types_list["list_resource_name"].should == "issues" }
39
+ specify { @types_list["detail_resource_name"].should == "issue" }
40
+ end
41
+
42
+ describe "ComicVine search" do
43
+ before do
44
+ stub_request(:get, "http://api.comicvine.com/search/").with(:query => {:format => 'json', :api_key => ComicVine::API.key, :limit => 1, :resources => "volume", :query => "gizmo"}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => SEARCH_BODY_1, :headers => {})
45
+ stub_request(:get, "http://api.comicvine.com/search/").with(:query => {:format => 'json', :api_key => ComicVine::API.key, :limit => 1, :offset => 0, :resources => "volume", :query => "gizmo"}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => SEARCH_BODY_1, :headers => {})
46
+ stub_request(:get, "http://api.comicvine.com/search/").with(:query => {:format => 'json', :api_key => ComicVine::API.key, :limit => 1, :offset => 1, :resources => "volume", :query => "gizmo"}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => SEARCH_BODY_2, :headers => {})
47
+ @results = ComicVine::API.search "volume", "gizmo", {:limit => 1}
48
+ end
49
+ subject { @results }
50
+
51
+ it { should be_a_kind_of ComicVine::CVSearchList }
52
+ it { should respond_to("total_count", "offset", "limit", "resource", "query")}
53
+ specify { @results.first.should be_a_kind_of ComicVine::CVSearchObject }
54
+ specify { @results.first.should == @results.last }
55
+ specify { @results.prev_page.should be_nil }
56
+
57
+ context "when on last page" do
58
+ before { @results.next_page }
59
+
60
+ specify { @results.should be_a_kind_of ComicVine::CVSearchList }
61
+ specify { @results.next_page.should be_nil }
62
+ it "should update the list on prev_page" do
63
+ @results.prev_page
64
+ @results.should be_a_kind_of ComicVine::CVSearchList
65
+ end
66
+ end
67
+
68
+ it "should fetch the full CVObject" do
69
+ stub_request(:get, "http://api.comicvine.com/volume/24708/").with(:query => {:format => 'json', :api_key => ComicVine::API.key}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => VOLUME_BODY, :headers => {})
70
+ vol = @results.first.fetch
71
+ vol.should be_a_kind_of ComicVine::CVObject
72
+ end
73
+ end
74
+
75
+ describe "ComicVine list" do
76
+ before do
77
+ stub_request(:get, "http://api.comicvine.com/issues/").with(:query => {:format => 'json', :api_key => ComicVine::API.key}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => ISSUES_BODY_1, :headers => {})
78
+ stub_request(:get, "http://api.comicvine.com/issues/").with(:query => {:format => 'json', :api_key => ComicVine::API.key, :limit => 2, :offset => 0}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => ISSUES_BODY_1, :headers => {})
79
+ stub_request(:get, "http://api.comicvine.com/issues/").with(:query => {:format => 'json', :api_key => ComicVine::API.key, :limit => 2, :offset => 2}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => ISSUES_BODY_2, :headers => {})
80
+ @issues = ComicVine::API.issues
81
+ end
82
+ subject { @issues }
83
+
84
+ it { should be_a_kind_of ComicVine::CVList }
85
+ it { should respond_to("total_count", "offset", "limit", "resource")}
86
+ specify { @issues.prev_page.should be_nil }
87
+
88
+ context "when on last page" do
89
+ before { @issues.next_page }
90
+
91
+ specify { @issues.should be_a_kind_of ComicVine::CVList }
92
+ specify { @issues.next_page.should be_nil }
93
+ it "should update the list on prev_page" do
94
+ @issues.prev_page
95
+ @issues.should be_a_kind_of ComicVine::CVList
96
+ end
97
+ end
98
+ end
99
+
100
+ describe "ComicVine detail" do
101
+ before do
102
+ stub_request(:get, "http://api.comicvine.com/issue/145830/").with(:query => {:format => 'json', :api_key => ComicVine::API.key}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => ISSUE_BODY, :headers => {})
103
+ @issue = ComicVine::API.issue 145830
104
+ end
105
+ subject { @issue }
106
+
107
+ it { should be_a_kind_of ComicVine::CVObject }
108
+ it { should respond_to("site_detail_url", "publish_year")}
109
+ specify { lambda { @issue.something }.should raise_error(NoMethodError) }
110
+ specify { lambda { @issue.get_something }.should raise_error(NoMethodError) }
111
+
112
+ it "should have a detail and list association" do
113
+ stub_request(:get, "http://api.comicvine.com/volume/24708/").with(:query => {:format => 'json', :api_key => ComicVine::API.key}, :headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).to_return(:status => 200, :body => VOLUME_BODY, :headers => {})
114
+ vol = @issue.get_volume
115
+ vol.should be_a_kind_of ComicVine::CVObject
116
+ iss = vol.get_issues
117
+ iss.should be_a_kind_of Array
118
+ iss.first.should be_a_kind_of ComicVine::CVObject
119
+ end
120
+ end
10
121
  end
11
122
  end
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,31 @@
4
4
  # loaded once.
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ require 'simplecov'
8
+ SimpleCov.start
7
9
 
8
10
  require 'comic_vine'
11
+ #require 'webmock'
12
+ require 'webmock/rspec'
13
+
9
14
 
10
15
  RSpec.configure do |config|
11
16
  config.treat_symbols_as_metadata_keys_with_true_values = true
12
17
  config.run_all_when_everything_filtered = true
13
- config.filter_run :focus
18
+ #config.filter_run :focus
14
19
  end
20
+
21
+ TYPES_BODY = '{"number_of_page_results": 17, "status_code": 1, "error": "OK", "results": [{"detail_resource_name": "issue", "id": 37, "list_resource_name": "issues"}, {"detail_resource_name": "volume", "id": 49, "list_resource_name": "volumes"}], "limit": 17, "offset": 0, "number_of_total_results": 17}'
22
+
23
+ ISSUE_BODY = '{"number_of_page_results": 1, "status_code": 1, "error": "OK", "results": {"site_detail_url": "http://www.comicvine.com/gizmo-/37-145830/", "id": 145830, "volume": {"api_detail_url": "http://api.comicvine.com/volume/24708/", "id": 24708, "name": "Gizmo"}, "publish_year": null}, "limit": 1, "offset": 0, "number_of_total_results": 1}'
24
+
25
+ ISSUES_BODY_1 = '{"number_of_page_results": 2, "status_code": 1, "error": "OK", "results": [{"api_detail_url": "http://api.comicvine.com/issue/6/", "site_detail_url": "http://www.comicvine.com/chamber-of-chills-magazine-man-in-the-hood-the-lost-race-the-man-germ-the-things/37-6/", "description": "", "deck": "", "aliases": "", "issue_number": "13.00", "publish_year": 1952, "has_staff_review": false, "date_added": "2008-06-06 11:10:16", "publish_day": null, "publish_month": 10, "id": 6, "name": "Man In the Hood; The Lost Race; The Man Germ; The Things; "}, {"api_detail_url": "http://api.comicvine.com/issue/7/", "site_detail_url": "http://www.comicvine.com/fighting-fronts-/37-7/", "description": "", "deck": "", "aliases": "", "issue_number": "3.00", "publish_year": 0, "has_staff_review": false, "date_added": "2008-06-06 11:10:16", "publish_day": null, "publish_month": 0, "id": 7, "name": ""}], "limit": 2, "offset": 0, "number_of_total_results": 4}'
26
+
27
+ ISSUES_BODY_2 = '{"number_of_page_results": 2, "status_code": 1, "error": "OK", "results": [{"api_detail_url": "http://api.comicvine.com/issue/6/", "site_detail_url": "http://www.comicvine.com/chamber-of-chills-magazine-man-in-the-hood-the-lost-race-the-man-germ-the-things/37-6/", "description": "", "deck": "", "aliases": "", "date_last_updated": "2009-01-27 12:47:44", "volume": {"api_detail_url": "http://api.comicvine.com/volume/1487/", "id": 1487, "name": "Chamber of Chills Magazine"}, "issue_number": "13.00", "publish_year": 1952, "has_staff_review": false, "date_added": "2008-06-06 11:10:16", "publish_day": null, "publish_month": 10, "id": 6, "name": "Man In the Hood; The Lost Race; The Man Germ; The Things; "}, {"api_detail_url": "http://api.comicvine.com/issue/7/", "site_detail_url": "http://www.comicvine.com/fighting-fronts-/37-7/", "description": "", "deck": "", "aliases": "", "date_last_updated": "2008-06-06 11:32:53", "volume": {"api_detail_url": "http://api.comicvine.com/volume/1488/", "id": 1488, "name": "Fighting Fronts!"}, "issue_number": "3.00", "publish_year": 0, "has_staff_review": false, "date_added": "2008-06-06 11:10:16", "publish_day": null, "publish_month": 0, "id": 7, "name": ""}], "limit": 2, "offset": 2, "number_of_total_results": 4}'
28
+
29
+ VOLUME_BODY = '{"number_of_page_results": 1, "status_code": 1, "error": "OK", "results": {"id": 24708, "issues": [{"api_detail_url": "http://api.comicvine.com/issue/145830/", "issue_number": "1.00", "id": 145830, "name": " "}]}, "limit": 1, "offset": 0, "number_of_total_results": 1}'
30
+
31
+
32
+ SEARCH_BODY_1 = '{"number_of_page_results": 1, "status_code": 1, "error": "OK", "results": [{"publisher": {"api_detail_url": "http://api.comicvine.com/publisher/517/", "id": 517, "name": "Mirage"}, "start_year": 1985, "description": "", "deck": "", "last_issue": null, "date_last_updated": "2010-07-04 20:51:17", "first_issue": null, "api_detail_url": "http://api.comicvine.com/volume/24708/", "count_of_issues": 6, "id": 24708, "date_added": "2008-12-12 16:58:16", "aliases": "", "site_detail_url": "http://www.comicvine.com/gizmo/49-24708/", "resource_type": "volume", "name": "Gizmo"}], "limit": 1, "offset": 0, "number_of_total_results": 2}'
33
+
34
+ SEARCH_BODY_2 = '{"number_of_page_results": 1, "status_code": 1, "error": "OK", "results": [{"publisher": {"api_detail_url": "http://api.comicvine.com/publisher/517/", "id": 517, "name": "Mirage"}, "start_year": null, "description": "", "deck": "Mirage volume starring Fugitoid and Gizmo", "last_issue": null, "date_last_updated": "2010-04-28 14:24:46", "first_issue": null, "api_detail_url": "http://api.comicvine.com/volume/32839/", "count_of_issues": 2, "id": 32839, "date_added": "2010-04-28 14:22:46", "aliases": "", "site_detail_url": "http://www.comicvine.com/gizmo-and-the-fugitoid/49-32839/", "resource_type": "volume", "name": "Gizmo and the Fugitoid"}], "limit": 1, "offset": 1, "number_of_total_results": 2}'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comic_vine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000Z
12
+ date: 2012-04-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70126999503740 !ruby/object:Gem::Requirement
16
+ requirement: &70268024176560 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70126999503740
24
+ version_requirements: *70268024176560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70126999502720 !ruby/object:Gem::Requirement
27
+ requirement: &70268024175620 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,29 @@ dependencies:
32
32
  version: 2.0.0
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70126999502720
35
+ version_requirements: *70268024175620
36
+ - !ruby/object:Gem::Dependency
37
+ name: webmock
38
+ requirement: &70268024174900 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70268024174900
47
+ - !ruby/object:Gem::Dependency
48
+ name: simplecov
49
+ requirement: &70268024174020 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70268024174020
36
58
  description: Simple api interface to Comic Vine. Allows for searches and returning
37
59
  specific information on resources.
38
60
  email: jakanapes@gmail.com
@@ -53,7 +75,6 @@ files:
53
75
  - lib/comic_vine/cv_object.rb
54
76
  - lib/comic_vine/version.rb
55
77
  - spec/comic_vine_spec.rb
56
- - spec/cv_object_spec.rb
57
78
  - spec/spec_helper.rb
58
79
  homepage: https://github.com/Jakanapes/ComicVine
59
80
  licenses: []
@@ -81,5 +102,4 @@ specification_version: 3
81
102
  summary: Interface to ComicVine API
82
103
  test_files:
83
104
  - spec/comic_vine_spec.rb
84
- - spec/cv_object_spec.rb
85
105
  - spec/spec_helper.rb
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
- describe ComicVine::CVObject do
3
- it "should inialize instance variables from a hash" do
4
- h = {'something' => 'something', 'blah' => 'blah', 'number' => 100}
5
- cvo = ComicVine::CVObject.new h
6
- cvo.something.should == 'something'
7
- cvo.blah.should == 'blah'
8
- cvo.number.should == 100
9
- end
10
- end