alexandrite 0.1.0.pre.alpha → 0.1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: daf4377dc5fb6c1b1b122236cdd76e760863a575bd6e1bd177d20d98aab92508
4
- data.tar.gz: ce9bfcf98c1142b5e539b52189962779c2286705a9c361ba3da7bfa76b80ac81
3
+ metadata.gz: b04594e2817421efbc7843faddd9ea5b6bee3ff093d52c4328d3fa1b76680905
4
+ data.tar.gz: 6ec96b26a30b7609dcdf2da25ce6ccaf38279d3fb232da07327e6699b39661ff
5
5
  SHA512:
6
- metadata.gz: 370748c92b5a9db2b9942fa8b8d779a2324a3a3c95c3114059d708346ff4ef6ee3afa8405a6f5aee58312bfef674e93b14b120d0ed4ef5a6c1cfdbaa4c55bc92
7
- data.tar.gz: b04df9e530984ad698e71ea0057a60911480ad5c423d83ecea46413b8eea13af96e7db0fae3cb7d6c96e538b7d50e4457bd63ca04d6176ac5e8282f18f221a31
6
+ metadata.gz: b028aba504cc9e5f14deac610c81eb1c18066b90a563f0d9486cd6f06ca4b3a1be803333417fd0c06240be1db021842d334088695d512d06ea873dbd4f126b08
7
+ data.tar.gz: 66563405941ad6bd600b26466d229eb93929de988848547305322e878d3642df4da7cba555eafa3f22c055ea5c07314a85bc5028c70d352c5479a535324d8e06
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alexandrite
4
- VERSION = '0.1.0-alpha'
4
+ VERSION = '0.1.1-alpha'
5
5
  end
data/lib/alexandrite.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'alexandrite_book'
3
+ require_relative 'alexandrite_book_data'
4
4
  require_relative 'alexandrite_google'
5
5
  require_relative 'alexandrite_oclc'
6
6
  require_relative 'error_type/errors'
@@ -8,37 +8,38 @@ require_relative 'error_type/errors'
8
8
  # Main gem methods for creating books from ISBN
9
9
  module Alexandrite
10
10
  include ErrorType
11
+ include Alexandrite::BookData
11
12
 
12
13
  # Get and Process data from Google API
13
14
  class Google
15
+ include Alexandrite
14
16
  extend Alexandrite::GoogleAPI
15
17
 
16
18
  attr_reader :result
17
19
 
18
20
  def initialize(key, query)
19
- @result = search_by(key, query)
21
+ @result = search_with(key, query)
20
22
  end
21
23
 
22
- # @return [Alexandrite::Book]
24
+ # @return [Alexandrite::BookData]
23
25
  def self.create_from_google(key, query)
24
- volume_info = get_volume_info(key, query)
25
-
26
- Alexandrite::Book.new(volume_info)
26
+ Alexandrite::BookData.create_data(get_volume_info(key, query))
27
27
  end
28
28
  end
29
29
 
30
30
  # Get and Process data from OCLC API
31
31
  class OCLC
32
+ include Alexandrite
32
33
  extend Alexandrite::OCLCAPI
33
34
 
34
35
  attr_reader :result
35
36
 
36
37
  # return [Alexandrite::OCLC]
37
38
  def initialize(key, query, api: :oclc)
38
- @result = search_by(key, query, api: api)
39
+ @result = search_with(key, query, api: api)
39
40
  end
40
41
 
41
- # @return [Alexandrite::Book]
42
+ # @return [Alexandrite::BookData]
42
43
  def self.create_from_oclc(type, identifier)
43
44
  query = Alexandrite::OCLC.new(type, identifier)
44
45
  response_code = get_response_code(query.result)
@@ -52,20 +53,20 @@ module Alexandrite
52
53
  oclc: Alexandrite::OCLC
53
54
  }.freeze
54
55
 
55
- def search_by(key, query, api: :google)
56
+ def search_with(key, query, api: :google)
56
57
  API[api].search_by(key, query)
57
58
  end
58
59
 
59
60
  def create_book(key, query)
60
61
  book = API[:google].create_from_google(key, query)
61
- return API[:oclc].create_from_oclc(key, query) if book.error_message
62
+ return API[:oclc].create_from_oclc(key, query) if book[:error_message]
62
63
 
