aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2017-07-04 17:34:37 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2017-07-04 17:34:37 +0200
commit7409bb2ff8e20f9036842a68f34e215cefdd98d9 (patch)
tree8788f9d2d89c519a71e837191e0172b02e274ffd
parent9b9d69b34ea77ee62bd0ef1846767db9f795c301 (diff)
downloadrails-7409bb2ff8e20f9036842a68f34e215cefdd98d9.tar.gz
rails-7409bb2ff8e20f9036842a68f34e215cefdd98d9.tar.bz2
rails-7409bb2ff8e20f9036842a68f34e215cefdd98d9.zip
Actually #url needs to deal with the disposition
-rw-r--r--lib/active_file/blob.rb4
-rw-r--r--lib/active_file/site.rb2
-rw-r--r--lib/active_file/site/disk_site.rb6
-rw-r--r--lib/active_file/site/s3_site.rb5
-rw-r--r--test/blob_test.rb10
5 files changed, 17 insertions, 10 deletions
diff --git a/lib/active_file/blob.rb b/lib/active_file/blob.rb
index bf34aac794..8a1950c9dc 100644
--- a/lib/active_file/blob.rb
+++ b/lib/active_file/blob.rb
@@ -33,8 +33,8 @@ class ActiveFile::Blob < ActiveRecord::Base
ActiveFile::Filename.new(self[:filename])
end
- def url(expires_in: 5.minutes)
- site.url key, expires_in: expires_in
+ def url(expires_in: 5.minutes, disposition: :inline)
+ site.url key, expires_in: expires_in, disposition: disposition, filename: filename
end
diff --git a/lib/active_file/site.rb b/lib/active_file/site.rb
index fc098e694f..1c71f74f0d 100644
--- a/lib/active_file/site.rb
+++ b/lib/active_file/site.rb
@@ -27,7 +27,7 @@ class ActiveFile::Site
end
- def url(key, expires_in: nil)
+ def url(key, expires_in:, disposition:, filename:)
raise NotImplementedError
end
diff --git a/lib/active_file/site/disk_site.rb b/lib/active_file/site/disk_site.rb
index 3a98971274..ec60175bbf 100644
--- a/lib/active_file/site/disk_site.rb
+++ b/lib/active_file/site/disk_site.rb
@@ -37,13 +37,13 @@ class ActiveFile::Site::DiskSite < ActiveFile::Site
end
- def url(key, expires_in: nil)
+ def url(key, expires_in:, disposition:, filename:)
verified_key_with_expiration = ActiveFile::VerifiedKeyWithExpiration.encode(key, expires_in: expires_in)
if defined?(Rails)
- Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration)
+ Rails.application.routes.url_helpers.rails_disk_blob_path(verified_key_with_expiration, disposition: disposition)
else
- "/rails/blobs/#{verified_key_with_expiration}"
+ "/rails/blobs/#{verified_key_with_expiration}?disposition=#{disposition}"
end
end
diff --git a/lib/active_file/site/s3_site.rb b/lib/active_file/site/s3_site.rb
index e407f84861..cfd2ddcc9a 100644
--- a/lib/active_file/site/s3_site.rb
+++ b/lib/active_file/site/s3_site.rb
@@ -29,8 +29,9 @@ class ActiveFile::Site::S3Site < ActiveFile::Site
end
- def url(key, expires_in: nil)
- object_for(key).presigned_url(:get, expires_in: expires_in)
+ def url(key, expires_in:, disposition:, filename:)
+ object_for(key).presigned_url :get, expires_in: expires_in,
+ response_content_disposition: "#{disposition}; filename=#{filename}"
end
def byte_size(key)
diff --git a/test/blob_test.rb b/test/blob_test.rb
index c726555dc6..45f6b5e3ba 100644
--- a/test/blob_test.rb
+++ b/test/blob_test.rb
@@ -12,16 +12,22 @@ class ActiveFile::BlobTest < ActiveSupport::TestCase
assert_equal Digest::MD5.hexdigest(data), blob.checksum
end
- test "url expiring in 5 minutes" do
+ test "urls expiring in 5 minutes" do
blob = create_blob
travel_to Time.now do
- assert_equal "/rails/blobs/#{ActiveFile::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}", blob.url
+ assert_equal expected_url_for(blob), blob.url
+ assert_equal expected_url_for(blob, disposition: :attachment), blob.url(disposition: :attachment)
end
end
+
private
def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain")
ActiveFile::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type
end
+
+ def expected_url_for(blob, disposition: :inline)
+ "/rails/blobs/#{ActiveFile::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}?disposition=#{disposition}"
+ end
end