Skip to content

Commit

Permalink
chore(books_controller): cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
guidojw committed Nov 6, 2023
1 parent 1ba149b commit 5e8eae3
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 106 deletions.
29 changes: 14 additions & 15 deletions app/controllers/v1/books_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,24 @@ def isbn_lookup # rubocop:disable Metrics/AbcSize, Metrics/MethodLength

isbn = params.require(:isbn)

product = get_product(isbn)
return head :not_found if product.nil?

title = ActionView::Base.full_sanitizer.sanitize(product['volumeInfo']['title'])
author = ActionView::Base.full_sanitizer.sanitize(product['volumeInfo']['authors'].join(', '))
description = ActionView::Base.full_sanitizer.sanitize(product['volumeInfo']['description'])
cover_photo = get_cover_photo(product['id'])
volume = get_volume(isbn)
return head :not_found if volume.nil?

info = volume['volumeInfo']
title = ActionView::Base.full_sanitizer.sanitize(info['title'])
author = ActionView::Base.full_sanitizer.sanitize(info['authors'].to_sentence)
description = ActionView::Base.full_sanitizer.sanitize(info['description'])
cover_photo = get_cover_photo(volume['id'])
data = { title: title, author: author, description: description, isbn: isbn,
cover_photo: cover_photo }
render json: data
end

private

def get_product(query)
def get_volume(isbn)
api_key = Rails.application.config.x.google_api_key
url = "https://www.googleapis.com/books/v1/volumes?q=isbn:#{query}&maxResults=1&projection=lite&key=#{api_key}"
url = "https://www.googleapis.com/books/v1/volumes?q=isbn:#{isbn}&maxResults=1&projection=lite&key=#{api_key}"
result = HTTP.get(url).parse
return nil if result['items'].blank?

Expand All @@ -33,17 +34,15 @@ def cover_photo_sizes
%i[extra_large large medium small thumbnail small_thumbnail]
end

def get_cover_photo(product_id) # rubocop:disable Metrics/AbcSize
def get_cover_photo(volume_id) # rubocop:disable Metrics/AbcSize
api_key = Rails.application.config.x.google_api_key
url = "https://www.googleapis.com/books/v1/volumes/#{product_id}?fields=volumeInfo(imageLinks)&key=#{api_key}"
url = "https://www.googleapis.com/books/v1/volumes/#{volume_id}?fields=volumeInfo(imageLinks)&key=#{api_key}"
result = HTTP.get(url).parse
image_links = result['volumeInfo']['imageLinks']
image_links = result.dig('volumeInfo', 'imageLinks')
return nil unless image_links

camelized_sizes = cover_photo_sizes.map { |val| val.to_s.camelize(:lower) }
camelized_sizes = cover_photo_sizes.map { |v| v.to_s.camelize(:lower) }
size = (camelized_sizes & image_links.keys).first
return nil unless size

