google_books 0.1.0 → 0.2.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/CHANGELOG.md +8 -1
- data/Gemfile.lock +1 -1
- data/README.md +4 -1
- data/lib/google_books/api/book.rb +26 -8
- data/lib/google_books/version.rb +1 -1
- data/spec/google_books/api/book_spec.rb +104 -31
- metadata +14 -14
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
CHANGELOG
|
2
2
|
=========
|
3
3
|
|
4
|
-
v0.0
|
4
|
+
v0.1.0
|
5
5
|
------
|
6
6
|
This is the initial version of google_books
|
7
7
|
|
@@ -30,3 +30,10 @@ This is the initial version of google_books
|
|
30
30
|
* `:extra_large`
|
31
31
|
* `preview_link` - *String*
|
32
32
|
* `info_link` - *String*
|
33
|
+
|
34
|
+
v0.2.0
|
35
|
+
------
|
36
|
+
* New Features
|
37
|
+
* Standardized publisher names in a similar fashion to the [google-book gem](https://rubygems.org/gems/google-book)
|
38
|
+
* Bug Fixes
|
39
|
+
* The publishedDate field in the Google Books API are strings in the format of YYYY-MM-DD. Sometimes it's just YYYY and other times it's YYYY-MM. Previously the `published_date` attribute was a Date type, now it is a string and you can convert the date however you want in your applications.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -57,7 +57,10 @@ Book Attributes
|
|
57
57
|
|
58
58
|
* `authors`: *Array*
|
59
59
|
* `publisher`: *String*
|
60
|
-
* `published_date`: *
|
60
|
+
* `published_date`: *String*
|
61
|
+
|
62
|
+
The `published_date` is represented by the format YYYY-MM-DD with MM and DD being optional
|
63
|
+
|
61
64
|
* `isbn`: *String*
|
62
65
|
* `isbn_10`: *String*
|
63
66
|
* `page_count`: *FixNum*
|
@@ -12,18 +12,16 @@ module GoogleBooks
|
|
12
12
|
end
|
13
13
|
|
14
14
|
private
|
15
|
-
|
15
|
+
|
16
16
|
def parse_item(item)
|
17
17
|
volume_info = item['volumeInfo']
|
18
18
|
@book = Hashie::Mash.new volume_info
|
19
|
-
|
20
|
-
@title = @book.title
|
21
|
-
else
|
22
|
-
@title = "#{@book.title}: #{titlize(@book.subtitle)}"
|
23
|
-
end
|
19
|
+
@title = build_title(@book)
|
24
20
|
@authors = @book.authors || []
|
25
|
-
@publisher = @book.publisher
|
26
|
-
|
21
|
+
@publisher = normalize_publisher(@book.publisher)
|
22
|
+
|
23
|
+
@published_date = @book.publishedDate.to_s
|
24
|
+
|
27
25
|
@description = @book.description
|
28
26
|
@isbn = get_isbn_for_book
|
29
27
|
@isbn_10 = get_isbn_for_book(10)
|
@@ -35,7 +33,27 @@ module GoogleBooks
|
|
35
33
|
@preview_link = @book.previewLink
|
36
34
|
@info_link = @book.infoLink
|
37
35
|
end
|
36
|
+
|
37
|
+
def build_title(book)
|
38
|
+
return book.title if book.subtitle.nil?
|
39
|
+
"#{book.title}: #{titlize(book.subtitle)}"
|
40
|
+
end
|
38
41
|
|
42
|
+
def normalize_publisher(name)
|
43
|
+
return name if name.blank?
|
44
|
+
|
45
|
+
name.
|
46
|
+
gsub(/[ ,]+Inc.?$/i, ' Inc.').
|
47
|
+
gsub(/[ ,]+Llc.?$/i, ' LLC.').
|
48
|
+
gsub(/[ ,]+Ltd.?$/i, ' Ltd.').
|
49
|
+
gsub(/Intl( |$)/i) { "International#{$1}" }.
|
50
|
+
gsub(/Pr( |$)/i) { "Press#{$1}" }.
|
51
|
+
gsub(/Pub Group( |$)/i) { "Publishing Group#{$1}" }.
|
52
|
+
gsub(/Pub( |$)/i) { "Publishers#{$1}" }.
|
53
|
+
gsub(/Pubns( |$)/i) { "Publications#{$1}" }.
|
54
|
+
gsub(/Univ( |$)/i) { "University#{$1}" }
|
55
|
+
end
|
56
|
+
|
39
57
|
def get_isbn_for_book(type=13)
|
40
58
|
return nil if @book.industryIdentifiers.nil?
|
41
59
|
isbn = @book.industryIdentifiers.find { |id| id.type == "ISBN_#{type}" }
|
data/lib/google_books/version.rb
CHANGED
@@ -7,6 +7,10 @@ module GoogleBooks
|
|
7
7
|
|
8
8
|
subject { API.search('isbn:9781935182320').first }
|
9
9
|
|
10
|
+
let(:item) do
|
11
|
+
item = { 'volumeInfo' => {} }
|
12
|
+
end
|
13
|
+
|
10
14
|
it "should be able to handle a nil object passed" do
|
11
15
|
lambda { Book.new(nil) }.should_not raise_error
|
12
16
|
end
|
@@ -26,14 +30,81 @@ module GoogleBooks
|
|
26
30
|
subject.authors[1].should eq "Yehuda Katz"
|
27
31
|
end
|
28
32
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
describe "publisher" do
|
34
|
+
it "should have a publisher" do
|
35
|
+
subject.publisher.should_not be_nil
|
36
|
+
subject.publisher.should include "Manning"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should standardize an Inc to Inc." do
|
40
|
+
item['volumeInfo']['publisher'] = "Publisher Inc"
|
41
|
+
book = Book.new(item)
|
42
|
+
book.publisher.should eq "Publisher Inc."
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should standardize an Llc to LLC." do
|
46
|
+
item['volumeInfo']['publisher'] = "Publisher Llc"
|
47
|
+
book = Book.new(item)
|
48
|
+
book.publisher.should eq "Publisher LLC."
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should standardize an Ltd to Ltd." do
|
52
|
+
item['volumeInfo']['publisher'] = "Publisher Ltd"
|
53
|
+
book = Book.new(item)
|
54
|
+
book.publisher.should eq "Publisher Ltd."
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should replace Intl with International anywhere in the name" do
|
58
|
+
item['volumeInfo']['publisher'] = "Publisher Intl Clearing House"
|
59
|
+
book = Book.new(item)
|
60
|
+
book.publisher.should eq "Publisher International Clearing House"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should replace Pr with Press anywhere in the name" do
|
64
|
+
item['volumeInfo']['publisher'] = "Publisher Pr House"
|
65
|
+
book = Book.new(item)
|
66
|
+
book.publisher.should eq "Publisher Press House"
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should replace Pub with Publishers anywhere in the name" do
|
70
|
+
item['volumeInfo']['publisher'] = "Publisher Pub, Inc"
|
71
|
+
book = Book.new(item)
|
72
|
+
book.publisher.should eq "Publisher Publishers Inc."
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should replace Pubns with Publications anywhere in the name" do
|
76
|
+
item['volumeInfo']['publisher'] = "Publisher Pubns Inc"
|
77
|
+
book = Book.new(item)
|
78
|
+
book.publisher.should eq "Publisher Publications Inc."
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should replace Pub Group with Publishing Group anywhere in the name" do
|
82
|
+
item['volumeInfo']['publisher'] = "Publisher Pub Group Inc"
|
83
|
+
book = Book.new(item)
|
84
|
+
book.publisher.should eq "Publisher Publishing Group Inc."
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should replace Univ with University anywhere in the name" do
|
88
|
+
item['volumeInfo']['publisher'] = "Publisher Univ Pr"
|
89
|
+
book = Book.new(item)
|
90
|
+
book.publisher.should eq "Publisher University Press"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "published_date" do
|
95
|
+
it "should have a published date in sting format" do
|
96
|
+
subject.published_date.should eq "2010-06-30"
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should handle a published date that is only a year" do
|
100
|
+
book = API.search('isbn:9781934356166').first
|
101
|
+
book.published_date.should eq "2009"
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should handle a published date that is only a month and a year" do
|
105
|
+
book = API.search('isbn:9780954344405').first
|
106
|
+
book.published_date.should eq "2003-01"
|
107
|
+
end
|
37
108
|
end
|
38
109
|
|
39
110
|
it "should have description (which may be blank)" do
|
@@ -66,29 +137,31 @@ module GoogleBooks
|
|
66
137
|
subject.ratings_count.should be_a Fixnum
|
67
138
|
end
|
68
139
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
140
|
+
describe "covers" do
|
141
|
+
it "should contain a covers hash" do
|
142
|
+
subject.covers.should be_a Hash
|
143
|
+
subject.covers.keys.should include :thumbnail
|
144
|
+
subject.covers.keys.should include :small
|
145
|
+
subject.covers.keys.should include :medium
|
146
|
+
subject.covers.keys.should include :large
|
147
|
+
subject.covers.keys.should include :extra_large
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should not have curls on the cover urls" do
|
151
|
+
subject.covers[:thumbnail].should_not include 'edge=curl'
|
152
|
+
subject.covers[:small].should_not include 'edge=curl'
|
153
|
+
subject.covers[:medium].should_not include 'edge=curl'
|
154
|
+
subject.covers[:large].should_not include 'edge=curl'
|
155
|
+
subject.covers[:extra_large].should_not include 'edge=curl'
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should have the cover url zoom level" do
|
159
|
+
subject.covers[:thumbnail].should include 'zoom=5'
|
160
|
+
subject.covers[:small].should include 'zoom=1'
|
161
|
+
subject.covers[:medium].should include 'zoom=2'
|
162
|
+
subject.covers[:large].should include 'zoom=3'
|
163
|
+
subject.covers[:extra_large].should include 'zoom=6'
|
164
|
+
end
|
92
165
|
end
|
93
166
|
|
94
167
|
it "should contains a preview link" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_books
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.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: 2011-08-
|
12
|
+
date: 2011-08-29 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
16
|
-
requirement: &
|
16
|
+
requirement: &70187585301000 !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: *
|
24
|
+
version_requirements: *70187585301000
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hashie
|
27
|
-
requirement: &
|
27
|
+
requirement: &70187585300580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70187585300580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: autotest
|
38
|
-
requirement: &
|
38
|
+
requirement: &70187585300160 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70187585300160
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70187585299740 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70187585299740
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: webmock
|
60
|
-
requirement: &
|
60
|
+
requirement: &70187585299320 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70187585299320
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: vcr
|
71
|
-
requirement: &
|
71
|
+
requirement: &70187585298900 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70187585298900
|
80
80
|
description: A Ruby wrapper that allows you to query the Google Books API. This project
|
81
81
|
was inspired by google-book, see the README for more information
|
82
82
|
email:
|