Browse Source

Extract methods into a service

pull/2671/head
Kat 2 years ago
parent
commit
bcee73f11b
  1. 18
      app/controllers/start_controller.rb
  2. 13
      app/helpers/collection_resources_helper.rb
  3. 33
      app/services/collection_resources_service.rb

18
app/controllers/start_controller.rb

@ -66,20 +66,10 @@ class StartController < ApplicationController
private
def download_resource(file, filename)
storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"])
url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new(uri)
http.request(request)
end
def download_resource(filename, download_filename)
file = CollectionResourcesService.new.get_file(filename)
render_not_found unless file
if response.is_a?(Net::HTTPSuccess)
send_data(response.body, disposition: "attachment", filename:)
else
render_not_found
end
send_data(file, disposition: "attachment", filename: download_filename)
end
end

13
app/helpers/collection_resources_helper.rb

@ -11,17 +11,12 @@ module CollectionResourcesHelper
def file_type_size_and_pages(file, number_of_pages: nil)
file_pages = number_of_pages ? pluralize(number_of_pages, "page") : nil
storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"])
url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
metadata = CollectionResourcesService.new.get_file_metadata(file)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request_head(uri)
end
return [file_pages].compact.join(", ") unless response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection)
return [file_pages].compact.join(", ") unless metadata
file_size = number_to_human_size(response["Content-Length"].to_i)
file_type = HUMAN_READABLE_CONTENT_TYPE[response["Content-Type"].to_sym] || "Unknown File Type"
file_size = number_to_human_size(metadata["Content-Length"].to_i)
file_type = HUMAN_READABLE_CONTENT_TYPE[metadata["Content-Type"].to_sym] || "Unknown File Type"
[file_type, file_size, file_pages].compact.join(", ")
end
end

33
app/services/collection_resources_service.rb

@ -0,0 +1,33 @@
class CollectionResourcesService
def initialize
@storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"])
end
def get_file(file)
storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"])
url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
request = Net::HTTP::Get.new(uri)
http.request(request)
end
return unless response.is_a?(Net::HTTPSuccess)
response.body
end
def get_file_metadata(file)
storage_service = Storage::S3Service.new(Configuration::EnvConfigurationService.new, ENV["COLLECTION_RESOURCES_BUCKET"])
url = "https://#{storage_service.configuration.bucket_name}.s3.amazonaws.com/#{file}"
uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request_head(uri)
end
return unless response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection)
response
end
end
Loading…
Cancel
Save