63
64
  book
64
65
  end
65
66
 
66
67
  # @param key [String]
67
68
  # @param data [Array<String>]
68
- # @return [Array<Alexandrite::Books]
69
+ # @return [Array<Alexandrite::BookData]
69
70
  def bulk_create(key, data)
70
71
  bookshelf = []
71
72
  data.each do |query|
@@ -75,13 +76,4 @@ module Alexandrite
75
76
 
76
77
  bookshelf
77
78
  end
78
-
79
- private
80
-
81
- def get_volume_info(key, query)
82
- query = search_by(key, query)
83
- return query[:books].first['volumeInfo'] unless query[:error_message]
84
-
85
- query
86
- end
87
79
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'alexandrite'
4
+ require 'nokogiri'
5
+
6
+ module Alexandrite
7
+ # Create a book objects
8
+ module BookData
9
+ # @param volume_info [Hash]
10
+ # @return [Hash]
11
+ def self.create_data(volume_info)
12
+ data = add_basic_values(volume_info)
13
+ data[:data_source] = add_origin(volume_info)
14
+ data = add_industry_identifiers(volume_info, data)
15
+ data[:error_message] = volume_info[:error_message]
16
+
17
+ data
18
+ end
19
+
20
+ def self.add_basic_values(volume_info)
21
+ {
22
+ title: volume_info['title'],
23
+ authors: volume_info['authors'],
24
+ published_date: volume_info['publisher'],
25
+ page_count: volume_info['pageCount'],
26
+ description: volume_info['description'],
27
+ categories: volume_info['categories'],
28
+ language: volume_info['language']
29
+
30
+ }
31
+ end
32
+
33
+ # @param [Hash] volume_info
34
+ # @return [String]
35
+ def self.add_origin(volume_info) = volume_info['origin'] || 'Google API'
36
+
37
+ # @param [Hash] volume_info
38
+ # @param [Hash] data
39
+ # @return [NilClass]
40
+ def self.add_industry_identifiers(volume_info, data)
41
+ return data unless volume_info[:error_message].nil?
42
+
43
+ if data[:data_source] == 'OCLC API'
44
+ data[:isbn10] = volume_info['ISBN_10']
45
+ data[:isbn13] = volume_info['ISBN_13']
46
+ return data
47
+ end
48
+
49
+ volume_info['industryIdentifiers'].each do |identifier|
50
+ data[:isbn10] = identifier['identifier'] if identifier['type'] == 'ISBN_10'
51
+ data[:isbn13] = identifier['identifier'] if identifier['type'] == 'ISBN_13'
52
+ end
53
+
54
+ data
55
+ end
56
+ end
57
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'alexandrite'
4
- require_relative 'alexandrite_book'
4
+ require_relative 'alexandrite_book_data'
5
5
  require_relative 'helpers/file_handler'
6
6
 
7
7
  # Create, Read, Update and Delete books in a book collection
@@ -62,6 +62,13 @@ module Alexandrite
62
62
 
63
63
  private
64
64
 
65
+ def get_volume_info(key, query)
66
+ query = search_by(key, query)
67
+ return query[:books].first['volumeInfo'] unless query[:error_message]
68
+
69
+ query
70
+ end
71
+
65
72
  def zero_results?(response_body) = response_body['totalItems'].zero?
66
73
 
67
74
  def process_response(response)
@@ -17,6 +17,7 @@ module Alexandrite
17
17
  include Nokogiri
18
18
  include Alexandrite::Helpers::Format
19
19
  include Alexandrite::Helpers::Validation
20
+ include Alexandrite::BookData
20
21
 
21
22
  BASE_URL = 'http://classify.oclc.org/classify2/Classify?'
22
23
 
@@ -83,22 +84,20 @@ module Alexandrite
83
84
  end
84
85
 
85
86
  def create_new_book(query)
86
- volume_info = get_book_data(query.result)
87
-
88
- Alexandrite::Book.new(volume_info)
87
+ Alexandrite::BookData.create_data(get_book_data(query.result))
89
88
  end
90
89
 
91
90
  def retry_create_new_book(query)
92
91
  owi = get_owis(query.result, 1)[0]
