Module: Gem::Util
- Defined in:
- lib/rubygems/util.rb
Overview
This module contains various utility methods as module methods.
Class Method Summary collapse
-
.glob_files_in_dir(glob, base_path) ⇒ Object
Globs for files matching
pattern
inside ofdirectory
, returning absolute paths to the matching files. -
.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, &block) ⇒ Object
Enumerates the parents of
directory
.
Class Method Details
.glob_files_in_dir(glob, base_path) ⇒ Object
Globs for files matching pattern
inside of directory
, returning absolute paths to the matching files.
123 124 125 126 127 128 129 |
# File 'lib/rubygems/util.rb', line 123 def self.glob_files_in_dir(glob, base_path) if RUBY_VERSION >= "2.5" Dir.glob(glob, base: base_path).map! {|f| File.join(base_path, f) } else Dir.glob(File.(glob, base_path)) end end |
.gunzip(data) ⇒ Object
Zlib::GzipReader wrapper that unzips data
.
12 13 14 15 16 17 18 19 20 |
# File 'lib/rubygems/util.rb', line 12 def self.gunzip(data) require 'zlib' require 'stringio' data = StringIO.new(data, 'r') unzipped = Zlib::GzipReader.new(data).read unzipped.force_encoding Encoding::BINARY unzipped end |
.gzip(data) ⇒ Object
Zlib::GzipWriter wrapper that zips data
.
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rubygems/util.rb', line 25 def self.gzip(data) require 'zlib' require 'stringio' zipped = StringIO.new(String.new, 'w') zipped.set_encoding Encoding::BINARY Zlib::GzipWriter.wrap zipped do |io| io.write data end zipped.string end |
.inflate(data) ⇒ Object
A Zlib::Inflate#inflate wrapper
39 40 41 42 |
# File 'lib/rubygems/util.rb', line 39 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.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rubygems/util.rb', line 49 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.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/rubygems/util.rb', line 73 def self.silent_system(*command) opt = {:out => IO::NULL, :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 @silent_mutex ||= Mutex.new @silent_mutex.synchronize do begin stdout = STDOUT.dup stderr = STDERR.dup STDOUT.reopen IO::NULL, 'w' STDERR.reopen IO::NULL, 'w' return system(*command) ensure STDOUT.reopen stdout STDERR.reopen stderr stdout.close stderr.close end end end |
.traverse_parents(directory, &block) ⇒ Object
Enumerates the parents of directory
.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/rubygems/util.rb', line 106 def self.traverse_parents(directory, &block) return enum_for __method__, directory unless block_given? here = File. directory loop do Dir.chdir here, &block rescue Errno::EACCES new_here = File.('..', here) return if new_here == here # toplevel here = new_here end end |