alexandrite 0.0.1 → 0.1.0.pre.alpha
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 +4 -4
- data/.gitignore +1 -0
- data/README.md +21 -19
- data/bookshelf.dump +10 -0
- data/data.dump +0 -0
- data/lib/alexandrite/version.rb +1 -1
- data/lib/alexandrite.rb +20 -17
- data/lib/{alexandrite_books.rb → alexandrite_book.rb} +1 -0
- data/lib/alexandrite_bookshelf.rb +42 -4
- data/lib/alexandrite_oclc.rb +5 -3
- data/lib/helpers/file_handler.rb +19 -0
- data/test_library.dump +0 -0
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daf4377dc5fb6c1b1b122236cdd76e760863a575bd6e1bd177d20d98aab92508
|
4
|
+
data.tar.gz: ce9bfcf98c1142b5e539b52189962779c2286705a9c361ba3da7bfa76b80ac81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 370748c92b5a9db2b9942fa8b8d779a2324a3a3c95c3114059d708346ff4ef6ee3afa8405a6f5aee58312bfef674e93b14b120d0ed4ef5a6c1cfdbaa4c55bc92
|
7
|
+
data.tar.gz: b04df9e530984ad698e71ea0057a60911480ad5c423d83ecea46413b8eea13af96e7db0fae3cb7d6c96e538b7d50e4457bd63ca04d6176ac5e8282f18f221a31
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,18 @@
|
|
1
|
-
#
|
1
|
+
# Alexandrite GEM
|
2
|
+
[](https://badge.fury.io/rb/alexandrite)
|
2
3
|
|
3
|
-
|
4
|
+
Alexandrite is a gem that fetches book's data by ISBN number and other parameters from the [Google API](https://developers.google.com/books) and [OCLC API](http://classify.oclc.org/classify2/). It's intended to help librarians and bibliophiles to manage their bookshelves and classify their books.
|
4
5
|
|
5
|
-
|
6
|
-
- Structure data
|
6
|
+
With Alexandrite, it's
|
7
7
|
|
8
|
-
|
8
|
+
- Easy to get all information by ISBN and other parameters
|
9
|
+
- Structure data
|
10
|
+
|
11
|
+
## Features
|
9
12
|
|
13
|
+
- Retrieves Book data from Google API and OCLC API
|
14
|
+
- Suggest a Dewey Decimal Classification or a Library of Congress Classification with OCLC Data.
|
15
|
+
- Add data to a virtual collection
|
10
16
|
|
11
17
|
|
12
18
|
### Version
|
@@ -14,6 +20,7 @@ You don't have to call manually Google API with ISBN number. This gem will do ev
|
|
14
20
|
|
15
21
|
|
16
22
|
### Installation
|
23
|
+
|
17
24
|
Add this line to your application's Gemfile:
|
18
25
|
|
19
26
|
```ruby
|
@@ -32,9 +39,13 @@ Or install it yourself as globally:
|
|
32
39
|
gem install alexandrite
|
33
40
|
```
|
34
41
|
|
42
|
+
## Usage
|
43
|
+
|
44
|
+
Currently, Alexandrite is divided on four modules: Alexandrite, Alexandrite::Book, Alexandrite::GoogleAPI, and AlexandriteOCLCAPI. Require Alexandrite if you want to use an integration of all the modules, or use each module separately.
|
45
|
+
|
35
46
|
|
36
47
|
## Examples
|
37
|
-
book =
|
48
|
+
book = Alexandrite.create_book("0262033844")
|
38
49
|
|
39
50
|
book.title
|
40
51
|
#=> "Introduction to Algorithms"
|
@@ -52,17 +63,7 @@ gem install alexandrite
|
|
52
63
|
#=> 0262033844
|
53
64
|
|
54
65
|
book.isbn_13
|
55
|
-
#=>
|
56
|
-
|
57
|
-
book.thumbnail
|
58
|
-
#=> http://books.google.com/books/content?id=i-bUBQAAQBAJ&printsec=frontcover&img=1&zoom=1&edge=curl&source=gbs_api
|
59
|
-
|
60
|
-
book.preview
|
61
|
-
#=> http://books.google.ca/books?id=i-bUBQAAQBAJ&printsec=frontcover&dq=isbn:0262033844&hl=&cd=1&source=gbs_api
|
62
|
-
|
63
|
-
|
64
|
-
book.gisbn.isbn = 9780321573513
|
65
|
-
book.fetch.title => "Algorithms"
|
66
|
+
#=> 978026203384
|
66
67
|
|
67
68
|
|
68
69
|
|
@@ -100,11 +101,12 @@ Want to contribute? Great!
|
|
100
101
|
|
101
102
|
Author
|
102
103
|
-----------
|
103
|
-
[
|
104
|
+
[J. P. Pérez-Tejada](https://mx.linkedin.com/in/juanpaulopereztejada)
|
104
105
|
|
105
|
-
|
106
|
+
Gem inspired on GISBN. Special greetings to:
|
106
107
|
-----------
|
107
108
|
[Matt Seeberger](https://github.com/thebeardedgeek)
|
109
|
+
[Eftakhairul Islam](https://eftakhairul.com)
|
108
110
|
|
109
111
|
License
|
110
112
|
----
|
data/bookshelf.dump
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
o:Alexandrite::Bookshelf:@collection_nameI"Test Bookshelf:ET:@book_collection[
|
2
|
+
I"Google API;T;I"Pedro Páramo;T;[I"Juan Rulfo;TI"Josephine Sacabo;TI"Margaret Sayers Peden;T;
|
3
|
+
@;I".Todo queda en familia (All in the Family);T;[I"Dona Herweck Rice;T;
|
4
|
+
@;I"Todo queda en familia;T;[I"Cristina Padilla Dieste;T;
|
5
|
+
@ ;0;0;
|
6
|
+
o; ;
|
7
|
+
@ ;0;0;
|
8
|
+
o; ;
|
9
|
+
@;I" Cómo llegar a ser japonés;T;[I"Ramón Illán Bacca;T;
|
10
|
+
@ ;I"#Sociedad, naturaleza y turismo;T;I"�Seminario Internacional Nuevas Alternativas del Turismo (4th : 2010 : Universidad de Guadalajara. Centro Universitario de la Costa) | Arnáiz Burne, Stella Maris [Author] | Virgen Aguilar, Carlos Rogelio [Author];T;
|
data/data.dump
ADDED
Binary file
|
data/lib/alexandrite/version.rb
CHANGED
data/lib/alexandrite.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '
|
3
|
+
require_relative 'alexandrite_book'
|
4
4
|
require_relative 'alexandrite_google'
|
5
5
|
require_relative 'alexandrite_oclc'
|
6
6
|
require_relative 'error_type/errors'
|
@@ -20,8 +20,9 @@ module Alexandrite
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# @return [Alexandrite::Book]
|
23
|
-
def self.
|
24
|
-
volume_info = get_volume_info(
|
23
|
+
def self.create_from_google(key, query)
|
24
|
+
volume_info = get_volume_info(key, query)
|
25
|
+
|
25
26
|
Alexandrite::Book.new(volume_info)
|
26
27
|
end
|
27
28
|
end
|
@@ -38,7 +39,7 @@ module Alexandrite
|
|
38
39
|
end
|
39
40
|
|
40
41
|
# @return [Alexandrite::Book]
|
41
|
-
def self.
|
42
|
+
def self.create_from_oclc(type, identifier)
|
42
43
|
query = Alexandrite::OCLC.new(type, identifier)
|
43
44
|
response_code = get_response_code(query.result)
|
44
45
|
|
@@ -56,28 +57,30 @@ module Alexandrite
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def create_book(key, query)
|
59
|
-
book = API[:google].
|
60
|
-
return API[:oclc].
|
60
|
+
book = API[:google].create_from_google(key, query)
|
61
|
+
return API[:oclc].create_from_oclc(key, query) if book.error_message
|
61
62
|
|
62
63
|
book
|
63
64
|
end
|
64
65
|
|
65
|
-
# @param
|
66
|
-
# @
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
66
|
+
# @param key [String]
|
67
|
+
# @param data [Array<String>]
|
68
|
+
# @return [Array<Alexandrite::Books]
|
69
|
+
def bulk_create(key, data)
|
70
|
+
bookshelf = []
|
71
|
+
data.each do |query|
|
72
|
+
book = create_book(key, query)
|
73
|
+
bookshelf << book
|
72
74
|
end
|
73
|
-
|
75
|
+
|
76
|
+
bookshelf
|
74
77
|
end
|
75
78
|
|
76
79
|
private
|
77
80
|
|
78
|
-
def get_volume_info(
|
79
|
-
query = search_by(
|
80
|
-
return query[:books].first[
|
81
|
+
def get_volume_info(key, query)
|
82
|
+
query = search_by(key, query)
|
83
|
+
return query[:books].first['volumeInfo'] unless query[:error_message]
|
81
84
|
|
82
85
|
query
|
83
86
|
end
|
@@ -1,15 +1,53 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'alexandrite'
|
4
|
-
require_relative '
|
4
|
+
require_relative 'alexandrite_book'
|
5
|
+
require_relative 'helpers/file_handler'
|
5
6
|
|
6
7
|
# Create, Read, Update and Delete books in a book collection
|
7
8
|
module Alexandrite
|
8
9
|
# Create a collection of books
|
9
10
|
class Bookshelf
|
10
|
-
|
11
|
-
|
11
|
+
extend Alexandrite::Helpers::FileHandler
|
12
|
+
|
13
|
+
@@library = {}
|
14
|
+
|
15
|
+
attr_accessor :book_collection
|
16
|
+
|
17
|
+
attr_reader :collection_name
|
18
|
+
|
19
|
+
def initialize(collection_name, books = nil)
|
20
|
+
@collection_name = collection_name.to_sym
|
21
|
+
@book_collection = [books]
|
22
|
+
end
|
23
|
+
|
24
|
+
def save_bookshelf(file_path)
|
25
|
+
save(file_path, self)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.add_bookshelf(file_path)
|
29
|
+
bookshelf = open(file_path)
|
30
|
+
@@library[bookshelf.collection_name.to_sym] = bookshelf if bookshelf.instance_of?(Alexandrite::Bookshelf)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.charge_library(file_path)
|
34
|
+
bookshelves = open(file_path)
|
35
|
+
@@library = bookshelves if bookshelves.all?(Alexandrite::Bookshelf)
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.save_library(file_path)
|
39
|
+
save(file_path, @@library)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.show_library
|
43
|
+
@@library
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.find_bookshelf(bookshelf_name)
|
47
|
+
query = @@library[bookshelf_name.to_sym]
|
48
|
+
return "Bookshelf wasn't found. Check collection name" if query.nil?
|
49
|
+
|
50
|
+
query
|
12
51
|
end
|
13
52
|
end
|
14
|
-
def add_book(book) = @book_collection << book if book.instance_of?(Alexandrite::Book)
|
15
53
|
end
|
data/lib/alexandrite_oclc.rb
CHANGED
@@ -50,6 +50,7 @@ module Alexandrite
|
|
50
50
|
|
51
51
|
private
|
52
52
|
|
53
|
+
# @return [Integer]
|
53
54
|
def get_response_code(result) = result.css('response').attribute('code').value.to_i
|
54
55
|
|
55
56
|
def get_owis(result, length)
|
@@ -83,6 +84,7 @@ module Alexandrite
|
|
83
84
|
|
84
85
|
def create_new_book(query)
|
85
86
|
volume_info = get_book_data(query.result)
|
87
|
+
|
86
88
|
Alexandrite::Book.new(volume_info)
|
87
89
|
end
|
88
90
|
|
@@ -94,9 +96,9 @@ module Alexandrite
|
|
94
96
|
end
|
95
97
|
|
96
98
|
def handle_error_creating_book(query)
|
97
|
-
raise ErrorType::DataNotFound, response_cases(query, 0, 'none')
|
99
|
+
raise ErrorType::DataNotFound, response_cases(query.result, 0, 'none')
|
98
100
|
rescue StandardError => e
|
99
|
-
Alexandrite::Book.new(
|
101
|
+
Alexandrite::Book.new({ :error_message => e.message, 'origin' => 'OCLC API' })
|
100
102
|
end
|
101
103
|
|
102
104
|
# @param [Nokogiri::XML] result
|
@@ -104,7 +106,7 @@ module Alexandrite
|
|
104
106
|
# @param [String] mode Possible: 'ddc' or 'lcc'
|
105
107
|
# @return [String]
|
106
108
|
def response_cases(result, length, mode)
|
107
|
-
code = get_response_code(result)
|
109
|
+
code = get_response_code(result)
|
108
110
|
case code
|
109
111
|
when 0
|
110
112
|
get_classification(result, mode)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Alexandrite
|
4
|
+
module Helpers
|
5
|
+
# Save files of books
|
6
|
+
module FileHandler
|
7
|
+
# @param [String] file_name
|
8
|
+
# @param [Array<Object>] data
|
9
|
+
def save(file_name, data)
|
10
|
+
File.open(file_name, 'w') { |f| f.write Marshal.dump(data) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def open(file_name)
|
14
|
+
file = File.open(file_name)
|
15
|
+
Marshal.load(file)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/test_library.dump
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexandrite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.1.0.pre.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J. P. Pérez-Tejada
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -152,13 +152,16 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- alexandrite.gemspec
|
155
|
+
- bookshelf.dump
|
156
|
+
- data.dump
|
155
157
|
- lib/alexandrite.rb
|
156
158
|
- lib/alexandrite/version.rb
|
157
|
-
- lib/
|
159
|
+
- lib/alexandrite_book.rb
|
158
160
|
- lib/alexandrite_bookshelf.rb
|
159
161
|
- lib/alexandrite_google.rb
|
160
162
|
- lib/alexandrite_oclc.rb
|
161
163
|
- lib/error_type/errors.rb
|
164
|
+
- lib/helpers/file_handler.rb
|
162
165
|
- lib/helpers/format.rb
|
163
166
|
- lib/helpers/validation.rb
|
164
167
|
- spec/alexandrite_spec.rb
|
@@ -166,6 +169,7 @@ files:
|
|
166
169
|
- spec/helpers/format_spec.rb
|
167
170
|
- spec/spec_helper.rb
|
168
171
|
- spec/support/vcr_setup.rb
|
172
|
+
- test_library.dump
|
169
173
|
homepage: https://github.com/maclenn77/alexandrite
|
170
174
|
licenses:
|
171
175
|
- MIT
|
@@ -181,9 +185,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
185
|
version: '3.0'
|
182
186
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
183
187
|
requirements:
|
184
|
-
- - "
|
188
|
+
- - ">"
|
185
189
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
190
|
+
version: 1.3.1
|
187
191
|
requirements: []
|
188
192
|
rubygems_version: 3.3.3
|
189
193
|
signing_key:
|