Module: Gem::Util
- Defined in:
- lib/rubygems/util.rb
Overview
This module contains various utility methods as module methods.
Class Method Summary collapse
-
.gunzip(data) ⇒ Object
Zlib::GzipReader wrapper that unzips
data
. -
.gzip(data) ⇒ Object
Zlib::GzipWriter wrapper that zips
data
. -
.inflate(data) ⇒ Object
A Zlib::Inflate#inflate wrapper.
-
.popen(*command) ⇒ Object
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. -
.silent_system(*command) ⇒ Object
Invokes system, but silences all output.
-
.traverse_parents(directory) ⇒ Object
Enumerates the parents of
directory
.
Class Method Details
.gunzip(data) ⇒ Object
Zlib::GzipReader wrapper that unzips data
.
11 12 13 14 15 16 17 18 19 |
# File 'lib/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) ⇒ Object
Zlib::GzipWriter wrapper that zips data
.
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/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) ⇒ Object
A Zlib::Inflate#inflate wrapper
38 39 40 41 |
# File 'lib/rubygems/util.rb', line 38 def self.inflate(data) require 'zlib' Zlib::Inflate.inflate data end |
.popen(*command) ⇒ Object
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.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/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) ⇒ Object
Invokes system, but silences all output.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/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) ⇒ Object
Enumerates the parents of directory
.
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/rubygems/util.rb', line 98 def self.traverse_parents directory return enum_for __method__, directory unless block_given? here = File. 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 |