From 0f302b897022b68793e102efa90a2819ff4e107a Mon Sep 17 00:00:00 2001
From: Kasper Timm Hansen <kaspth@gmail.com>
Date: Sat, 3 Mar 2018 21:36:43 +0100
Subject: Merge Previews/Variants controller into one Representations
 controller.

Since ActiveStorage::Blob::Representable unifies the idea of previews and
variants under one roof as representation, we may as well have the
controllers follow suit.

Thus ActiveStorage::RepresenationsController enters the fray. I've copied
the old tests for both previews and variants and unified those as well.
---
 .../active_storage/previews_controller.rb          | 10 ----
 .../active_storage/representations_controller.rb   | 14 +++++
 .../active_storage/variants_controller.rb          | 14 -----
 .../models/active_storage/blob/representable.rb    |  4 +-
 activestorage/config/routes.rb                     | 28 +++-------
 .../test/controllers/previews_controller_test.rb   | 33 ------------
 .../controllers/representations_controller_test.rb | 61 ++++++++++++++++++++++
 .../test/controllers/variants_controller_test.rb   | 32 ------------
 8 files changed, 85 insertions(+), 111 deletions(-)
 delete mode 100644 activestorage/app/controllers/active_storage/previews_controller.rb
 create mode 100644 activestorage/app/controllers/active_storage/representations_controller.rb
 delete mode 100644 activestorage/app/controllers/active_storage/variants_controller.rb
 delete mode 100644 activestorage/test/controllers/previews_controller_test.rb
 create mode 100644 activestorage/test/controllers/representations_controller_test.rb
 delete mode 100644 activestorage/test/controllers/variants_controller_test.rb

(limited to 'activestorage')

diff --git a/activestorage/app/controllers/active_storage/previews_controller.rb b/activestorage/app/controllers/active_storage/previews_controller.rb
deleted file mode 100644
index aa7ef58ca4..0000000000
--- a/activestorage/app/controllers/active_storage/previews_controller.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-class ActiveStorage::PreviewsController < ActionController::Base
-  include ActiveStorage::SetBlob
-
-  def show
-    expires_in ActiveStorage::Blob.service.url_expires_in
-    redirect_to ActiveStorage::Preview.new(@blob, params[:variation_key]).processed.service_url(disposition: params[:disposition])
-  end
-end
diff --git a/activestorage/app/controllers/active_storage/representations_controller.rb b/activestorage/app/controllers/active_storage/representations_controller.rb
new file mode 100644
index 0000000000..e0e944dc9c
--- /dev/null
+++ b/activestorage/app/controllers/active_storage/representations_controller.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+# Take a signed permanent reference for a blob representation and turn it into an expiring service URL for download.
+# Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
+# security-through-obscurity factor of the signed blob and variation reference, you'll need to implement your own
+# authenticated redirection controller.
+class ActiveStorage::RepresentationsController < ActionController::Base
+  include ActiveStorage::SetBlob
+
+  def show
+    expires_in ActiveStorage::Blob.service.url_expires_in
+    redirect_to @blob.representation(params[:variation_key]).processed.service_url(disposition: params[:disposition])
+  end
+end
diff --git a/activestorage/app/controllers/active_storage/variants_controller.rb b/activestorage/app/controllers/active_storage/variants_controller.rb
deleted file mode 100644
index e8f8dd592d..0000000000
--- a/activestorage/app/controllers/active_storage/variants_controller.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# frozen_string_literal: true
-
-# Take a signed permanent reference for a variant and turn it into an expiring service URL for download.
-# Note: These URLs are publicly accessible. If you need to enforce access protection beyond the
-# security-through-obscurity factor of the signed blob and variation reference, you'll need to implement your own
-# authenticated redirection controller.
-class ActiveStorage::VariantsController < ActionController::Base
-  include ActiveStorage::SetBlob
-
-  def show
-    expires_in ActiveStorage::Blob.service.url_expires_in
-    redirect_to ActiveStorage::Variant.new(@blob, params[:variation_key]).processed.service_url(disposition: params[:disposition])
-  end
-end
diff --git a/activestorage/app/models/active_storage/blob/representable.rb b/activestorage/app/models/active_storage/blob/representable.rb
index 0ad2e2fd77..88fc25b7ae 100644
--- a/activestorage/app/models/active_storage/blob/representable.rb
+++ b/activestorage/app/models/active_storage/blob/representable.rb
@@ -27,7 +27,7 @@ module ActiveStorage::Blob::Representable
   # variable, call ActiveStorage::Blob#variable?.
   def variant(transformations)
     if variable?
