This module contains various utility methods as module methods.
Zlib::GzipReader wrapper that unzips data.
# File rubygems/util.rb, line 11
def self.gunzip(data)
require 'zlib'
require 'rubygems/util/stringio'
data = Gem::StringSource.new data
unzipped = Zlib::GzipReader.new(data).read
unzipped.force_encoding Encoding::BINARY if Object.const_defined? :Encoding
unzipped
end
Zlib::GzipWriter wrapper that zips data.
# File rubygems/util.rb, line 24
def self.gzip(data)
require 'zlib'
require 'rubygems/util/stringio'
zipped = Gem::StringSink.new
zipped.set_encoding Encoding::BINARY if Object.const_defined? :Encoding
Zlib::GzipWriter.wrap zipped do |io| io.write data end
zipped.string
end
A Zlib::Inflate#inflate wrapper
# File rubygems/util.rb, line 38
def self.inflate(data)
require 'zlib'
Zlib::Inflate.inflate data
end
This calls IO.popen where it accepts an array for a command
(Ruby 1.9+) and implements an IO.popen-like behavior where it does not
accept an array for a command.
# File rubygems/util.rb, line 48
def self.popen *command
IO.popen command, &:read
rescue TypeError # ruby 1.8 only supports string command
r, w = IO.pipe
pid = fork do
STDIN.close
STDOUT.reopen w
exec(*command)
end
w.close
begin
return r.read
ensure
Process.wait pid
end
end
Invokes system, but silences all output.
# File rubygems/util.rb, line 74
def self.silent_system *command
opt = {:out => NULL_DEVICE, :err => [:child, :out]}
if Hash === command.last
opt.update(command.last)
cmds = command[0...-1]
else
cmds = command.dup
end
return system(*(cmds << opt))
rescue TypeError
require 'thread'
@silent_mutex ||= Mutex.new
null_device = NULL_DEVICE
@silent_mutex.synchronize do
begin
stdout = STDOUT.dup
stderr = STDERR.dup
STDOUT.reopen null_device, 'w'
STDERR.reopen null_device, 'w'
return system(*command)
ensure
STDOUT.reopen stdout
STDERR.reopen stderr
stdout.close
stderr.close
end
end
end
Enumerates the parents of directory.
# File rubygems/util.rb, line 111
def self.traverse_parents directory
return enum_for __method__, directory unless block_given?
here = File.expand_path directory
start = here
Dir.chdir start
begin
loop do
yield here
Dir.chdir '..'
return if Dir.pwd == here # toplevel
here = Dir.pwd
end
ensure
Dir.chdir start
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.