From cfc38b30a1f39e20013074e6aecf12b08d9f2ec2 Mon Sep 17 00:00:00 2001 From: weshatheleopard Date: Sun, 8 Mar 2015 13:38:57 -0500 Subject: [PATCH] PROPER case insensitivity handling --- lib/zip.rb | 3 ++- lib/zip/entry_set.rb | 4 +++- test/entry_set_test.rb | 14 +++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/zip.rb b/lib/zip.rb index e6ebad3..c021f47 100644 --- a/lib/zip.rb +++ b/lib/zip.rb @@ -37,7 +37,7 @@ end module Zip extend self - attr_accessor :unicode_names, :on_exists_proc, :continue_on_exists_proc, :sort_entries, :default_compression, :write_zip64_support, :warn_invalid_date + attr_accessor :unicode_names, :on_exists_proc, :continue_on_exists_proc, :sort_entries, :default_compression, :write_zip64_support, :warn_invalid_date, :case_insensitive_match def reset! @_ran_once = false @@ -48,6 +48,7 @@ module Zip @default_compression = ::Zlib::DEFAULT_COMPRESSION @write_zip64_support = false @warn_invalid_date = true + @case_insensitive_match = false end def setup diff --git a/lib/zip/entry_set.rb b/lib/zip/entry_set.rb index 91c7cca..b9cbde3 100755 --- a/lib/zip/entry_set.rb +++ b/lib/zip/entry_set.rb @@ -78,7 +78,9 @@ module Zip private def to_key(entry) - entry.to_s.chomp('/') + k = entry.to_s.chomp('/') + k.downcase! if ::Zip.case_insensitive_match + k end end end diff --git a/test/entry_set_test.rb b/test/entry_set_test.rb index 10d6db8..fb77e5e 100644 --- a/test/entry_set_test.rb +++ b/test/entry_set_test.rb @@ -66,9 +66,17 @@ class ZipEntrySetTest < MiniTest::Test end def test_find_entry - # by default, #find_entry is case-sensitive - assert_equal(ZIP_ENTRIES[0], @zipEntrySet.find_entry('name1')) - assert_equal(ZIP_ENTRIES[0], @zipEntrySet.find_entry('NaMe1', false)) + entries = [::Zip::Entry.new("zipfile.zip", "MiXeDcAsEnAmE", "comment1")] + + ::Zip.case_insensitive_match = true + zipEntrySet = ::Zip::EntrySet.new(entries) + assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE')) + assert_equal(entries[0], zipEntrySet.find_entry('mixedcasename')) + + ::Zip.case_insensitive_match = false + zipEntrySet = ::Zip::EntrySet.new(entries) + assert_equal(entries[0], zipEntrySet.find_entry('MiXeDcAsEnAmE')) + assert_equal(nil, zipEntrySet.find_entry('mixedcasename')) end def test_entries_with_sort