From ac17e24feca48ee347fc1dbd376beaee7907a75c Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Wed, 10 Aug 2016 23:45:57 -0400 Subject: add dir? --- spec/zip_spec.cr | 13 ++++++++----- src/zip.cr | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/spec/zip_spec.cr b/spec/zip_spec.cr index 01a98ff..0ca4e86 100644 --- a/spec/zip_spec.cr +++ b/spec/zip_spec.cr @@ -91,12 +91,15 @@ describe Zip do it "reads all an archive's compressed entries" do Zip.read(File.join(TEST_DIR, "test-many.zip")) do |zip| zip.each do |e| - pp e.path - io = MemoryIO.new - # e.write(STDOUT) - e.write(io) - io.close + if e.dir? + puts "#{e.path} is a directory" + else + io = MemoryIO.new + # e.write(STDOUT) + e.write(io) + io.close + end end end end diff --git a/src/zip.cr b/src/zip.cr index a2316aa..be5fa56 100644 --- a/src/zip.cr +++ b/src/zip.cr @@ -11,7 +11,7 @@ require "zlib" # [x] convert datetime to Time # [x] add size to Entry # [x] Version -# [ ] directories +# [x] directories # [ ] full tests # [ ] zip64 # [ ] legacy unicode (e.g., non-bit 11) path/comment support @@ -1519,6 +1519,20 @@ module Zip data_mem_io.close end + # + # Returns true if this entry a directory. + # + # Example: + # + # Zip.read("foo.zip") do |zip| + # type = zip["some-dir/"].dir? ? "directory" : "file" + # puts "#{path} is a #{type}" + # end + # + def dir? : Bool + (@external_attr & 0x01) != 0 + end + # # Return the uncompressed size of this entry in bytes. # -- cgit v1.2.3