diff --git a/config/application.rb b/config/application.rb index 81e96553..aec03e85 100644 --- a/config/application.rb +++ b/config/application.rb @@ -36,6 +36,10 @@ class Application < Rails::Application Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")).sort.each do |c| Rails.configuration.cache_classes ? require(c) : load(c) end + + Dir.glob(File.join(File.dirname(__FILE__), "../lib/**/*_decorator*.rb")).sort.each do |c| + Rails.configuration.cache_classes ? require(c) : load(c) + end end # resolve reloading issue in dev mode diff --git a/lib/browse_everything/driver/s3_decorator.rb b/lib/browse_everything/driver/s3_decorator.rb new file mode 100644 index 00000000..9f73b348 --- /dev/null +++ b/lib/browse_everything/driver/s3_decorator.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# OVERRIDE BrowseEverything v1.1.2 to add file_size for S3 files + +module BrowseEverything + module Driver + module S3Decorator + def link_for(path) + obj = bucket.object(full_path(path)) + obj_head = obj.head + file_size = obj_head.content_length + + extras = { + file_name: File.basename(path), + file_size: file_size, + expires: (config[:expires_in] if config[:response_type] == :signed_url) + }.compact + + url = case config[:response_type].to_sym + when :signed_url then obj.presigned_url(:get, expires_in: config[:expires_in]) + when :public_url then obj.public_url + when :s3_uri then "s3://#{obj.bucket_name}/#{obj.key}" + end + + [url, extras] + end + end + end +end + +BrowseEverything::Driver::S3.prepend(BrowseEverything::Driver::S3Decorator)