aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_storage/attached/many.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_storage/attached/many.rb')
-rw-r--r--lib/active_storage/attached/many.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/active_storage/attached/many.rb b/lib/active_storage/attached/many.rb
new file mode 100644
index 0000000000..f1535dfbc6
--- /dev/null
+++ b/lib/active_storage/attached/many.rb
@@ -0,0 +1,31 @@
+class ActiveStorage::Attached::Many < ActiveStorage::Attached
+ delegate_missing_to :attachments
+
+ def attachments
+ @attachments ||= ActiveStorage::Attachment.where(record_gid: record.to_gid.to_s, name: name)
+ end
+
+ def attach(*attachables)
+ @attachments = attachments | Array(attachables).flatten.collect do |attachable|
+ ActiveStorage::Attachment.create!(record_gid: record.to_gid.to_s, name: name, blob: create_blob_from(attachable))
+ end
+ end
+
+ def attached?
+ attachments.any?
+ end
+
+ def purge
+ if attached?
+ attachments.each(&:purge)
+ @attachments = nil
+ end
+ end
+
+ def purge_later
+ if attached?
+ attachments.each(&:purge_later)
+ @attachments = nil
+ end
+ end
+end