module MultiZip::Backend::Rubyzip
Constants
- BUFFER_SIZE
Public Instance Methods
extract_member(member_path, destination_path, options = {})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 30 def extract_member(member_path, destination_path, options = {}) read_operation do |zip_file| if member = zip_file.glob(member_path).first stream = member.get_input_stream output_file = ::File.new(destination_path, 'wb') while chunk = stream.read(BUFFER_SIZE) output_file.write chunk end output_file.close else zip_file.close member_not_found!(member_path) end end destination_path end
list_members(prefix=nil, options={})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 14 def list_members(prefix=nil, options={}) read_operation do |zip_file| zip_file.map(&:name).select{|n| prefix ? n =~ /^#{prefix}/ : true}.sort end end
member_info(member_path, options = {})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 58 def member_info(member_path, options = {}) read_operation do |zip_file| if zip_entry = zip_file.detect{|ze| ze.name == member_path} { path: zip_entry.name, size: zip_entry.size.to_i, type: zip_entry.ftype, original: zip_entry } else member_not_found!(member_path) end end end
read_member(member_path, options = {})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 3 def read_member(member_path, options = {}) read_operation do |zip_file| if member = zip_file.glob(member_path).first member.get_input_stream.read else zip_file.close member_not_found!(member_path) end end end
remove_member(member_path, options = {})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 50 def remove_member(member_path, options = {}) archive_exists! exists!(member_path) Zip::File.open(@filename) do |zipfile| zipfile.remove(member_path) end end
write_member(member_path, member_contents, options = {})
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 20 def write_member(member_path, member_contents, options = {}) flags = (File.exists?(@filename) ? nil : Zip::File::CREATE) Zip::File.open(@filename, flags) do |zipfile| zipfile.get_output_stream(member_path) do |os| os.write member_contents end end end
Private Instance Methods
read_operation() { |zip_file| ... }
click to toggle source
# File lib/multi_zip/backend/rubyzip.rb, line 75 def read_operation(&blk) archive_exists! Zip::File.open(@filename) do |zip_file| yield(zip_file) end rescue Zip::Error => e # not the best way to detect the class of error. if e.message.match('Zip end of central directory signature not found') raise MultiZip::InvalidArchiveError.new(@filename, e) else raise end end