class Metacrunch::File::FileSource

Public Class Methods

new(filenames) click to toggle source
# File lib/metacrunch/file/file_source.rb, line 7
def initialize(filenames)
  @filenames = [*filenames].map{|f| f.presence}.compact
end

Public Instance Methods

each(&block) click to toggle source
# File lib/metacrunch/file/file_source.rb, line 11
def each(&block)
  return enum_for(__method__) unless block_given?

  @filenames.each do |filename|
    if is_archive?(filename)
     read_archive(filename, &block)
    else
     read_regular_file(filename, &block)
    end
  end
end

Private Instance Methods

is_archive?(filename) click to toggle source
# File lib/metacrunch/file/file_source.rb, line 25
def is_archive?(filename)
  filename.ends_with?(".tar") || filename.ends_with?(".tar.gz") || filename.ends_with?(".tgz")
end
is_gzip_file?(filename) click to toggle source
# File lib/metacrunch/file/file_source.rb, line 29
def is_gzip_file?(filename)
  filename.ends_with?(".gz") || filename.ends_with?(".tgz")
end
read_archive(filename) { |entry( filename: filename, archive_filename: full_name, contents: read| ... } click to toggle source
# File lib/metacrunch/file/file_source.rb, line 40
def read_archive(filename, &block)
  io        = is_gzip_file?(filename) ? Zlib::GzipReader.open(filename) : ::File.open(filename, "r")
  tarReader = Gem::Package::TarReader.new(io)

  tarReader.each do |_tar_entry|
    if _tar_entry.file?
      yield File::Entry.new(
        filename: filename,
        archive_filename: _tar_entry.full_name,
        contents: _tar_entry.read
      )
    end
  end
end
read_regular_file(filename) { |entry(filename: filename, archive_filename: nil, contents: read)| ... } click to toggle source
# File lib/metacrunch/file/file_source.rb, line 33
def read_regular_file(filename, &block)
  if ::File.file?(filename)
    io = is_gzip_file?(filename) ? Zlib::GzipReader.open(filename) : ::File.open(filename, "r")
    yield File::Entry.new(filename: filename, archive_filename: nil, contents: io.read)
  end
end