google_book 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +5 -0
- data/README.md +130 -0
- data/Rakefile +15 -0
- data/lib/google_book.rb +3 -0
- data/lib/google_book/base.rb +167 -0
- data/lib/google_book/book_info.rb +37 -0
- data/lib/google_book/book_item.rb +94 -0
- data/spec/base_spec.rb +61 -0
- data/spec/book_item_spec.rb +32 -0
- metadata +51 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 34025d0e5be1f2a4b0ef1dd93f32d53af55f5899
|
4
|
+
data.tar.gz: 88ea8dc02c2e0f6d780919a49df67c32695c0128
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bc827dacb2afeb540e7284cfd2db63fee4925c716bb2cc36688ddc05d6fb0b1f498cc0a47468b605d308c734d4e80f89c40db1e419ab4f8e119c7c6131396f7c
|
7
|
+
data.tar.gz: 935404e9528281c8da1315174e2fe8eb634e0042ab1142dc921699aeaa82146163b0a4fa407e358769080726debbfa3c32ef13c499f5d99ba1c70a9d3284f1af
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Google Book API Integration</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
|
7
|
+
<div>
|
8
|
+
<a href = "https://codeclimate.com/repos/51fa3a5356b102601a00d3e1/feed"><img src="https://codeclimate.com/repos/51fa3a5356b102601a00d3e1/badges/8db2d24d585c3d2ac1f1/gpa.png" /></a>
|
9
|
+
<a href = "https://travis-ci.org/rajcybage/google_book"><img src= "https://travis-ci.org/rajcybage/google_book.png"/></a>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<h1>Google Book ApI Integration</h1><br/>
|
13
|
+
<p>You can use it in your web application as well as desktop application to fetch google books</p>
|
14
|
+
<div>
|
15
|
+
<h2>Installation</h2>
|
16
|
+
<p>In Gemfile
|
17
|
+
<code>gem 'google_book', git: 'git@github.com:rajcybage/google_book.git'</code>
|
18
|
+
</p>
|
19
|
+
</div>
|
20
|
+
<div>
|
21
|
+
<h2>System Requirements</h2>
|
22
|
+
<code>Ruby >= 1.9.3 or jruby >=1.7.x</code>
|
23
|
+
<code>rails >= 3.0.x</code>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div>
|
27
|
+
<h2>Usage</h2>
|
28
|
+
<p>
|
29
|
+
<code>
|
30
|
+
b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")
|
31
|
+
</code><br/>
|
32
|
+
<code>
|
33
|
+
b.search("Name of the book you want to search",type) #type should be a number
|
34
|
+
</code>
|
35
|
+
</p>
|
36
|
+
<ul>
|
37
|
+
<li> type = 1 ===> intitle: Returns results where the text following this keyword is found in the title.</li>
|
38
|
+
<li> type = 2 ===> inauthor: Returns results where the text following this keyword is found in the author.</li>
|
39
|
+
<li> type = 3 ====> inpublisher: Returns results where the text following this keyword is found in the publisher.</li>
|
40
|
+
<li>type = 4 ===> subject: Returns results where the text following this keyword is listed in the category list of the volume.</li>
|
41
|
+
<li>type = 5 ====>isbn: Returns results where the text following this keyword is the ISBN number.</li>
|
42
|
+
<li>ltype = 6 ====> ccn: Returns results where the text following this keyword is the Library of Congress Control Number.</li>
|
43
|
+
<li>type = 7 ===> oclc: Returns results where the text following this keyword is the Online Computer Library Center number.
|
44
|
+
<li> type = 8 ===> Returns the book which can be downloadable</li>
|
45
|
+
</li>
|
46
|
+
</ul>
|
47
|
+
<p>
|
48
|
+
<code>b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")</code> <br/>
|
49
|
+
<code> b.search("keyword or book name",1)</code> <br/>
|
50
|
+
<code>b.book_info.get_all_titles #to get the all titles of your search book</code> <br/>
|
51
|
+
<code>b.book_info.get_all_subtitles # to get all the subtitles of your search book</code>
|
52
|
+
<code>b.total_count #get the search results count</code>
|
53
|
+
</p>
|
54
|
+
|
55
|
+
|
56
|
+
</div>
|
57
|
+
|
58
|
+
<h2>If you want to access each and every book as an instance of book</h2>
|
59
|
+
<p>you can then create a instance of books which was getting by search by following ways</p>
|
60
|
+
<div>
|
61
|
+
<code>b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")</code> <br/>
|
62
|
+
<code> b.search("Name of the book you want to search",1)</code> <br/>
|
63
|
+
<code>b.books #create the instance of all the books of your search</code><br/>
|
64
|
+
<code>b.books.first.get_title #get the first book title</code><br/>
|
65
|
+
<code>b.books.first.get_sub_title#get the first book sub title</code><br/>
|
66
|
+
<code>b.books.first.authors #get the first book authors</code><br/>
|
67
|
+
<code>b.books.first.publish_date #get the first book published date</code><br/>
|
68
|
+
<code>b.books.first.preview_link #get the first book preview link</code><br/>
|
69
|
+
<code>b.books.first.info_link #get the first book information</code><br/>
|
70
|
+
<code>b.books.first.thumbnail_image #get the first book thumbnail image</code><br/>
|
71
|
+
<code>b.books.first.small_thumbnail_link #get the first book thumbnail image</code><br/>
|
72
|
+
</div>
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
<h2>Want to search Downloadable Books</h2>
|
78
|
+
<p>
|
79
|
+
<div>
|
80
|
+
<code>b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")</code> <br/>
|
81
|
+
<code>b.search('downloadable book name',8)</code>
|
82
|
+
<code>b.books.first.downloadable?#check whther the book is downloadable</code><br/>
|
83
|
+
<code>b.books.first.buyable?#check whether the book is buyable</code><br/>
|
84
|
+
<code>b.books.first.buy_link</code><br/>
|
85
|
+
<code>b.books.first.download_link</code>
|
86
|
+
</div>
|
87
|
+
</p>
|
88
|
+
|
89
|
+
|
90
|
+
<h2>Want to get Magazines only</h2>
|
91
|
+
<p>
|
92
|
+
<div>
|
93
|
+
<code>b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")</code> <br/>
|
94
|
+
<code>b.search('downloadable book name',<b>9</b>) #type is 9 for only magazines</code>
|
95
|
+
<code>b.books #create the magaize instances</code><br/>
|
96
|
+
<code>b.books.first.magazine?</code><br/>
|
97
|
+
<span> so on..now get all the info(title,subtitle,author,preview....) of each and every magazine instanaces as stated above</span>
|
98
|
+
</div>
|
99
|
+
</p>
|
100
|
+
<h2>Filter your Search</h2>
|
101
|
+
<p>
|
102
|
+
<div>
|
103
|
+
<ul>
|
104
|
+
<li> filter_type = 1 free-ebooks - Only returns results that are free Google eBooks.</li>
|
105
|
+
<li> filter_type = 2 paid-ebooks - Only returns results that are Google eBooks with a price.</li>
|
106
|
+
<li> filter_type = 3 full - Only returns results where all of the text is viewable.</li>
|
107
|
+
<li> filter_type = 4 ebooks - Only returns results that are Google eBooks, paid or free.
|
108
|
+
Examples of non-eBooks would be publisher content that is available in limited preview and not for sale,
|
109
|
+
or magazines.</li>
|
110
|
+
</ul>
|
111
|
+
</div>
|
112
|
+
|
113
|
+
<div>
|
114
|
+
<code>b=GoogleBook::Book.new(:api_key => "YOUR_GOOOGLE_API_KEY")</code><br/>
|
115
|
+
<code>b.filter('ruby language', 1)#here one is <b>filter_type</b> as defined above</code><br/>
|
116
|
+
<span>Now create all books instance as usual</span><br/>
|
117
|
+
<code>b.books</code>
|
118
|
+
<span><b>If you select your filter as free ebook then it will be downloadable and buyable</b></span><br/>
|
119
|
+
|
120
|
+
<code>b.books.first.downloadable?#check whther the book is downloadable</code><br/>
|
121
|
+
<code>b.books.first.buyable?#check whether the book is buyable</code><br/>
|
122
|
+
<code>b.books.first.buy_link</code><br/>
|
123
|
+
<code>b.books.first.download_link</code>
|
124
|
+
|
125
|
+
</div>
|
126
|
+
</p>
|
127
|
+
|
128
|
+
|
129
|
+
</body>
|
130
|
+
</html>
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rspec'
|
4
|
+
require 'rspec/core'
|
5
|
+
require 'rspec/mocks'
|
6
|
+
require 'rspec/expectations'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
9
|
+
t.pattern = 'spec/*_spec.rb'
|
10
|
+
t.rspec_opts ||= []
|
11
|
+
t.rspec_opts << '--color'
|
12
|
+
t.rspec_opts << '-f documentation'
|
13
|
+
end
|
14
|
+
|
15
|
+
task :default => :spec
|
data/lib/google_book.rb
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
require 'openssl'
|
4
|
+
require 'json'
|
5
|
+
require_relative 'book_info.rb'
|
6
|
+
require_relative 'book_item.rb'
|
7
|
+
|
8
|
+
module GoogleBook
|
9
|
+
class Book
|
10
|
+
attr_accessor :api_key, :total_count, :items, :books
|
11
|
+
|
12
|
+
def initialize(api_key)
|
13
|
+
unless api_key.nil?
|
14
|
+
@api_key = api_key[:api_key]
|
15
|
+
else
|
16
|
+
raise "Api key can not be nil. Please given your api_key"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#Google books search
|
21
|
+
def search(query,type = nil)
|
22
|
+
checking_type(type)
|
23
|
+
type = set_type(type) unless type.nil?
|
24
|
+
if query.nil?
|
25
|
+
puts 'Enter the text to search'
|
26
|
+
text = gets
|
27
|
+
end
|
28
|
+
json = JSON.parse(connect_google(@api_key,type,query))
|
29
|
+
@total_count = json["totalItems"]
|
30
|
+
@items = json["items"]
|
31
|
+
end
|
32
|
+
|
33
|
+
#Google books filtration
|
34
|
+
def filter(query, type = nil)
|
35
|
+
checking_filter_type(type)
|
36
|
+
filter_type = set_filter_type(type) unless type.nil?
|
37
|
+
json = JSON.parse(connect_google(@api_key,nil,query,filter_type))
|
38
|
+
@total_count = json["totalItems"]
|
39
|
+
@items = json["items"]
|
40
|
+
end
|
41
|
+
|
42
|
+
#get all the books information
|
43
|
+
def book_info
|
44
|
+
BookInfo.new(items: @items)
|
45
|
+
end
|
46
|
+
|
47
|
+
#create all book instances
|
48
|
+
def books
|
49
|
+
@books = []
|
50
|
+
@items.each do |item|
|
51
|
+
@books << BookItem.new(item: item)
|
52
|
+
end
|
53
|
+
return @books
|
54
|
+
end
|
55
|
+
|
56
|
+
#use for rails application
|
57
|
+
def api_key
|
58
|
+
@api_key = YAML.load_file("#{Rails.root}/config/api_key_google_book.yml")[Rails.env]
|
59
|
+
end
|
60
|
+
|
61
|
+
def checking_filter_type(type)
|
62
|
+
if type.nil?
|
63
|
+
puts "How you want to filter your search?(example:1)?"
|
64
|
+
puts "1)Free ebooks"
|
65
|
+
puts "2)Paid ebboks"
|
66
|
+
puts "3)Full text"
|
67
|
+
f_type = gets
|
68
|
+
else
|
69
|
+
type = "1"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
def set_filter_type(type)
|
75
|
+
case type.to_i
|
76
|
+
when 1
|
77
|
+
type = "free-ebooks"
|
78
|
+
when 2
|
79
|
+
type = "paid-ebooks"
|
80
|
+
when 3
|
81
|
+
type = "full"
|
82
|
+
else
|
83
|
+
type = "ebooks"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def checking_type(type)
|
89
|
+
if type.nil?
|
90
|
+
puts "How you want to search?input only list number(ex:1)\n"
|
91
|
+
puts "1)By Title\n"
|
92
|
+
puts "2)By Author Name\n"
|
93
|
+
puts "3)By Publisher\n"
|
94
|
+
puts "4)By Subject\n"
|
95
|
+
puts "5)By ISBN number:- \n"
|
96
|
+
puts "6)Library of Congress Control Number\n"
|
97
|
+
puts "7)By Online Computer Library Center number\n"
|
98
|
+
puts "8)Want to search Downloadable book"
|
99
|
+
puts "9)Want to search downloadable Magazines"
|
100
|
+
type = gets
|
101
|
+
else
|
102
|
+
type = "1"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def set_type(type)
|
107
|
+
case type.to_i
|
108
|
+
when 1
|
109
|
+
type = "intitle"
|
110
|
+
when 2
|
111
|
+
type = "inauthor"
|
112
|
+
when 3
|
113
|
+
type = "inpublisher"
|
114
|
+
when 4
|
115
|
+
type = "subject"
|
116
|
+
when 5
|
117
|
+
type = "isbn"
|
118
|
+
when 6
|
119
|
+
type = "lccn"
|
120
|
+
when 7
|
121
|
+
type = "oclc"
|
122
|
+
when 8
|
123
|
+
type = "download"
|
124
|
+
when 9
|
125
|
+
type = "magazine"
|
126
|
+
else
|
127
|
+
type = "inauthor"
|
128
|
+
end
|
129
|
+
return type
|
130
|
+
end
|
131
|
+
|
132
|
+
def url_formation(api_key = nil,type = nil,search_param = nil, filter = nil)
|
133
|
+
main_url = "https://www.googleapis.com/books/v1/volumes"
|
134
|
+
if !type.nil?
|
135
|
+
url = set_normal_url(api_key, type, search_param, main_url)
|
136
|
+
elsif type.nil? && !filter.nil?
|
137
|
+
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&filter=#{filter}&key=#{@api_key}"
|
138
|
+
else
|
139
|
+
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&key=#{@api_key}"
|
140
|
+
end
|
141
|
+
puts "#{url}"
|
142
|
+
return URI(url)
|
143
|
+
end
|
144
|
+
|
145
|
+
def set_normal_url(api_key, type, search_param, main_url)
|
146
|
+
case type
|
147
|
+
when "download"
|
148
|
+
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&download=epub&key=#{api_key}"
|
149
|
+
when "magazine"
|
150
|
+
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&printType=magazines&key=#{api_key}"
|
151
|
+
else
|
152
|
+
url = main_url+"?q=#{search_param.gsub(/\s+/, "").strip}+#{type}:keyes&key=#{api_key}"
|
153
|
+
end
|
154
|
+
return url
|
155
|
+
end
|
156
|
+
|
157
|
+
def connect_google(key = nil,type = nil,search_param = nil,filter = nil)
|
158
|
+
uri = url_formation(key,type,search_param,filter)
|
159
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
160
|
+
http.use_ssl = true
|
161
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
162
|
+
response = http.get(uri.request_uri)
|
163
|
+
# response = Net::HTTP.get_response(uri)
|
164
|
+
return response.body
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'base.rb'
|
2
|
+
require_relative 'book_item.rb'
|
3
|
+
class BookInfo
|
4
|
+
attr_accessor :items, :titles, :subtitles, :book
|
5
|
+
@titles = []
|
6
|
+
@subtitles = []
|
7
|
+
def initialize(items=[])
|
8
|
+
@items = items
|
9
|
+
end
|
10
|
+
|
11
|
+
#return the all titles of those books
|
12
|
+
def get_all_titles
|
13
|
+
show_all_titles_and_subtitles("title")
|
14
|
+
return @titles
|
15
|
+
end
|
16
|
+
|
17
|
+
#return all the subtitles
|
18
|
+
def get_all_sub_titles
|
19
|
+
show_all_titles_and_subtitles("subtitle")
|
20
|
+
return @subtitles
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
#return the particular book
|
25
|
+
def get_book(params = {})
|
26
|
+
item = @items.detect{|i| i[params.keys.first] == params.values.first} || @items.detect{|i| i["volumeInfo"][params.keys.first] == params.values.first}
|
27
|
+
@book = BookItem.new(item: item)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def show_all_titles_and_subtitles(flag)
|
32
|
+
@items[:items].each do |item|
|
33
|
+
@titles << item["volumeInfo"]["title"]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require_relative 'book_info.rb'
|
2
|
+
require_relative 'base.rb'
|
3
|
+
|
4
|
+
class BookItem
|
5
|
+
attr_reader :item
|
6
|
+
|
7
|
+
def initialize(item)
|
8
|
+
@item = item
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_title
|
12
|
+
@item[:item]["volumeInfo"]["title"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_sub_title
|
16
|
+
@item[:item]["volumeInfo"]["subtitle"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def authors
|
20
|
+
@item[:item]["volumeInfo"]["authors"]
|
21
|
+
end
|
22
|
+
|
23
|
+
def publish_date
|
24
|
+
@item[:item]["volumeInfo"]["publishedDate"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def preview_link
|
28
|
+
@item[:item]["volumeInfo"]["previewLink"]
|
29
|
+
end
|
30
|
+
|
31
|
+
def info_link
|
32
|
+
@item[:item]["volumeInfo"]["infoLink"]
|
33
|
+
end
|
34
|
+
|
35
|
+
def canonical_volume_link
|
36
|
+
@item[:item]["volumeInfo"]["canonicalVolumeLink"]
|
37
|
+
end
|
38
|
+
|
39
|
+
def thubnail_image
|
40
|
+
@item[:item]["volumeInfo"]["imageLinks"]["thumbnail"]
|
41
|
+
end
|
42
|
+
|
43
|
+
def small_thumbnail_link
|
44
|
+
@item[:item]["volumeInfo"]["imageLinks"]["smallThumbnail"]
|
45
|
+
end
|
46
|
+
|
47
|
+
def pagecount
|
48
|
+
@item[:item]["volumeInfo"]["pageCount"]
|
49
|
+
end
|
50
|
+
|
51
|
+
def web_reader_link
|
52
|
+
@item[:item]["accessInfo"]["webReaderLink"]
|
53
|
+
end
|
54
|
+
|
55
|
+
def buy_link
|
56
|
+
if buyable?
|
57
|
+
@item[:item]["saleInfo"]["buyLink"]
|
58
|
+
else
|
59
|
+
"your book is not buyable"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def magazine?
|
64
|
+
if @item[:item]["volumeInfo"]["printType"].upcase == "MAGAZINE"
|
65
|
+
true
|
66
|
+
else
|
67
|
+
false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def downloadable?
|
72
|
+
unless @item[:item]["accessInfo"]["pdf"].nil? || @item[:item]["accessInfo"]["pdf"]["downloadLink"].nil?
|
73
|
+
true
|
74
|
+
else
|
75
|
+
false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def buyable?
|
80
|
+
if @item[:item]["saleInfo"]["isEbook"] != true || @item[:item]["saleInfo"]["buyLink"].nil?
|
81
|
+
false
|
82
|
+
else
|
83
|
+
true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def download_link
|
88
|
+
if downloadable?
|
89
|
+
@item[:item]["accessInfo"]["pdf"]["downloadLink"]
|
90
|
+
else
|
91
|
+
"your book is not downloadable"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/spec/base_spec.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require_relative '../lib/google_book/base.rb'
|
2
|
+
require_relative '../lib/google_book/book_item.rb'
|
3
|
+
require_relative 'spec_helper.rb'
|
4
|
+
|
5
|
+
describe "base" do
|
6
|
+
let(:api_key){"AIzaSyD82ugogyUN7bAZ4k2UaLlVCep5NxZVYNM"}
|
7
|
+
before(:all) do
|
8
|
+
@con_book = GoogleBook::Book.new(:api_key => api_key)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "google_connect" do
|
12
|
+
it "should connect google book" do
|
13
|
+
stub_request(:get, "https://www.googleapis.com/books/v1/volumes?q=flowers+inauthor:keyes&key=#{api_key}").to_return(:body => "abc")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "initialize" do
|
18
|
+
it "should connect googlebook api properly" do
|
19
|
+
@con_book.should_not be_nil
|
20
|
+
@con_book.should be_a_kind_of(Object)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "search" do
|
25
|
+
|
26
|
+
it "should return anything type" do
|
27
|
+
@con_book.search('flowers',2).should_not be_nil
|
28
|
+
@con_book.search('flowers',2).should be_a_kind_of(Array)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should return all books items is eual to the items of the book object" do
|
32
|
+
@con_book.search('Flowers',2).should eq @con_book.items
|
33
|
+
end
|
34
|
+
it "should return magazines after giving filter" do
|
35
|
+
@con_book.search('Flowers',9)
|
36
|
+
@con_book.books.first.magazine?.should be_true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "filters" do
|
41
|
+
it "should return results while using diffferent filters" do
|
42
|
+
@con_book.filter('Ruby Language', 1).should_not be_nil
|
43
|
+
@con_book.books.first.buy_link.should_not be_nil
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should also show downloadable books for free_ebook filter" do
|
47
|
+
@con_book.filter('Ruby Language', 1).should_not be_nil
|
48
|
+
@con_book.books.first.download_link.should_not be_nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "books" do
|
53
|
+
before(:all) do
|
54
|
+
@con_book.search('Flowers',2)
|
55
|
+
end
|
56
|
+
it "should create all the books instance" do
|
57
|
+
@con_book.books.should be_a_kind_of(Array)
|
58
|
+
@con_book.books.first.should be_a_kind_of(Object)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative '../lib/google_book/base.rb'
|
2
|
+
require_relative '../lib/google_book/book_item.rb'
|
3
|
+
require_relative 'spec_helper.rb'
|
4
|
+
|
5
|
+
describe "book_item" do
|
6
|
+
let(:api_key){"AIzaSyD82ugogyUN7bAZ4k2UaLlVCep5NxZVYNM"}
|
7
|
+
before(:all) do
|
8
|
+
@con_book = GoogleBook::Book.new(:api_key => api_key)
|
9
|
+
@con_book.search("Flowers",2)
|
10
|
+
@book_items = @con_book.books
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "initialize" do
|
14
|
+
it "should have same instance" do
|
15
|
+
@book_items.first.should be_a_kind_of(Object)
|
16
|
+
@book_items.first.item[:item]["id"].should eq(BookItem.new(item: @con_book.search("Flowers",2).first).item[:item]["id"])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "get_title" do
|
21
|
+
it "should return proper title" do
|
22
|
+
@book_items.first.get_title.should eq(@book_items.first.item[:item]["volumeInfo"]["title"])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "get_sub_title" do
|
27
|
+
it "should return proper subtitle" do
|
28
|
+
@book_items.first.get_sub_title.should eq(@book_items.first.item[:item]["volumeInfo"]["subtitle"])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: google_book
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rajarshi Das
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Integrate the google book api into your app
|
14
|
+
email: rdasarminus@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- README.md
|
20
|
+
- Gemfile
|
21
|
+
- Rakefile
|
22
|
+
- spec/base_spec.rb
|
23
|
+
- spec/book_item_spec.rb
|
24
|
+
- lib/google_book.rb
|
25
|
+
- lib/google_book/base.rb
|
26
|
+
- lib/google_book/book_info.rb
|
27
|
+
- lib/google_book/book_item.rb
|
28
|
+
homepage: https://github.com/rajcybage/google_book
|
29
|
+
licenses: []
|
30
|
+
metadata: {}
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 2.0.3
|
48
|
+
signing_key:
|
49
|
+
specification_version: 4
|
50
|
+
summary: Google Book API integration
|
51
|
+
test_files: []
|