In Files

  • rubygems/util.rb

Class/Module Index [+]

Quicksearch

Gem::Util

This module contains various utility methods as module methods.

Public Class Methods

gunzip(data) click to toggle source

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
            
gzip(data) click to toggle source

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
            
inflate(data) click to toggle source

A Zlib::Inflate#inflate wrapper

 
               # File rubygems/util.rb, line 38
def self.inflate(data)
  require 'zlib'
  Zlib::Inflate.inflate data
end
            
popen(*command) click to toggle source

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
            
silent_system(*command) click to toggle source

Invokes system, but silences all output.

 
               # File rubygems/util.rb, line 72
def self.silent_system *command
  require 'thread'

  @silent_mutex ||= Mutex.new

  null_device = Gem.win_platform? ? 'NUL' : '/dev/null'

  @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
    end
  end
end
            
traverse_parents(directory) click to toggle source

Enumerates the parents of directory.

 
               # File rubygems/util.rb, line 98
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.

blog comments powered by Disqus