Sha256: 4acfc23bc6ea2216b5afdd71074254116c0d16b112460e641501da20c970c4d5

Contents?: true

Size: 812 Bytes

Versions: 5

Compression:

Stored size: 812 Bytes

Contents

module Goodcheck
  class Unarchiver
    attr_reader :file_filter

    def initialize(file_filter: ->(_filename) { true })
      @file_filter = file_filter
    end

    def tar_gz?(filename)
      name = filename.to_s.downcase
      ext = ".tar.gz"
      name.end_with?(ext) && name != ext
    end

    def tar_gz(content)
      require "rubygems/package"

      Gem::Package::TarReader.new(StringIO.new(gz(content))) do |tar_reader|
        tar_reader.each do |file|
          if file.file? && file_filter.call(file.full_name)
            yield file.read, file.full_name
          end
        end
      end
    end

    private

    def gz(content)
      require "zlib"

      io = Zlib::GzipReader.new(StringIO.new(content))
      begin
        io.read
      ensure
        io.close
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
goodcheck-3.1.0 lib/goodcheck/unarchiver.rb
goodcheck-3.0.3 lib/goodcheck/unarchiver.rb
goodcheck-3.0.2 lib/goodcheck/unarchiver.rb
goodcheck-3.0.1 lib/goodcheck/unarchiver.rb
goodcheck-3.0.0 lib/goodcheck/unarchiver.rb