Module: Nuri::Util::Tar
- Defined in:
- lib/nuri/targz.rb
Instance Method Summary collapse
-
#gzip(tarfile) ⇒ Object
gzips the underlying string in the given StringIO, returning a new StringIO representing the compressed file.
-
#tar(path, prefix = "") ⇒ Object
Creates a tar file in memory recursively from the given path.
- #targzip(path, prefix = "") ⇒ Object
-
#ungzip(tarfile) ⇒ Object
un-gzips the given IO, returning the decompressed version as a StringIO.
-
#untar(io, destination) ⇒ Object
untars the given IO into the specified directory.
Instance Method Details
#gzip(tarfile) ⇒ Object
gzips the underlying string in the given StringIO, returning a new StringIO representing the compressed file.
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/nuri/targz.rb', line 44 def gzip(tarfile) gz = StringIO.new("") z = Zlib::GzipWriter.new(gz) z.write tarfile.string z.close # this is necessary! # z was closed to write the gzip footer, so # now we need a new StringIO StringIO.new gz.string end |
#tar(path, prefix = "") ⇒ Object
Creates a tar file in memory recursively from the given path.
Returns a StringIO whose underlying String is the contents of the tar file.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/nuri/targz.rb', line 18 def tar(path, prefix="") prefix += "/" unless prefix[-1] == '/' or prefix.length <= 0 tarfile = StringIO.new("") Gem::Package::TarWriter.new(tarfile) do |tar| Dir[File.join(path, "**/*")].each do |file| mode = File.stat(file).mode relative_file = file.sub /^#{Regexp::escape path}\/?/, '' relative_file = prefix + relative_file if File.directory?(file) tar.mkdir relative_file, mode else tar.add_file relative_file, mode do |tf| File.open(file, "rb") { |f| tf.write f.read } end end end end tarfile.rewind tarfile end |
#targzip(path, prefix = "") ⇒ Object
9 10 11 |
# File 'lib/nuri/targz.rb', line 9 def targzip(path, prefix="") gzip(tar(path, prefix)) end |
#ungzip(tarfile) ⇒ Object
un-gzips the given IO, returning the decompressed version as a StringIO
57 58 59 60 61 62 |
# File 'lib/nuri/targz.rb', line 57 def ungzip(tarfile) z = Zlib::GzipReader.new(tarfile) unzipped = StringIO.new(z.read) z.close unzipped end |
#untar(io, destination) ⇒ Object
untars the given IO into the specified directory
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/nuri/targz.rb', line 66 def untar(io, destination) Gem::Package::TarReader.new io do |tar| tar.each do |tarfile| destination_file = File.join destination, tarfile.full_name if tarfile.directory? FileUtils.mkdir_p destination_file else destination_directory = File.dirname(destination_file) FileUtils.mkdir_p destination_directory unless File.directory?(destination_directory) File.open destination_file, "wb" do |f| #f.print tarfile.read f.write tarfile.read end end end end end |