aboutsummaryrefslogtreecommitdiffstats
path: root/lib/active_storage/blob.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/active_storage/blob.rb')
-rw-r--r--lib/active_storage/blob.rb95
1 files changed, 0 insertions, 95 deletions
diff --git a/lib/active_storage/blob.rb b/lib/active_storage/blob.rb
deleted file mode 100644
index 6bd3941cd8..0000000000
--- a/lib/active_storage/blob.rb
+++ /dev/null
@@ -1,95 +0,0 @@
-require "active_storage/service"
-require "active_storage/filename"
-require "active_storage/purge_job"
-require "active_storage/variant"
-
-# Schema: id, key, filename, content_type, metadata, byte_size, checksum, created_at
-class ActiveStorage::Blob < ActiveRecord::Base
- self.table_name = "active_storage_blobs"
-
- has_secure_token :key
- store :metadata, coder: JSON
-
- class_attribute :service
-
- class << self
- def build_after_upload(io:, filename:, content_type: nil, metadata: nil)
- new.tap do |blob|
- blob.filename = filename
- blob.content_type = content_type
- blob.metadata = metadata
-
- blob.upload io
- end
- end
-
- def create_after_upload!(io:, filename:, content_type: nil, metadata: nil)
- build_after_upload(io: io, filename: filename, content_type: content_type, metadata: metadata).tap(&:save!)
- end
-
- def create_before_direct_upload!(filename:, byte_size:, checksum:, content_type: nil, metadata: nil)
- create! filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type, metadata: metadata
- end
- end
-
-
- def key
- # We can't wait until the record is first saved to have a key for it
- self[:key] ||= self.class.generate_unique_secure_token
- end
-
- def filename
- ActiveStorage::Filename.new(self[:filename])
- end
-
- def variant(transformations)
- ActiveStorage::Variant.new(self, ActiveStorage::Variation.new(transformations))
- end
-
-
- def url(expires_in: 5.minutes, disposition: :inline)
- service.url key, expires_in: expires_in, disposition: disposition, filename: filename
- end
-
- def url_for_direct_upload(expires_in: 5.minutes)
- service.url_for_direct_upload key, expires_in: expires_in, content_type: content_type, content_length: byte_size
- end
-
-
- def upload(io)
- self.checksum = compute_checksum_in_chunks(io)
- self.byte_size = io.size
-
- service.upload(key, io, checksum: checksum)
- end
-
- def download(&block)
- service.download key, &block
- end
-
-
- def delete
- service.delete key
- end
-
- def purge
- delete
- destroy
- end
-
- def purge_later
- ActiveStorage::PurgeJob.perform_later(self)
- end
-
-
- private
- def compute_checksum_in_chunks(io)
- Digest::MD5.new.tap do |checksum|
- while chunk = io.read(5.megabytes)
- checksum << chunk
- end
-
- io.rewind
- end.base64digest
- end
-end