Class: ZipTricks::RemoteUncap

Inherits:
Object
  • Object
show all
Defined in:
lib/zip_tricks/remote_uncap.rb

Overview

Alows reading the central directory of a remote ZIP file without downloading the entire file. The central directory provides the offsets at which the actual file contents is located. You can then use the Range: HTTP headers to download those entries separately.

Please read the security warning in FileReader VERY CAREFULLY before you use this module.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri) ⇒ RemoteUncap



26
27
28
# File 'lib/zip_tricks/remote_uncap.rb', line 26

def initialize(uri)
  @uri = URI(uri)
end

Class Method Details

.files_within_zip_at(uri, reader_class: ZipTricks::FileReader, **options_for_zip_reader) ⇒ Array<ZipTricks::FileReader::ZipEntry>

FileReader when reading files within the remote archive



17
18
19
20
21
22
23
24
# File 'lib/zip_tricks/remote_uncap.rb', line 17

def self.files_within_zip_at(uri,
                             reader_class: ZipTricks::FileReader,
                             **options_for_zip_reader)
  fetcher = new(uri)
  fake_io = ZipTricks::RemoteIO.new(fetcher)
  reader = reader_class.new
  reader.read_zip_structure(io: fake_io, **options_for_zip_reader)
end

Instance Method Details

#request_object_sizeFixnum

Only used internally when reading the remote ZIP.



44
45
46
47
# File 'lib/zip_tricks/remote_uncap.rb', line 44

def request_object_size
  http = Net::HTTP.start(@uri.hostname, @uri.port)
  http.request_head(uri)['Content-Length'].to_i
end

#request_range(range) ⇒ String

Only used internally when reading the remote ZIP.



34
35
36
37
38
39
# File 'lib/zip_tricks/remote_uncap.rb', line 34

def request_range(range)
  request = Net::HTTP::Get.new(@uri)
  request.range = range
  http = Net::HTTP.start(@uri.hostname, @uri.port)
  http.request(request).body
end