Deprecate usage of `purge` and `purge_later` from the association extension.

Calling `purge` and `purge_later` from the association extension raise a
deprecation warning.
These methods will be removed in the `6.2` release.
This commit is contained in:
Jacopo 2021-06-16 10:26:51 +02:00
parent 0ea82ee99e
commit c8c967b535
3 changed files with 64 additions and 1 deletions

View File

@ -1,5 +1,9 @@
* Deprecate usage of `purge` and `purge_later` from the association extension.
*Jacopo Beschi*
* Allow setting a `Cache-Control` on files uploaded to GCS.
```yaml
gcs:
service: GCS

View File

@ -155,14 +155,26 @@ module ActiveStorage
has_many :"#{name}_attachments", -> { where(name: name) }, as: :record, class_name: "ActiveStorage::Attachment", inverse_of: :record, dependent: :destroy, strict_loading: strict_loading do
def purge
deprecate(:purge)
each(&:purge)
reset
end
def purge_later
deprecate(:purge_later)
each(&:purge_later)
reset
end
private
def deprecate(action)
reflection_name = proxy_association.reflection.name
attached_name = reflection_name.to_s.partition("_").first
ActiveSupport::Deprecation.warn(<<-MSG.squish)
Calling `#{action}` from `#{reflection_name}` is deprecated and will be removed in Rails 7.1.
To migrate to Rails 7.1's behavior call `#{action}` from `#{attached_name}` instead: `#{attached_name}.#{action}`.
MSG
end
end
has_many :"#{name}_blobs", through: :"#{name}_attachments", class_name: "ActiveStorage::Blob", source: :blob, strict_loading: strict_loading

View File

@ -456,6 +456,28 @@ class ActiveStorage::ManyAttachedTest < ActiveSupport::TestCase
end
end
test "purging from the attachments relation" do
[ create_blob(filename: "funky.jpg"), create_blob(filename: "town.jpg") ].tap do |blobs|
@user.highlights.attach blobs
assert @user.highlights.attached?
message = <<-MSG.squish
Calling `purge` from `highlights_attachments` is deprecated and will be removed in Rails 7.1.
To migrate to Rails 7.1's behavior call `purge` from `highlights` instead: `highlights.purge`.
MSG
assert_deprecated(message) do
assert_changes -> { @user.updated_at } do
@user.highlights_attachments.purge
end
end
assert_not @user.highlights.attached?
assert_not ActiveStorage::Blob.exists?(blobs.first.id)
assert_not ActiveStorage::Blob.exists?(blobs.second.id)
assert_not ActiveStorage::Blob.service.exist?(blobs.first.key)
assert_not ActiveStorage::Blob.service.exist?(blobs.second.key)
end
end
test "purging attachment with shared blobs" do
[
create_blob(filename: "funky.jpg"),
@ -529,6 +551,31 @@ class ActiveStorage::ManyAttachedTest < ActiveSupport::TestCase
end
end
test "purging later from the attachments relation" do
[ create_blob(filename: "funky.jpg"), create_blob(filename: "town.jpg") ].tap do |blobs|
@user.highlights.attach blobs
assert @user.highlights.attached?
message = <<-MSG.squish
Calling `purge_later` from `highlights_attachments` is deprecated and will be removed in Rails 7.1.
To migrate to Rails 7.1's behavior call `purge_later` from `highlights` instead: `highlights.purge_later`.
MSG
assert_deprecated(message) do
perform_enqueued_jobs do
assert_changes -> { @user.updated_at } do
@user.highlights_attachments.purge_later
end
end
end
assert_not @user.highlights.attached?
assert_not ActiveStorage::Blob.exists?(blobs.first.id)
assert_not ActiveStorage::Blob.exists?(blobs.second.id)
assert_not ActiveStorage::Blob.service.exist?(blobs.first.key)
assert_not ActiveStorage::Blob.service.exist?(blobs.second.key)
end
end
test "purging attachment later with shared blobs" do
[
create_blob(filename: "funky.jpg"),