From d3e7dc6f16d68492a159d874f72a3a229a62f844 Mon Sep 17 00:00:00 2001
From: George Claghorn <george@basecamp.com>
Date: Tue, 29 Aug 2017 00:02:59 -0400
Subject: Synchronously destroy attachments

---
 activestorage/app/jobs/active_storage/purge_job.rb    |  6 +++---
 activestorage/app/models/active_storage/attachment.rb | 10 ++++------
 2 files changed, 7 insertions(+), 9 deletions(-)

(limited to 'activestorage')

diff --git a/activestorage/app/jobs/active_storage/purge_job.rb b/activestorage/app/jobs/active_storage/purge_job.rb
index 369c07929d..990ab27c9f 100644
--- a/activestorage/app/jobs/active_storage/purge_job.rb
+++ b/activestorage/app/jobs/active_storage/purge_job.rb
@@ -1,11 +1,11 @@
 # frozen_string_literal: true
 
-# Provides delayed purging of attachments or blobs using their +purge_later+ method.
+# Provides delayed purging of ActiveStorage::Blob records via ActiveStorage::Blob#purge_later.
 class ActiveStorage::PurgeJob < ActiveJob::Base
   # FIXME: Limit this to a custom ActiveStorage error
   retry_on StandardError
 
-  def perform(attachment_or_blob)
-    attachment_or_blob.purge
+  def perform(blob)
+    blob.purge
   end
 end
diff --git a/activestorage/app/models/active_storage/attachment.rb b/activestorage/app/models/active_storage/attachment.rb
index ad43845e4e..2a1c20b7db 100644
--- a/activestorage/app/models/active_storage/attachment.rb
+++ b/activestorage/app/models/active_storage/attachment.rb
@@ -14,17 +14,15 @@ class ActiveStorage::Attachment < ActiveRecord::Base
 
   delegate_missing_to :blob
 
-  # Purging an attachment will purge the blob (delete the file on the service, then destroy the record)
-  # and then destroy the attachment itself.
+  # Synchronously purges the blob (deletes it from the configured service) and destroys the attachment.
   def purge
     blob.purge
     destroy
   end
 
-  # Purging an attachment means purging the blob, which means talking to the service, which means
-  # talking over the Internet. Whenever you're doing that, it's a good idea to put that work in a job,
-  # so it doesn't hold up other operations. That's what +purge_later+ provides.
+  # Destroys the attachment and asynchronously purges the blob (deletes it from the configured service).
   def purge_later
-    ActiveStorage::PurgeJob.perform_later(self)
+    blob.purge_later
+    destroy
   end
 end
-- 
cgit v1.2.3