aboutsummaryrefslogtreecommitdiffstats
path: root/activestorage
diff options
context:
space:
mode:
authorAnton Khamets <colorfulfool@gmail.com>2017-08-07 17:38:51 +0300
committerDavid Heinemeier Hansson <david@loudthinking.com>2017-08-07 09:38:51 -0500
commit7c89948c416fbc32b59e33a0ab454545b4f6fed7 (patch)
tree32f23ba3e6f44a95153f64da07e242b86f16f24e /activestorage
parentdf94b863c2ff8f1bcf12e36ed8fc1419292668e7 (diff)
downloadrails-7c89948c416fbc32b59e33a0ab454545b4f6fed7.tar.gz
rails-7c89948c416fbc32b59e33a0ab454545b4f6fed7.tar.bz2
rails-7c89948c416fbc32b59e33a0ab454545b4f6fed7.zip
Extend image_tag to accept ActiveStorage Attachments and Variants (#30084)
* Extend image_tag to accept ActiveStorage's Attachments and Variants * Flip resolve_image_source around * Add tests for the new use-cases of image_tag * Remove the higher-level test * Update image_tag documentation * Add error states into the test suite * Re-raise polymorhic_url's NoMethodError as ArgumentError * delegate_missing_to will raise DelegationError instead of NoMethodError
Diffstat (limited to 'activestorage')
-rw-r--r--activestorage/README.md2
-rw-r--r--activestorage/test/template/image_tag_test.rb40
2 files changed, 41 insertions, 1 deletions
diff --git a/activestorage/README.md b/activestorage/README.md
index aad11325e3..957adc05c3 100644
--- a/activestorage/README.md
+++ b/activestorage/README.md
@@ -80,7 +80,7 @@ Variation of image attachment:
```erb
<%# Hitting the variant URL will lazy transform the original blob and then redirect to its new service location %>
-<%= image_tag url_for(user.avatar.variant(resize: "100x100")) %>
+<%= image_tag user.avatar.variant(resize: "100x100") %>
```
## Installation
diff --git a/activestorage/test/template/image_tag_test.rb b/activestorage/test/template/image_tag_test.rb
new file mode 100644
index 0000000000..83c95c01a1
--- /dev/null
+++ b/activestorage/test/template/image_tag_test.rb
@@ -0,0 +1,40 @@
+require "test_helper"
+require "database/setup"
+
+class User < ActiveRecord::Base
+ has_one_attached :avatar
+end
+
+class ActiveStorage::ImageTagTest < ActionView::TestCase
+ tests ActionView::Helpers::AssetTagHelper
+
+ setup do
+ @blob = create_image_blob filename: "racecar.jpg"
+ end
+
+ test "blob" do
+ assert_dom_equal %(<img alt="Racecar" src="#{polymorphic_url @blob}" />), image_tag(@blob)
+ end
+
+ test "variant" do
+ variant = @blob.variant(resize: "100x100")
+ assert_dom_equal %(<img alt="Racecar" src="#{polymorphic_url variant}" />), image_tag(variant)
+ end
+
+ test "attachment" do
+ attachment = ActiveStorage::Attachment.new(blob: @blob)
+ assert_dom_equal %(<img alt="Racecar" src="#{polymorphic_url attachment}" />), image_tag(attachment)
+ end
+
+ test "error when attachment's empty" do
+ @user = User.create!(name: "DHH")
+
+ assert_not @user.avatar.attached?
+ assert_raises(ArgumentError) { image_tag(@user.avatar) }
+ end
+
+ test "error when object can't be resolved into url" do
+ unresolvable_object = ActionView::Helpers::AssetTagHelper
+ assert_raises(ArgumentError) { image_tag(unresolvable_object) }
+ end
+end