@@ -27,19 +27,40 @@ def file_exists?(key)
2727 true
2828 end
2929
30- def request ( url , range : nil )
30+ def request ( url , range : nil , & block )
3131 uri = URI . parse ( url )
32- request = Net ::HTTP ::Get . new ( uri )
33- request [ 'Range' ] = "bytes=#{ range . begin } -#{ range . end } " if range
32+ request = build_request ( uri , range )
3433
3534 Net ::HTTP . start ( uri . host , uri . port , use_ssl : uri . scheme == 'https' ) do |http |
36- response = http . request ( request )
37- raise ActiveStorage ::FileNotFoundError if response . is_a? ( Net ::HTTPNotFound )
35+ return request_streaming ( http , request , &block ) if block
3836
39- yield response
37+ request_once ( http , request )
4038 end
4139 end
4240
41+ def build_request ( uri , range )
42+ request = Net ::HTTP ::Get . new ( uri )
43+ request [ 'Range' ] = "bytes=#{ range . begin } -#{ range . end } " if range
44+ request
45+ end
46+
47+ def request_streaming ( http , request , &block )
48+ http . request ( request ) do |response |
49+ raise_not_found! ( response )
50+ block . call ( response )
51+ end
52+ end
53+
54+ def request_once ( http , request )
55+ response = http . request ( request )
56+ raise_not_found! ( response )
57+ response
58+ end
59+
60+ def raise_not_found! ( response )
61+ raise ActiveStorage ::FileNotFoundError if response . is_a? ( Net ::HTTPNotFound )
62+ end
63+
4364 def ensure_integrity ( io , checksum )
4465 io . rewind
4566 actual_checksum = Base64 . strict_encode64 ( Digest ::MD5 . digest ( io . read ) )
0 commit comments