Sha256: ff39b294c2a0fb4da1e3f0c1dea1d91f69c67be478af64992846ee0493368517

Contents?: true

Size: 878 Bytes

Versions: 1

Compression:

Stored size: 878 Bytes

Contents

require 'rubygems/package'

# was helpful http://old.thoughtsincomputation.com/posts/tar-and-a-few-feathers-in-ruby
module Swathe
  class Tar < Archive
    attr_accessor :tar_reader
    include Enumerable

    def initialize(io)
      self.tar_reader = Gem::Package::TarReader.new(io)
    end

    def self.open(file_name)
      new(File.open(file_name))
    end

    def tar?
      true
    end

    def each
      return enum_for(__callee__) unless block_given?
      tar_reader.rewind
      tar_reader.each {|e| yield(e) }
    end

    def subset
      Enumerator.new do |files|
        each do |entry|
          files << entry if yield(entry)
        end
      end
    end

    def files
      subset {|e| e.file? }
    end

    def directories
      subset {|e| e.directory? }
    end

    def entry(filename)
      detect {|f| filename === f.full_name }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
swathe-0.0.1 lib/swathe/tar.rb