alexandrite 0.1.1.pre.alpha → 0.1.3.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b04594e2817421efbc7843faddd9ea5b6bee3ff093d52c4328d3fa1b76680905
4
- data.tar.gz: 6ec96b26a30b7609dcdf2da25ce6ccaf38279d3fb232da07327e6699b39661ff
3
+ metadata.gz: 35890f7e1386bc1f6d60ac0d68efd032288f1b4c448e5414c4a6bde38469a262
4
+ data.tar.gz: 5b29ae9057b620bc9649889b86587a77b1ecaf9eee4549d339293657e44ff95c
5
5
  SHA512:
6
- metadata.gz: b028aba504cc9e5f14deac610c81eb1c18066b90a563f0d9486cd6f06ca4b3a1be803333417fd0c06240be1db021842d334088695d512d06ea873dbd4f126b08
7
- data.tar.gz: 66563405941ad6bd600b26466d229eb93929de988848547305322e878d3642df4da7cba555eafa3f22c055ea5c07314a85bc5028c70d352c5479a535324d8e06
6
+ metadata.gz: 4655704b09257367b07cb36ffaa6ecfc6bd5fd7991f5066791b48a351dfd39f297a517497595122f6312eff2d98c4999593a999a72d96653a6ded608e92fb39f
7
+ data.tar.gz: 5d12307befe3fee203ed3e0e5c8fe66cb8fa13e10e7b3586023062ad7be124c96f2fd174755181a20ce9290a334efc3720749dcdc1610cd8f9def5608095771b
data/Gemfile CHANGED
@@ -6,5 +6,6 @@ source 'https://rubygems.org'
6
6
  gemspec
7
7
 
8
8
  gem 'faraday'
9
+ gem 'logger'
9
10
  gem 'faraday-decode_xml'
10
11
  gem 'rubocop'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alexandrite
4
- VERSION = '0.1.1-alpha'
4
+ VERSION = '0.1.3-alpha'
5
5
  end
data/lib/alexandrite.rb CHANGED
@@ -21,9 +21,11 @@ module Alexandrite
21
21
  @result = search_with(key, query)
22
22
  end
23
23
 
24
- # @return [Alexandrite::BookData]
24
+ # @return [nil]
25
25
  def self.create_from_google(key, query)
26
26
  Alexandrite::BookData.create_data(get_volume_info(key, query))
27
+ rescue StandardError => e
28
+ Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'Google API' })
27
29
  end
28
30
  end
29
31
 
@@ -58,8 +60,14 @@ module Alexandrite
58
60
  end
59
61
 
60
62
  def create_book(key, query)
63
+ log = Logger.new(STDOUT)
64
+ log.info "Fetching book info from Google API. Key: #{key}. Query: #{query}"
61
65
  book = API[:google].create_from_google(key, query)
62
- return API[:oclc].create_from_oclc(key, query) if book[:error_message]
66
+ if book[:error_message]
67
+ log.warn "Failing when fetching book info. Error message: #{book[:error_message]}"
68
+ log.info "Fetching book info from OCLC API. Key: #{key}. Query: #{query}"
69
+ return API[:oclc].create_from_oclc(key, query)
70
+ end
63
71
 
64
72
  book
65
73
  end
@@ -69,8 +77,10 @@ module Alexandrite
69
77
  # @return [Array<Alexandrite::BookData]
70
78
  def bulk_create(key, data)
71
79
  bookshelf = []
80
+ log = Logger.new(STDOUT)
72
81
  data.each do |query|
73
82
  book = create_book(key, query)
83
+ log.info "Book created. Key #{key}. Query: #{query}. Source: #{book[:data_source]}"
74
84
  bookshelf << book
75
85
  end
76
86
 
@@ -45,12 +45,14 @@ module Alexandrite
45
45
  data[:isbn13] = volume_info['ISBN_13']
46
46
  return data
47
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'
48
+ begin
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
+ rescue NoMethodError
54
+ data
52
55
  end
53
-
54
56
  data
55
57
  end
56
58
  end
@@ -31,28 +31,37 @@ module Alexandrite
31
31
  Nokogiri::XML(conn.get(search).body)
32
32
  end
33
33
 
34
+ def extract_value(attribute)
35
+ return nil unless attribute.respond_to?(:value)
36
+
37
+ attribute.value
38
+ end
39
+
40
+ def extract_nokogiri_data(document, children, attribute)
41
+ extract_value(document.css(children).attribute(attribute))
42
+ end
43
+
34
44
  def get_book_data(result)
35
45
  isbn = result.css('input').children.text
36
46
  isbn_type = define_isbn_type(isbn)
37
47
  {
38
48
  'origin' => 'OCLC API',
39
- 'title' => result.css('work').attribute('title').value,
40
- 'authors' => result.css('work').attribute('author').value,
41
- 'ddc' => result.css('mostPopular').attribute('nsfa').value,
49
+ 'title' => extract_nokogiri_data(result, 'work', 'title'),
50
+ 'authors' => extract_nokogiri_data(result, 'work', 'author'),
51
+ 'ddc' => extract_nokogiri_data(result, 'mostPopular', 'nsfa'),
42
52
  isbn_type => isbn
43
53
  }
44
54
  end
45
55
 
46
56
  def recommend_classification(key, query, length = 5, mode: 'ddc')
47
57
  results = search_by(key, query)
48
-
49
58
  response_cases(results, length, mode)
50
59
  end
51
60
 
52
61
  private
53
62
 
54
63
  # @return [Integer]
55
- def get_response_code(result) = result.css('response').attribute('code').value.to_i
64
+ def get_response_code(result) = extract_nokogiri_data(result, 'response', 'code').to_i
56
65
 
57
66
  def get_owis(result, length)
58
67
  owis = []
@@ -85,17 +94,12 @@ module Alexandrite
85
94
 
86
95
  def create_new_book(query)
87
96
  Alexandrite::BookData.create_data(get_book_data(query.result))
97
+ rescue StandardError => e
98
+ Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'OCLC API' })
88
99
  end
89
100
 
90
- def retry_create_new_book(query)
91
- owi = get_owis(query.result, 1)[0]
92
- new_query = Alexandrite::OCLC.new('owi', owi)
93
- volume_info = get_book_data(new_query.result)
94
- Alexandrite::BookData.create_data(volume_info)
95
- end
96
-
97
- def handle_error_creating_book(query)
98
- raise ErrorType::DataNotFound, response_cases(query.result, 0, 'none')
101
+ def handle_error_creating_book
102
+ raise ErrorType::DataNotFound, yield
99
103
  rescue StandardError => e
100
104
  Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'OCLC API' })
101
105
  end
@@ -129,9 +133,9 @@ module Alexandrite
129
133
  when 0, 2
130
134
  create_new_book(query)
131
135
  when 4
132
- retry_create_new_book(query)
136
+ handle_error_creating_book { 'Not found exact item. Check coincidences' }
133
137
  else
134
- handle_error_creating_book(query)
138
+ handle_error_creating_book { response_cases(query.result, 0, 'none') }
135
139
  end
136
140
  end
137
141
  end
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.1.1.pre.alpha
4
+ version: 0.1.3.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-22 00:00:00.000000000 Z
11
+ date: 2023-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -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.7
192
+ rubygems_version: 3.4.6
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: Tools for fetching books data from Google and OCLC