result = HTTP.get(image_links[size])
"data:#{result.content_type.mime_type};base64,#{Base64.strict_encode64(result.to_s)}"
end
Expand Down
2 changes: 1 addition & 1 deletion config/credentials.yml.enc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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--CK5Wmw8s3zIyo8ez--RTnVi2ZcJzoKQiELfFhz6Q==
mmqv0PWHmGgqeoBEsj7A9U24mjevp5BZ7NsBGSkcy0dq/tQKpEYWs9XnW/SwjQMad6uT4AeWPUO1rZT8x98BxuAR7T0lRQdy68UXkuvyiGNwEhkn3Raa44H145tODn1FkGY1x5f7R4cTxUOBVq61TkUsaVmEioY/eIlZuPltLBOA4qkIhLlkAUZV34a4mdnJQuZgp9fhxCA8ZriKoZYX3d6ofJtIiOglaQSPmgHDq+vWR9FvD9pRf8fPFPx23WD3P9HKxJ4AaiavSsxKbmvj074Guzy2AnI3nr8B4R5uDi6GEjqlFYo9JmVnYx4YLIsr92xpakmQ5ECewlxVMfu/E+bMqS6ClVcPz1HFXrphbuaIK5oz//HYPXgzWq/bXEtTQNYfuP/fybgVVuO7S3pWwJ0UXyx2z5GWIJOnPBrH8kI0AdFeo/ixe1Ijkp8sJtiy4ciMtujrwRZNSVmIEvUXFRatpGMR6NezD3AfPYHh9kkrEJMs0p5Un4P51nJCDA2vKTLRoQmG5CypGGW/YGQCEet+hB6U8JFQ+8CIC4UaHeWN+zfFhBeW6zYTDR9JiXOnIlZtXmMdGlavKjaYRjOaW3dTHf4e/PqYRgFgGT8kLZov14weAjtUCS5nC5IR3p+VOxXbBiMvumh6uursr1CXVBDAclfMED1L+8is1UoYdltoytoNfiT2ab8dixAXiskzE8Rv7k32kSvi0gN0Gr4YiQj8G4Xx4sYbJyqHH2OJVKQg7dQ0h/6QfLase6qMtGkPwwlr8xzxqxS60vny/vtAeHk7ZEvmni8vfW56bBijNGrRD0koYZ/P/dwgIyYNijWDjYi9unCpcAz4o0QU/kxcjKhJHUc2ganROm5QvD2A8zNgJtf+4XBeue7C1mxn1Q7SnPizohag7Kuy6OLvdWpN2IkfBE8XiHtAbfYOra0jhxk7OPz4plD4GazWjf8MJ5lIQPq+Lt282YWic7VlYpfuCxOo2Es+1gWjy/pDxA0/RS+yCb8xFBwqrWTlv2afwY7fp6bPJXNGO9J8hAkhTAfN2ksQzKw1XWEYVVQ8/X5/VCdZCl8Jmpw9U3vUygJsOgjrcMvDkjPCRBK+WuWdFifp8q9Nqp+rMTl222UXOCClmeJQiODzllaMepsHnCqZ1inRq6LYoNw6aHm7AyWX0Q0zGN6tsnV58qEBvq6b2b2B5KVfj7NFQ2nXn/qvxP4vY2AhU08Q8Ebc4w94GELXl7rJmN74fJF5f4iga9j1DtUDZd8AhRfTHg6orr4UsjtibuhVpzOiX77i+Hb8HWA4kPzd7gUb+/JhUadYJ4P1treXbS2DXwNRCQFv2O2gs0dOBu6BDd5RyuTaFl+KZo2xESlK4v2kzyiq977F+wbOzn61EwKcQsb/jX1tdSL51eFWMFztKJo1ykBvskkUytN+jiFhwFEdIDkHFnhE3nX18udF+fY82aEgqUGTYbyXwXfdshX84v0NMz0pKT0olvC5ZJUTbggTqTsu4wyy7n16Hr/9Bvq/1pPpDsndOryFBsbGcWQODi6GFbGUP2u8F9YywlVFbG4y9GuiGUI2OSxlm2riMERoJaj1eimiJSstcrNzRXDkf76xe+0jXJ3TeqHDxRsC/uOlZvSU8gsS0QxnbSqO5H+8OO26wozYKRN5gr7NC1Vibw+ZfTxr6aYlPJ7EY06hh7anTTOI+cqu/xRz5jZZnF2cqdH02h6IjgxF3qzazPQa3o1m/0xckaeQfI8VnHMgQJytqnDUIUMchNlgalPI7BoAECSdgym5gNw9DYt7TeNiMqzwwoOptUTLbmlIeZWoPIzZuNLJxv1NeUz9Qzg4HYxfJuV6OnZhZdHCJ60PFpkfn9C01Ccl5qzJye4PyQdcaKl7D6/oiCZI57OpROKyqSzXJ/dw5jDGtW2YTKQY9O9Gs6HQxKn1eEqbnSrRUJkYFnJ9jPgkdPwwWuwVs1xWIJRbu9B7/PpEkkmEC98Bq7tN6mRFZ0iOWvSANRdEsxzV0nDU0wZS0lrrxInfhvnMi+I3R6eh6rri7Dxyf6jEW/j31BS8fgaeyRRuqCKBwozakZbR6X9r05kypvGTbh3UvjiNDWQhBUoYo5wBXt3jdEhUeTX8BOer3nJuXwptJMWsN/6gEziJhaPUhNg9PynPYKeHJb0gTzx1vHjnueObqmLnAwGHI4e2mTDw+2eUwVdt+p5p/tg+Aj6jTTOXc5XlfRLEhLfKaJiGb+ylvGg2pohg9rIEMbmFuVXb6krpbBrgZG3gprl31hbfYkAfup3e8ShJyfagpR0Pushxrdyou6XgRbWytXn1nEEDj2vvQTgt0OZkuDLc2gFC5H0Ok245/jl7sUtcpwILWW5j9mGSVFwIVAzPBcAf4iy++H3qphE3VKOaEqSH265MRaa8IYncjKOC8DKvTPwTfFGlFFrICKyGcgV0MrR3sSDZLlffsBGa4tI4oyX+M+79jozXpJ3kd4+z0nz0gBV0amssJRXCeC5s3qub6Jr7qdSP7PgFxAm5sSyNOsJr8P3bLusTtBYA97JmHIKqXn4JLz1gnRYQS7XrjquaarAFbSGMU7+bySnX0IUwbQ/6o2J7uz4T8czm+w4/gCN04z0osKCtY9lIq7eg9Ve+xyJkeBRoW6Nn5CdPcwHZwSUzcuGKg+nhPcU39kyVc93KcN48mTdkD8Qh3djZpoNECjNUkouLXpxqLmC6dWTeWQGK/MuOQSG9Yk14gWOzXa43BrO4OeE5HJfz3GLUVrA54hmY6TxO8gGvI3hCqO8e5kiBGppgOLVpyVFh28PWfoCKw3fj5cLgtEyZMRRMbh8sLOFQv11hhE2+Wip0ScwAdofkdpX0p4y90ZODKHX0LYPOwxItmzRAMTdgRuDrFqJQ+XqkpKo9kLsBjP2mXp9c8UkSjnHj0YSigaVe0bvgkKuSNk3vqRcfgIkXHHAw4jJCjB22xlp1v/2lsfYQRrhsKP6YSult12ALCwhl2NvgyhDS5rfVWEr3A5tueVMCCPLdjaVvBvqg4phqaa/57s9I3MoIe6d0bMWo9fmB/7+ajalKrvaJv1lMAlM9OSMWkDHHqw==--9gbBEsRvAgEatE/J--dMHKboMxI2U11ThEU7SzlA==
2 changes: 1 addition & 1 deletion spec/requests/v1/books_controller/index_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
let(:record_permission) { 'book.create' }
let(:request) do
VCR.use_cassette('retrieve_book_by_isbn') do
get "#{record_url}?isbn=9789065394309"
get "#{record_url}?isbn=9781784870140"
end
end

Expand Down
242 changes: 153 additions & 89 deletions spec/vcr_cassettes/retrieve_book_by_isbn.yml

Large diffs are not rendered by default.

0 comments on commit 5e8eae3

Please sign in to comment.