-      ActiveStorage::Variant.new(self, ActiveStorage::Variation.wrap(transformations))
+      ActiveStorage::Variant.new(self, transformations)
     else
       raise ActiveStorage::InvariableError
     end
@@ -55,7 +55,7 @@ module ActiveStorage::Blob::Representable
   # whether a blob is accepted by any previewer, call ActiveStorage::Blob#previewable?.
   def preview(transformations)
     if previewable?
-      ActiveStorage::Preview.new(self, ActiveStorage::Variation.wrap(transformations))
+      ActiveStorage::Preview.new(self, transformations)
     else
       raise ActiveStorage::UnpreviewableError
     end
diff --git a/activestorage/config/routes.rb b/activestorage/config/routes.rb
index 3f4129d915..20d19f334a 100644
--- a/activestorage/config/routes.rb
+++ b/activestorage/config/routes.rb
@@ -11,30 +11,18 @@ Rails.application.routes.draw do
   resolve("ActiveStorage::Attachment") { |attachment, options| route_for(:rails_blob, attachment.blob, options) }
 
 
-  get "/rails/active_storage/variants/:signed_blob_id/:variation_key/*filename" => "active_storage/variants#show", as: :rails_blob_variation
+  get "/rails/active_storage/representations/:signed_blob_id/:variation_key/*filename" => "active_storage/representations#show", as: :rails_blob_representation
 
-  direct :rails_variant do |variant, options|
-    signed_blob_id = variant.blob.signed_id
-    variation_key  = variant.variation.key
-    filename       = variant.blob.filename
+  direct :rails_representation do |representation, options|
+    signed_blob_id = representation.blob.signed_id
+    variation_key  = representation.variation.key
+    filename       = representation.blob.filename
 
-    route_for(:rails_blob_variation, signed_blob_id, variation_key, filename, options)
+    route_for(:rails_blob_representation, signed_blob_id, variation_key, filename, options)
   end
 
-  resolve("ActiveStorage::Variant") { |variant, options| route_for(:rails_variant, variant, options) }
-
-
-  get "/rails/active_storage/previews/:signed_blob_id/:variation_key/*filename" => "active_storage/previews#show", as: :rails_blob_preview
-
-  direct :rails_preview do |preview, options|
-    signed_blob_id = preview.blob.signed_id
-    variation_key  = preview.variation.key
-    filename       = preview.blob.filename
-
-    route_for(:rails_blob_preview, signed_blob_id, variation_key, filename, options)
-  end
-
-  resolve("ActiveStorage::Preview") { |preview, options| route_for(:rails_preview, preview, options) }
+  resolve("ActiveStorage::Variant") { |variant, options| route_for(:rails_representation, variant, options) }
+  resolve("ActiveStorage::Preview") { |preview, options| route_for(:rails_representation, preview, options) }
 
 
   get  "/rails/active_storage/disk/:encoded_key/*filename" => "active_storage/disk#show", as: :rails_disk_service