93
92
  new_query = Alexandrite::OCLC.new('owi', owi)
94
93
  volume_info = get_book_data(new_query.result)
95
- Alexandrite::Book.new(volume_info)
94
+ Alexandrite::BookData.create_data(volume_info)
96
95
  end
97
96
 
98
97
  def handle_error_creating_book(query)
99
98
  raise ErrorType::DataNotFound, response_cases(query.result, 0, 'none')
100
99
  rescue StandardError => e
101
- Alexandrite::Book.new({ :error_message => e.message, 'origin' => 'OCLC API' })
100
+ Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'OCLC API' })
102
101
  end
103
102
 
104
103
  # @param [Nokogiri::XML] result
@@ -16,4 +16,4 @@ module Alexandrite
16
16
  end
17
17
  end
18
18
  end
19
- end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alexandrite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.alpha
4
+ version: 0.1.1.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - J. P. Pérez-Tejada
@@ -156,7 +156,7 @@ files:
156
156
  - data.dump
157
157
  - lib/alexandrite.rb
158
158
  - lib/alexandrite/version.rb
159
- - lib/alexandrite_book.rb
159
+ - lib/alexandrite_book_data.rb
160
160
  - lib/alexandrite_bookshelf.rb
161
161
  - lib/alexandrite_google.rb
162
162
  - lib/alexandrite_oclc.rb
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
189
  - !ruby/object:Gem::Version
190
190
  version: 1.3.1
191
191
  requirements: []
192
- rubygems_version: 3.3.3
192
+ rubygems_version: 3.3.7
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: Tools for fetching books data from Google and OCLC
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'alexandrite'
4
- require 'nokogiri'
5
-
6
- module Alexandrite
7
- # Create a book objects
8
- class Book
9
- attr_accessor :title, :authors, :publisher, :published_date, :page_count, :description, :categories, :language,
10
- :country, :isbn10, :isbn13, :error_message, :ddc, :lcc, :suggested_classifications
11
-
12
- # @param volume_info [Hash]
13
- # @return [Alexandrite::Books]
14
- def initialize(volume_info)
15
- add_origin(volume_info)
16
- add_basic_values(volume_info)
17
- add_industry_identifiers(volume_info, @origin)
18
- @error_message = volume_info[:error_message]
19
- end
20
-
21
- def self.collection = @@collection
22
-
23
- def self.add_to_collection(book)
24
- @@collection.push(book)
25
- end
26
-
27
- # @param [String] ddc_code
28
- # @return [NilClass]
29
- def add_ddc(ddc_code) = @ddc = ddc_code
30
-
31
- # @param [String] lcc_code
32
- # @return [NilClass]
33
- def add_lcc(lcc_code) = @lcc = lcc_code
34
-
35
- # @param [Array<String>] suggestions
36
- # @return [NilClass]
37
- def add_classification_suggested(suggestions) = @suggested_classifications = suggestions
38
-
39
- private
40
-
41
- def add_basic_values(volume_info)
42
- @title = volume_info['title']
43
- @authors = volume_info['authors']
44
- @publisher = volume_info['publisher']
45
- @published_date = volume_info['publishedDate']
46
- @page_count = volume_info['pageCount']
47
- @description = volume_info['description']
48
- @categories = volume_info['categories']
49
- @language = volume_info['language']
50
- end
51
-
52
- # @param [Hash] volume_info
53
- # @return [String]
54
- def add_origin(volume_info) = @origin = volume_info['origin'] || 'Google API'
55
-
56
- # @param [Hash] volume_info
57
- # @param [String] origin
58
- # @return [NilClass]
59
- def add_industry_identifiers(volume_info, origin)
60
- return nil unless volume_info[:error_message].nil?
61
-
62
- if origin == 'OCLC API'
63
- @isbn10 = volume_info['ISBN_10']
64
- @isbn13 = volume_info['ISBN_13']
65
- return
66
- end
67
-
68
- volume_info['industryIdentifiers'].each do |identifier|
69
- @isbn10 = identifier['identifier'] if identifier['type'] == 'ISBN_10'
70
- @isbn13 = identifier['identifier'] if identifier['type'] == 'ISBN_13'
71
- end
72
- end
73
- end
74
- end