Extract `DirectoryIterator` from the main filesystem file.
This commit is contained in:
parent
204d084fdf
commit
239baef845
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
require 'zip'
|
require 'zip'
|
||||||
require_relative 'filesystem/zip_file_name_mapper'
|
require_relative 'filesystem/zip_file_name_mapper'
|
||||||
|
require_relative 'filesystem/directory_iterator'
|
||||||
|
|
||||||
module Zip
|
module Zip
|
||||||
# The ZipFileSystem API provides an API for accessing entries in
|
# The ZipFileSystem API provides an API for accessing entries in
|
||||||
|
@ -442,7 +443,7 @@ module Zip
|
||||||
attr_writer :file
|
attr_writer :file
|
||||||
|
|
||||||
def new(directory_name)
|
def new(directory_name)
|
||||||
ZipFsDirIterator.new(entries(directory_name))
|
DirectoryIterator.new(entries(directory_name))
|
||||||
end
|
end
|
||||||
|
|
||||||
def open(directory_name)
|
def open(directory_name)
|
||||||
|
@ -514,49 +515,6 @@ module Zip
|
||||||
raise NotImplementedError, 'The chroot() function is not implemented'
|
raise NotImplementedError, 'The chroot() function is not implemented'
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
||||||
class File
|
class File
|
||||||
|
|
|
@ -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
|
|
@ -3,11 +3,11 @@
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
require 'zip/filesystem'
|
require 'zip/filesystem'
|
||||||
|
|
||||||
class ZipFsDirIteratorTest < MiniTest::Test
|
class DirectoryIteratorTest < MiniTest::Test
|
||||||
FILENAME_ARRAY = %w[f1 f2 f3 f4 f5 f6].freeze
|
FILENAME_ARRAY = %w[f1 f2 f3 f4 f5 f6].freeze
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@dir_iter = ::Zip::FileSystem::ZipFsDirIterator.new(FILENAME_ARRAY)
|
@dir_iter = ::Zip::FileSystem::DirectoryIterator.new(FILENAME_ARRAY)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_close
|
def test_close
|
Loading…
Reference in New Issue