@@ -36,18 +36,14 @@ def download(key, &block)
3636 end
3737 else
3838 instrument :download , key : key do
39- record = ::ActiveStorageDB ::File . find_by ( ref : key )
40- raise ( ActiveStorage ::FileNotFoundError ) unless record
41-
42- record . data
39+ retrieve_file ( key )
4340 end
4441 end
4542 end
4643
4744 def download_chunk ( key , range )
4845 instrument :download_chunk , key : key , range : range do
49- chunk_select = "SUBSTRING(data FROM #{ range . begin + 1 } FOR #{ range . size } ) AS chunk"
50- record = ::ActiveStorageDB ::File . select ( chunk_select ) . find_by ( ref : key )
46+ record = object_for ( key , fields : "SUBSTRING(data FROM #{ range . begin + 1 } FOR #{ range . size } ) AS chunk" )
5147 raise ( ActiveStorage ::FileNotFoundError ) unless record
5248
5349 record . chunk
@@ -127,17 +123,26 @@ def generate_url(key, expires_in:, filename:, content_type:, disposition:)
127123 end
128124
129125 def ensure_integrity_of ( key , checksum )
130- file = ::ActiveStorageDB ::File . find_by ( ref : key )
131- return if Digest ::MD5 . base64digest ( file . data ) == checksum
126+ return if Digest ::MD5 . base64digest ( object_for ( key ) . data ) == checksum
132127
133128 delete ( key )
134129 raise ActiveStorage ::IntegrityError
135130 end
136131
132+ def retrieve_file ( key )
133+ file = object_for ( key )
134+ raise ( ActiveStorage ::FileNotFoundError ) unless file
135+
136+ file . data
137+ end
138+
139+ def object_for ( key , fields : nil )
140+ as_file = fields ? ::ActiveStorageDB ::File . select ( *fields ) : ::ActiveStorageDB ::File
141+ as_file . find_by ( ref : key )
142+ end
143+
137144 def stream ( key )
138- size =
139- ::ActiveStorageDB ::File . select ( 'OCTET_LENGTH(data) AS size' ) . find_by ( ref : key ) &.size ||
140- raise ( ActiveStorage ::FileNotFoundError )
145+ size = object_for ( key , fields : 'OCTET_LENGTH(data) AS size' ) &.size || raise ( ActiveStorage ::FileNotFoundError )
141146 ( size / @chunk_size . to_f ) . ceil . times . each do |i |
142147 range = ( i * @chunk_size ..( ( i + 1 ) * @chunk_size ) - 1 )
143148 yield download_chunk ( key , range )
0 commit comments