Module: MultiZip::Backend::Rubyzip
- Defined in:
- lib/multi_zip/backend/rubyzip.rb
Constant Summary collapse
- BUFFER_SIZE =
8192
Instance Method Summary collapse
- #extract_member(member_path, destination_path, options = {}) ⇒ Object
- #list_members(prefix = nil, options = {}) ⇒ Object
- #member_info(member_path, options = {}) ⇒ Object
- #read_member(member_path, options = {}) ⇒ Object
- #remove_member(member_path, options = {}) ⇒ Object
- #write_member(member_path, member_contents, options = {}) ⇒ Object
Instance Method Details
#extract_member(member_path, destination_path, options = {}) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 30 def extract_member(member_path, destination_path, = {}) 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 = {}) ⇒ Object
14 15 16 17 18 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 14 def list_members(prefix=nil, ={}) read_operation do |zip_file| zip_file.map(&:name).select{|n| prefix ? n =~ /^#{prefix}/ : true}.sort end end |
#member_info(member_path, options = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 58 def member_info(member_path, = {}) 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 = {}) ⇒ Object
3 4 5 6 7 8 9 10 11 12 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 3 def read_member(member_path, = {}) 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 = {}) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 50 def remove_member(member_path, = {}) archive_exists! exists!(member_path) Zip::File.open(@filename) do |zipfile| zipfile.remove(member_path) end end |
#write_member(member_path, member_contents, options = {}) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/multi_zip/backend/rubyzip.rb', line 20 def write_member(member_path, member_contents, = {}) 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 |