diff --git a/activestorage/test/controllers/previews_controller_test.rb b/activestorage/test/controllers/previews_controller_test.rb
deleted file mode 100644
index b87be6c8b2..0000000000
--- a/activestorage/test/controllers/previews_controller_test.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-require "database/setup"
-
-class ActiveStorage::PreviewsControllerTest < ActionDispatch::IntegrationTest
-  setup do
-    @blob = create_file_blob filename: "report.pdf", content_type: "application/pdf"
-  end
-
-  test "showing preview inline" do
-    get rails_blob_preview_url(
-      filename: @blob.filename,
-      signed_blob_id: @blob.signed_id,
-      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
-
-    assert_predicate @blob.preview_image, :attached?
-    assert_redirected_to(/report\.png\?.*disposition=inline/)
-
-    image = read_image(@blob.preview_image.variant(resize: "100x100"))
-    assert_equal 77, image.width
-    assert_equal 100, image.height
-  end
-
-  test "showing preview with invalid signed blob ID" do
-    get rails_blob_preview_url(
-      filename: @blob.filename,
-      signed_blob_id: "invalid",
-      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
-
-    assert_response :not_found
-  end
-end
diff --git a/activestorage/test/controllers/representations_controller_test.rb b/activestorage/test/controllers/representations_controller_test.rb
new file mode 100644
index 0000000000..2662cc5283
--- /dev/null
+++ b/activestorage/test/controllers/representations_controller_test.rb
@@ -0,0 +1,61 @@
+# frozen_string_literal: true
+
+require "test_helper"
+require "database/setup"
+
+class ActiveStorage::RepresentationsControllerWithVariantsTest < ActionDispatch::IntegrationTest
+  setup do
+    @blob = create_file_blob filename: "racecar.jpg"
+  end
+
+  test "showing variant inline" do
+    get rails_blob_representation_url(
+      filename: @blob.filename,
+      signed_blob_id: @blob.signed_id,
+      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
+
+    assert_redirected_to(/racecar\.jpg\?.*disposition=inline/)
+
+    image = read_image(@blob.variant(resize: "100x100"))
+    assert_equal 100, image.width
+    assert_equal 67, image.height
+  end
+
+  test "showing variant with invalid signed blob ID" do
+    get rails_blob_representation_url(
+      filename: @blob.filename,
+      signed_blob_id: "invalid",
+      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
+
+    assert_response :not_found
+  end
+end
+
+class ActiveStorage::RepresentationsControllerWithPreviewsTest < ActionDispatch::IntegrationTest
+  setup do
+    @blob = create_file_blob filename: "report.pdf", content_type: "application/pdf"
+  end
+
+  test "showing preview inline" do
+    get rails_blob_representation_url(
+      filename: @blob.filename,
+      signed_blob_id: @blob.signed_id,
+      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
+
+    assert_predicate @blob.preview_image, :attached?
+    assert_redirected_to(/report\.png\?.*disposition=inline/)
+
+    image = read_image(@blob.preview_image.variant(resize: "100x100"))
+    assert_equal 77, image.width
+    assert_equal 100, image.height
+  end
+
+  test "showing preview with invalid signed blob ID" do
+    get rails_blob_representation_url(
+      filename: @blob.filename,
+      signed_blob_id: "invalid",
+      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
+
+    assert_response :not_found
+  end
+end
diff --git a/activestorage/test/controllers/variants_controller_test.rb b/activestorage/test/controllers/variants_controller_test.rb
deleted file mode 100644
index a0642f9bed..0000000000
--- a/activestorage/test/controllers/variants_controller_test.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# frozen_string_literal: true
-
-require "test_helper"
-require "database/setup"
-
-class ActiveStorage::VariantsControllerTest < ActionDispatch::IntegrationTest
-  setup do
-    @blob = create_file_blob filename: "racecar.jpg"
-  end
-
-  test "showing variant inline" do
-    get rails_blob_variation_url(
-      filename: @blob.filename,
-      signed_blob_id: @blob.signed_id,
-      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
-
-    assert_redirected_to(/racecar\.jpg\?.*disposition=inline/)
-
-    image = read_image(@blob.variant(resize: "100x100"))
-    assert_equal 100, image.width
-    assert_equal 67, image.height
-  end
-
-  test "showing variant with invalid signed blob ID" do
-    get rails_blob_variation_url(
-      filename: @blob.filename,
-      signed_blob_id: "invalid",
-      variation_key: ActiveStorage::Variation.encode(resize: "100x100"))
-
-    assert_response :not_found
-  end
-end
-- 
cgit v1.2.3