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