From 239baef8459e7d7ed96d9b8ccdc0e93c1b4c7c19 Mon Sep 17 00:00:00 2001 From: Robert Haines Date: Wed, 2 Jun 2021 17:04:45 +0100 Subject: [PATCH] Extract `DirectoryIterator` from the main filesystem file. --- lib/zip/filesystem.rb | 46 +----------------- lib/zip/filesystem/directory_iterator.rb | 48 +++++++++++++++++++ ...tor_test.rb => directory_iterator_test.rb} | 4 +- 3 files changed, 52 insertions(+), 46 deletions(-) create mode 100644 lib/zip/filesystem/directory_iterator.rb rename test/filesystem/{dir_iterator_test.rb => directory_iterator_test.rb} (91%) diff --git a/lib/zip/filesystem.rb b/lib/zip/filesystem.rb index 59bdf14..38d66a9 100644 --- a/lib/zip/filesystem.rb +++ b/lib/zip/filesystem.rb @@ -2,6 +2,7 @@ require 'zip' require_relative 'filesystem/zip_file_name_mapper' +require_relative 'filesystem/directory_iterator' module Zip # The ZipFileSystem API provides an API for accessing entries in @@ -442,7 +443,7 @@ module Zip attr_writer :file def new(directory_name) - ZipFsDirIterator.new(entries(directory_name)) + DirectoryIterator.new(entries(directory_name)) end def open(directory_name) @@ -514,49 +515,6 @@ module Zip raise NotImplementedError, 'The chroot() function is not implemented' end end - - class ZipFsDirIterator # :nodoc:all - include Enumerable - - def initialize(filenames) - @filenames = filenames - @index = 0 - end - - def close - @filenames = nil - end - - def each(&a_proc) - raise IOError, 'closed directory' if @filenames.nil? - - @filenames.each(&a_proc) - end - - def read - raise IOError, 'closed directory' if @filenames.nil? - - @filenames[(@index += 1) - 1] - end - - def rewind - raise IOError, 'closed directory' if @filenames.nil? - - @index = 0 - end - - def seek(position) - raise IOError, 'closed directory' if @filenames.nil? - - @index = position - end - - def tell - raise IOError, 'closed directory' if @filenames.nil? - - @index - end - end end class File diff --git a/lib/zip/filesystem/directory_iterator.rb b/lib/zip/filesystem/directory_iterator.rb new file mode 100644 index 0000000..91b1fc2 --- /dev/null +++ b/lib/zip/filesystem/directory_iterator.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Zip + module FileSystem + class DirectoryIterator # :nodoc:all + include Enumerable + + def initialize(filenames) + @filenames = filenames + @index = 0 + end + + def close + @filenames = nil + end + + def each(&a_proc) + raise IOError, 'closed directory' if @filenames.nil? + + @filenames.each(&a_proc) + end + + def read + raise IOError, 'closed directory' if @filenames.nil? + + @filenames[(@index += 1) - 1] + end + + def rewind + raise IOError, 'closed directory' if @filenames.nil? + + @index = 0 + end + + def seek(position) + raise IOError, 'closed directory' if @filenames.nil? + + @index = position + end + + def tell + raise IOError, 'closed directory' if @filenames.nil? + + @index + end + end + end +end diff --git a/test/filesystem/dir_iterator_test.rb b/test/filesystem/directory_iterator_test.rb similarity index 91% rename from test/filesystem/dir_iterator_test.rb rename to test/filesystem/directory_iterator_test.rb index bf964c4..ba809df 100644 --- a/test/filesystem/dir_iterator_test.rb +++ b/test/filesystem/directory_iterator_test.rb @@ -3,11 +3,11 @@ require 'test_helper' require 'zip/filesystem' -class ZipFsDirIteratorTest < MiniTest::Test +class DirectoryIteratorTest < MiniTest::Test FILENAME_ARRAY = %w[f1 f2 f3 f4 f5 f6].freeze def setup - @dir_iter = ::Zip::FileSystem::ZipFsDirIterator.new(FILENAME_ARRAY) + @dir_iter = ::Zip::FileSystem::DirectoryIterator.new(FILENAME_ARRAY) end def test_close