Module: Gem
- Defined in:
- lib/rubygems.rb,
lib/rubygems/defaults.rb,
lib/rubygems/gem_openssl.rb,
lib/rubygems/source_index.rb,
lib/rubygems/defaults/macruby.rb
Overview
:stopdoc:
Defined Under Namespace
Modules: Commands, DefaultUserInteraction, Ext, GemcutterUtilities, InstallUpdateOptions, LocalRemoteOptions, Package, RequirePathsBuilder, SSL, Security, Text, UserInteraction, VersionOption Classes: Builder, Command, CommandLineError, CommandManager, ConfigFile, ConsoleUI, Dependency, DependencyError, DependencyInstaller, DependencyList, DependencyRemovalException, DocManager, DocumentError, EndOfYAMLException, ErrorReason, Exception, FakeFetcher, FileOperations, FilePermissionError, Format, FormatException, GemNotFoundException, GemNotInHomeException, GemPathSearcher, GemRunner, Indexer, InstallError, Installer, InvalidSpecificationException, LoadError, OldFormat, OperationNotSupportedError, PackageTask, Platform, PlatformMismatch, RemoteError, RemoteFetcher, RemoteInstallationCancelled, RemoteInstallationSkipped, RemoteSourceException, Requirement, Server, SilentUI, SourceIndex, SourceInfoCache, SourceInfoCacheEntry, SpecFetcher, Specification, StreamUI, SystemExitException, Uninstaller, Validator, VerificationError, Version
Constant Summary
- RubyGemsVersion =
VERSION = '1.4.2'
- RbConfigPriorities =
EXEEXT RUBY_SO_NAME arch bindir datadir libdir ruby_install_name ruby_version rubylibprefix sitedir sitelibdir vendordir vendorlibdir ]
- ConfigMap =
Configuration settings from ::RbConfig
Hash.new do |cm, key| cm[key] = RbConfig::CONFIG[key.to_s] end
- DIRECTORIES =
%w[cache doc gems specifications]
- RubyGemsPackageVersion =
VERSION- WIN_PATTERNS =
An Array of Regexps that match windows ruby platforms.
[ /bccwin/i, /cygwin/i, /djgpp/i, /mingw/i, /mswin/i, /wince/i, ]
- MARSHAL_SPEC_DIR =
Location of Marshal quick gemspecs on remote repositories
"quick/Marshal.#{Gem.marshal_version}/"- YAML_SPEC_DIR =
Location of legacy YAML quick gemspecs on remote repositories
'quick/'- Cache =
Cache is an alias for SourceIndex to allow older YAMLized source index objects to load properly.
SourceIndex- @@source_index =
nil- @@win_platform =
nil
Class Attribute Summary (collapse)
-
+ (Object) loaded_specs
readonly
Hash of loaded Gem::Specification keyed by name.
-
+ (Object) post_install_hooks
readonly
The list of hooks to be run before Gem::Install#install does any work.
-
+ (Object) post_uninstall_hooks
readonly
The list of hooks to be run before Gem::Uninstall#uninstall does any work.
-
+ (Object) pre_install_hooks
readonly
The list of hooks to be run after Gem::Install#install is finished.
-
+ (Object) pre_uninstall_hooks
readonly
The list of hooks to be run after Gem::Uninstall#uninstall is finished.
-
+ (Object) ssl_available
writeonly
Is SSL available?.
Class Method Summary (collapse)
-
+ (Object) activate(gem, *requirements)
Activates an installed gem matching gem.
-
+ (Object) all_load_paths
An Array of all possible load paths for all versions of all gems in the Gem installation.
-
+ (Object) all_partials(gemdir)
Return all the partial paths in gemdir.
-
+ (Boolean) available?(gem, *requirements)
See if a given gem is available.
-
+ (Object) bin_path(name, exec_name = nil, *requirements)
Find the full path to the executable for gem name.
-
+ (Object) binary_mode
The mode needed to read a file as straight binary.
-
+ (Object) bindir(install_dir = Gem.dir)
The path where gem executables are to be installed.
-
+ (Object) clear_paths
Reset the dir and path values.
-
+ (Object) config_file
The path to standard location of the user's .gemrc file.
-
+ (Object) configuration
The standard configuration object for gems.
-
+ (Object) configuration=(config)
Use the given configuration object (which implements the ConfigFile protocol) as the standard configuration object.
-
+ (Object) datadir(gem_name)
The path the the data directory specified by the gem name.
-
+ (Object) default_bindir
The default directory for binaries.
-
+ (Object) default_dir
Default home directory path to be used if an alternate value is not specified in the environment.
-
+ (Object) default_exec_format
Deduce Ruby's --program-prefix and --program-suffix from its install name.
-
+ (Object) default_path
Default gem load path.
-
+ (Object) default_sources
An Array of the default sources that come with RubyGems.
-
+ (Object) default_system_source_cache_dir
The default system-wide source info cache directory.
-
+ (Object) default_user_source_cache_dir
The default user-specific source info cache directory.
-
+ (Object) deflate(data)
A Zlib::Deflate.deflate wrapper.
-
+ (Object) dir
The path where gems are to be installed.
-
+ (Object) each_load_path(partials)
Expand each partial gem path with each of the required paths specified in the Gem spec.
-
+ (Object) ensure_gem_subdirectories(gemdir)
Quietly ensure the named Gem directory contains all the proper subdirectories.
-
+ (Object) ensure_ssl_available
Ensure that SSL is available.
-
+ (Object) find_files(glob, check_load_path = true)
Returns a list of paths matching glob that can be used by a gem to pick up features from other gems.
-
+ (Object) find_home
Finds the user's home directory.
-
+ (Object) gunzip(data)
Zlib::GzipReader wrapper that unzips data.
-
+ (Object) gzip(data)
Zlib::GzipWriter wrapper that zips data.
-
+ (Object) host
Get the default RubyGems API host.
-
+ (Object) host=(host)
Set the default RubyGems API host.
-
+ (Object) inflate(data)
A Zlib::Inflate#inflate wrapper.
-
+ (Object) latest_load_paths
Return a list of all possible load paths for the latest version for all gems in the Gem installation.
-
+ (Object) latest_partials(gemdir)
Return only the latest partial paths in the given gemdir.
-
+ (Object) load_env_plugins
Find all 'rubygems_plugin' files in $LOAD_PATH and load them.
-
+ (Object) load_path_insert_index
The index to insert activated gem paths into the $LOAD_PATH.
-
+ (Object) load_plugin_files(plugins)
Load plugins as ruby files.
-
+ (Object) load_plugins
Find all 'rubygems_plugin' files in installed gems and load them.
-
+ (Object) location_of_caller
The file name and line number of the caller of the caller of this method.
-
+ (Object) marshal_version
The version of the Marshal format for your Ruby.
-
+ (Object) path
Array of paths to search for Gems.
-
+ (Object) platforms
Array of platforms this RubyGems supports.
-
+ (Object) platforms=(platforms)
Set array of platforms this RubyGems supports (primarily for testing).
-
+ (Object) post_install(&hook)
Adds a post-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called.
-
+ (Object) post_uninstall(&hook)
Adds a post-uninstall hook that will be passed a Gem::Uninstaller instance and the spec that was uninstalled when Gem::Uninstaller#uninstall is called.
-
+ (Object) pre_install(&hook)
Adds a pre-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called.
-
+ (Object) pre_uninstall(&hook)
Adds a pre-uninstall hook that will be passed an Gem::Uninstaller instance and the spec that will be uninstalled when Gem::Uninstaller#uninstall is called.
-
+ (Object) prefix
The directory prefix this RubyGems was installed at.
-
+ (Object) promote_load_path(gem_name, over_name)
Promotes the load paths of the gem_name over the load paths of over_name.
-
+ (Object) read_binary(path)
Safely read a file in binary mode on all platforms.
-
+ (Object) refresh
Refresh source_index from disk and clear searcher.
-
+ (Object) report_activate_error(gem)
Report a load error during activation.
-
+ (Object) required_location(gemname, libfile, *requirements)
Full path to libfile in gemname.
-
+ (Object) ruby
The path to the running Ruby interpreter.
-
+ (Object) ruby_engine
A wrapper around RUBY_ENGINE const that may not be defined.
-
+ (Object) ruby_version
A Gem::Version for the currently running ruby.
-
+ (Object) searcher
The GemPathSearcher object used to search for matching installed gems.
-
+ (Object) set_home(home)
Set the Gem home directory (as reported by Gem.dir).
-
+ (Object) set_paths(gpaths)
Set the Gem search path (as reported by Gem.path).
-
+ (Object) source_index
(also: cache)
Returns the Gem::SourceIndex of specifications that are in the Gem.path.
-
+ (Object) sources
Returns an Array of sources to fetch remote gems from.
-
+ (Object) sources=(new_sources)
Need to be able to set the sources without calling Gem.sources.replace since that would cause an infinite loop.
-
+ (Boolean) ssl_available?
Is SSL (used by the signing commands) available on this platform?.
-
+ (Object) suffix_pattern
Glob pattern for require-able path suffixes.
-
+ (Object) suffixes
Suffixes for require-able paths.
-
+ (Object) time(msg, width = 0, display = Gem.configuration.verbose)
Prints the amount of time the supplied block takes to run using the debug UI output.
-
+ (Object) ui
Lazily loads DefaultUserInteraction and returns the default UI.
-
+ (Object) use_paths(home, paths = [])
Use the home and paths values for Gem.dir and Gem.path.
-
+ (Object) user_dir
Path for gems in the user's home directory.
-
+ (Object) user_home
The home directory for the user.
-
+ (Boolean) win_platform?
Is this a windows platform?.
Class Attribute Details
+ (Object) loaded_specs (readonly)
Hash of loaded Gem::Specification keyed by name
1060 1061 1062 |
# File 'lib/rubygems.rb', line 1060 def loaded_specs @loaded_specs end |
+ (Object) post_install_hooks (readonly)
The list of hooks to be run before Gem::Install#install does any work
1065 1066 1067 |
# File 'lib/rubygems.rb', line 1065 def post_install_hooks @post_install_hooks end |
+ (Object) post_uninstall_hooks (readonly)
The list of hooks to be run before Gem::Uninstall#uninstall does any work
1071 1072 1073 |
# File 'lib/rubygems.rb', line 1071 def post_uninstall_hooks @post_uninstall_hooks end |
+ (Object) pre_install_hooks (readonly)
The list of hooks to be run after Gem::Install#install is finished
1076 1077 1078 |
# File 'lib/rubygems.rb', line 1076 def pre_install_hooks @pre_install_hooks end |
+ (Object) pre_uninstall_hooks (readonly)
The list of hooks to be run after Gem::Uninstall#uninstall is finished
1081 1082 1083 |
# File 'lib/rubygems.rb', line 1081 def pre_uninstall_hooks @pre_uninstall_hooks end |
+ (Object) ssl_available=(value) (writeonly)
Is SSL available?
26 27 28 |
# File 'lib/rubygems/gem_openssl.rb', line 26 def ssl_available=(value) @ssl_available = value end |
Class Method Details
+ (Object) activate(gem, *requirements)
Activates an installed gem matching gem. The gem must satisfy requirements.
Returns true if the gem is activated, false if it is already loaded, or an exception otherwise.
Gem#activate adds the library paths in gem to $LOAD_PATH. Before a Gem is activated its required Gems are activated. If the version information is omitted, the highest version Gem of the supplied name is loaded. If a Gem is not found that meets the version requirements or a required Gem is not found, a Gem::LoadError is raised.
More information on version requirements can be found in the Gem::Requirement and Gem::Version documentation.
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/rubygems.rb', line 204 def self.activate(gem, *requirements) if requirements.last.is_a?(Hash) = requirements.pop else = {} end sources = [:sources] || [] if requirements.empty? then requirements = Gem::Requirement.default end unless gem.respond_to?(:name) and gem.respond_to?(:requirement) then gem = Gem::Dependency.new(gem, requirements) end matches = Gem.source_index.find_name(gem.name, gem.requirement) report_activate_error(gem) if matches.empty? if @loaded_specs[gem.name] then # This gem is already loaded. If the currently loaded gem is not in the # list of candidate gems, then we have a version conflict. existing_spec = @loaded_specs[gem.name] unless matches.any? { |spec| spec.version == existing_spec.version } then = sources.map { |spec| spec.full_name } = @loaded_stacks[gem.name].map { |spec| spec.full_name } msg = "can't activate #{gem} for #{.inspect}, " msg << "already activated #{existing_spec.full_name} for " msg << "#{.inspect}" e = Gem::LoadError.new msg e.name = gem.name e.requirement = gem.requirement raise e end return false end # new load spec = matches.last return false if spec.loaded? spec.loaded = true @loaded_specs[spec.name] = spec @loaded_stacks[spec.name] = sources.dup # Load dependent gems first spec.runtime_dependencies.each do |dep_gem| activate dep_gem, :sources => [spec, *sources] end # bin directory must come before library directories spec.require_paths.unshift spec.bindir if spec.bindir require_paths = spec.require_paths.map do |path| File.join spec.full_gem_path, path end # gem directories must come after -I and ENV['RUBYLIB'] insert_index = load_path_insert_index if insert_index then # gem directories must come after -I and ENV['RUBYLIB'] $LOAD_PATH.insert(insert_index, *require_paths) else # we are probably testing in core, -I and RUBYLIB don't apply $LOAD_PATH.unshift(*require_paths) end return true end |
+ (Object) all_load_paths
An Array of all possible load paths for all versions of all gems in the Gem installation.
286 287 288 289 290 291 292 293 294 295 296 |
# File 'lib/rubygems.rb', line 286 def self.all_load_paths result = [] Gem.path.each do |gemdir| each_load_path all_partials(gemdir) do |load_path| result << load_path end end result end |
+ (Object) all_partials(gemdir)
Return all the partial paths in gemdir.
301 302 303 |
# File 'lib/rubygems.rb', line 301 def self.all_partials(gemdir) Dir[File.join(gemdir, 'gems/*')] end |
+ (Boolean) available?(gem, *requirements)
See if a given gem is available.
310 311 312 313 314 315 316 317 318 319 |
# File 'lib/rubygems.rb', line 310 def self.available?(gem, *requirements) requirements = Gem::Requirement.default if requirements.empty? unless gem.respond_to?(:name) and gem.respond_to?(:requirement) then gem = Gem::Dependency.new gem, requirements end !Gem.source_index.search(gem).empty? end |
+ (Object) bin_path(name, exec_name = nil, *requirements)
Find the full path to the executable for gem name. If the exec_name is not given, the gem's default_executable is chosen, otherwise the specified executable's path is returned. requirements allows you to specify specific gem versions.
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 |
# File 'lib/rubygems.rb', line 327 def self.bin_path(name, exec_name = nil, *requirements) requirements = Gem::Requirement.default if requirements.empty? specs = Gem.source_index.find_name(name, requirements) raise Gem::GemNotFoundException, "can't find gem #{name} (#{requirements})" if specs.empty? specs = specs.find_all do |spec| spec.executables.include?(exec_name) end if exec_name unless spec = specs.last msg = "can't find gem #{name} (#{requirements}) with executable #{exec_name}" raise Gem::GemNotFoundException, msg end exec_name ||= spec.default_executable unless exec_name msg = "no default executable for #{spec.full_name} and none given" raise Gem::Exception, msg end File.join(spec.full_gem_path, spec.bindir, exec_name) end |
+ (Object) binary_mode
The mode needed to read a file as straight binary.
357 358 359 |
# File 'lib/rubygems.rb', line 357 def self.binary_mode 'rb' end |
+ (Object) bindir(install_dir = Gem.dir)
The path where gem executables are to be installed.
364 365 366 367 368 |
# File 'lib/rubygems.rb', line 364 def self.bindir(install_dir=Gem.dir) return File.join(install_dir, 'bin') unless install_dir.to_s == Gem.default_dir Gem.default_bindir end |
+ (Object) clear_paths
Reset the dir and path values. The next time dir or path is requested, the values will be calculated from scratch. This is mainly used by the unit tests to provide test isolation.
375 376 377 378 379 380 381 382 383 |
# File 'lib/rubygems.rb', line 375 def self.clear_paths @gem_home = nil @gem_path = nil @user_home = nil @@source_index = nil @searcher = nil end |
+ (Object) config_file
The path to standard location of the user's .gemrc file.
388 389 390 |
# File 'lib/rubygems.rb', line 388 def self.config_file File.join Gem.user_home, '.gemrc' end |
+ (Object) configuration
The standard configuration object for gems.
395 396 397 |
# File 'lib/rubygems.rb', line 395 def self.configuration @configuration ||= Gem::ConfigFile.new [] end |
+ (Object) configuration=(config)
Use the given configuration object (which implements the ConfigFile protocol) as the standard configuration object.
403 404 405 |
# File 'lib/rubygems.rb', line 403 def self.configuration=(config) @configuration = config end |
+ (Object) datadir(gem_name)
The path the the data directory specified by the gem name. If the package is not available as a gem, return nil.
411 412 413 414 415 |
# File 'lib/rubygems.rb', line 411 def self.datadir(gem_name) spec = @loaded_specs[gem_name] return nil if spec.nil? File.join(spec.full_gem_path, 'data', gem_name) end |
+ (Object) default_bindir
The default directory for binaries
67 68 69 70 71 72 73 |
# File 'lib/rubygems/defaults.rb', line 67 def self.default_bindir if defined? RUBY_FRAMEWORK_VERSION then # mac framework support '/usr/bin' else # generic install ConfigMap[:bindir] end end |
+ (Object) default_dir
Default home directory path to be used if an alternate value is not specified in the environment
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/rubygems/defaults.rb', line 19 def self.default_dir if defined? RUBY_FRAMEWORK_VERSION then File.join File.dirname(ConfigMap[:sitedir]), 'Gems', ConfigMap[:ruby_version] elsif ConfigMap[:rubylibprefix] then File.join(ConfigMap[:rubylibprefix], 'gems', ConfigMap[:ruby_version]) else File.join(ConfigMap[:libdir], ruby_engine, 'gems', ConfigMap[:ruby_version]) end end |
+ (Object) default_exec_format
Deduce Ruby's --program-prefix and --program-suffix from its install name
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/rubygems/defaults.rb', line 53 def self.default_exec_format exec_format = ConfigMap[:ruby_install_name].sub('ruby', '%s') rescue '%s' unless exec_format =~ /%s/ then raise Gem::Exception, "[BUG] invalid exec_format #{exec_format.inspect}, no %s" end exec_format end |
+ (Object) default_path
Default gem load path
42 43 44 45 46 47 48 |
# File 'lib/rubygems/defaults.rb', line 42 def self.default_path if File.exist? Gem.user_home then [user_dir, default_dir] else [default_dir] end end |
+ (Object) default_sources
An Array of the default sources that come with RubyGems
11 12 13 |
# File 'lib/rubygems/defaults.rb', line 11 def self.default_sources %w[http://rubygems.org/] end |
+ (Object) default_system_source_cache_dir
The default system-wide source info cache directory
78 79 80 |
# File 'lib/rubygems/defaults.rb', line 78 def self.default_system_source_cache_dir File.join Gem.dir, 'source_cache' end |
+ (Object) default_user_source_cache_dir
The default user-specific source info cache directory
85 86 87 |
# File 'lib/rubygems/defaults.rb', line 85 def self.default_user_source_cache_dir File.join Gem.user_home, '.gem', 'source_cache' end |
+ (Object) deflate(data)
A Zlib::Deflate.deflate wrapper
420 421 422 423 |
# File 'lib/rubygems.rb', line 420 def self.deflate(data) require 'zlib' Zlib::Deflate.deflate data end |
+ (Object) dir
The path where gems are to be installed.
428 429 430 431 432 |
# File 'lib/rubygems.rb', line 428 def self.dir @gem_home ||= nil set_home(ENV['GEM_HOME'] || Gem.configuration.home || default_dir) unless @gem_home @gem_home end |
+ (Object) each_load_path(partials)
Expand each partial gem path with each of the required paths specified in the Gem spec. Each expanded path is yielded.
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 |
# File 'lib/rubygems.rb', line 438 def self.each_load_path(partials) partials.each do |gp| base = File.basename(gp) specfn = File.join(dir, "specifications", base + ".gemspec") if File.exist?(specfn) spec = eval(File.read(specfn)) spec.require_paths.each do |rp| yield(File.join(gp, rp)) end else filename = File.join(gp, 'lib') yield(filename) if File.exist?(filename) end end end |
+ (Object) ensure_gem_subdirectories(gemdir)
Quietly ensure the named Gem directory contains all the proper subdirectories. If we can't create a directory due to a permission problem, then we will silently continue.
461 462 463 464 465 466 467 468 |
# File 'lib/rubygems.rb', line 461 def self.ensure_gem_subdirectories(gemdir) require 'fileutils' Gem::DIRECTORIES.each do |filename| fn = File.join gemdir, filename FileUtils.mkdir_p fn rescue nil unless File.exist? fn end end |
+ (Object) ensure_ssl_available
Ensure that SSL is available. Throw an exception if it is not.
31 32 33 34 35 |
# File 'lib/rubygems/gem_openssl.rb', line 31 def ensure_ssl_available unless ssl_available? raise Gem::Exception, "SSL is not installed on this system" end end |
+ (Object) find_files(glob, check_load_path = true)
Returns a list of paths matching glob that can be used by a gem to pick up features from other gems. For example:
Gem.find_files('rdoc/discover').each do |path| load path end
if check_load_path is true (the default), then find_files also searches $LOAD_PATH for files as well as gems.
Note that find_files will return all files even if they are from different versions of the same gem.
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 |
# File 'lib/rubygems.rb', line 482 def self.find_files(glob, check_load_path=true) files = [] if check_load_path $LOAD_PATH.each do |load_path| globbed = Dir["#{File. glob, load_path}#{Gem.suffix_pattern}"] globbed.each do |load_path_file| files << load_path_file if File.file?(load_path_file.untaint) end end end specs = searcher.find_all glob specs.each do |spec| files.concat searcher.matching_files(spec, glob) end # $LOAD_PATH might contain duplicate entries or reference # the spec dirs directly, so we prune. files.uniq! if check_load_path return files end |
+ (Object) find_home
Finds the user's home directory. -- Some comments from the ruby-talk list regarding finding the home directory:
I have HOME, USERPROFILE and HOMEDRIVE + HOMEPATH. Ruby seems
to be depending on HOME in those code samples. I propose that
it should fallback to USERPROFILE and HOMEDRIVE + HOMEPATH (at
least on Win32).
519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 |
# File 'lib/rubygems.rb', line 519 def self.find_home unless RUBY_VERSION > '1.9' then ['HOME', 'USERPROFILE'].each do |homekey| return File.(ENV[homekey]) if ENV[homekey] end if ENV['HOMEDRIVE'] && ENV['HOMEPATH'] then return File.("#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}") end end File. "~" rescue if File::ALT_SEPARATOR then drive = ENV['HOMEDRIVE'] || ENV['SystemDrive'] File.join(drive.to_s, '/') else "/" end end |
+ (Object) gunzip(data)
Zlib::GzipReader wrapper that unzips data.
545 546 547 548 549 550 551 |
# File 'lib/rubygems.rb', line 545 def self.gunzip(data) require 'stringio' require 'zlib' data = StringIO.new data Zlib::GzipReader.new(data).read end |
+ (Object) gzip(data)
Zlib::GzipWriter wrapper that zips data.
556 557 558 559 560 561 562 563 564 |
# File 'lib/rubygems.rb', line 556 def self.gzip(data) require 'stringio' require 'zlib' zipped = StringIO.new Zlib::GzipWriter.wrap zipped do |io| io.write data end zipped.string end |
+ (Object) host
Get the default RubyGems API host. This is normally https://rubygems.org.
578 579 580 |
# File 'lib/rubygems.rb', line 578 def self.host @host ||= "https://rubygems.org" end |
+ (Object) host=(host)
Set the default RubyGems API host.
584 585 586 |
# File 'lib/rubygems.rb', line 584 def self.host= host @host = host end |
+ (Object) inflate(data)
A Zlib::Inflate#inflate wrapper
569 570 571 572 |
# File 'lib/rubygems.rb', line 569 def self.inflate(data) require 'zlib' Zlib::Inflate.inflate data end |
+ (Object) latest_load_paths
Return a list of all possible load paths for the latest version for all gems in the Gem installation.
592 593 594 595 596 597 598 599 600 601 602 |
# File 'lib/rubygems.rb', line 592 def self.latest_load_paths result = [] Gem.path.each do |gemdir| each_load_path(latest_partials(gemdir)) do |load_path| result << load_path end end result end |
+ (Object) latest_partials(gemdir)
Return only the latest partial paths in the given gemdir.
607 608 609 610 611 612 613 614 615 616 617 618 619 620 |
# File 'lib/rubygems.rb', line 607 def self.latest_partials(gemdir) latest = {} all_partials(gemdir).each do |gp| base = File.basename(gp) if base =~ /(.*)-((\d+\.)*\d+)/ then name, version = $1, $2 ver = Gem::Version.new(version) if latest[name].nil? || ver > latest[name][0] latest[name] = [ver, gp] end end end latest.collect { |k,v| v[1] } end |
+ (Object) load_env_plugins
Find all 'rubygems_plugin' files in $LOAD_PATH and load them
1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 |
# File 'lib/rubygems.rb', line 1040 def self.load_env_plugins path = "rubygems_plugin" files = [] $LOAD_PATH.each do |load_path| globbed = Dir["#{File. path, load_path}#{Gem.suffix_pattern}"] globbed.each do |load_path_file| files << load_path_file if File.file?(load_path_file.untaint) end end load_plugin_files files end |
+ (Object) load_path_insert_index
The index to insert activated gem paths into the $LOAD_PATH.
Defaults to the site lib directory unless gem_prelude.rb has loaded paths, then it inserts the activated gem's paths before the gem_prelude.rb paths so you can override the gem_prelude.rb default $LOAD_PATH paths.
631 632 633 634 635 636 637 638 639 640 641 642 643 |
# File 'lib/rubygems.rb', line 631 def self.load_path_insert_index index = $LOAD_PATH.index ConfigMap[:sitelibdir] $LOAD_PATH.each_with_index do |path, i| if path.instance_variables.include?(:@gem_prelude_index) or path.instance_variables.include?('@gem_prelude_index') then index = i break end end index end |
+ (Object) load_plugin_files(plugins)
Load plugins as ruby files
1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 |
# File 'lib/rubygems.rb', line 1013 def self.load_plugin_files(plugins) plugins.each do |plugin| # Skip older versions of the GemCutter plugin: Its commands are in # RubyGems proper now. next if plugin =~ /gemcutter-0\.[0-3]/ begin load plugin rescue ::Exception => e details = "#{plugin.inspect}: #{e.} (#{e.class})" warn "Error loading RubyGems plugin #{details}" end end end |
+ (Object) load_plugins
Find all 'rubygems_plugin' files in installed gems and load them
1033 1034 1035 |
# File 'lib/rubygems.rb', line 1033 def self.load_plugins load_plugin_files find_files('rubygems_plugin', false) end |
+ (Object) location_of_caller
The file name and line number of the caller of the caller of this method.
648 649 650 651 652 653 654 |
# File 'lib/rubygems.rb', line 648 def self.location_of_caller caller[1] =~ /(.*?):(\d+).*?$/i file = $1 lineno = $2.to_i [file, lineno] end |
+ (Object) marshal_version
The version of the Marshal format for your Ruby.
659 660 661 |
# File 'lib/rubygems.rb', line 659 def self.marshal_version "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}" end |
+ (Object) path
Array of paths to search for Gems.
666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 |
# File 'lib/rubygems.rb', line 666 def self.path @gem_path ||= nil unless @gem_path then paths = [ENV['GEM_PATH'] || Gem.configuration.path || default_path] if defined?(APPLE_GEM_HOME) and not ENV['GEM_PATH'] then paths << APPLE_GEM_HOME end set_paths paths.compact.join(File::PATH_SEPARATOR) end @gem_path end |
+ (Object) platforms
Array of platforms this RubyGems supports.
692 693 694 695 696 697 698 |
# File 'lib/rubygems.rb', line 692 def self.platforms @platforms ||= [] if @platforms.empty? @platforms = [Gem::Platform::RUBY, Gem::Platform.local] end @platforms end |
+ (Object) platforms=(platforms)
Set array of platforms this RubyGems supports (primarily for testing).
685 686 687 |
# File 'lib/rubygems.rb', line 685 def self.platforms=(platforms) @platforms = platforms end |
+ (Object) post_install(&hook)
Adds a post-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called
704 705 706 |
# File 'lib/rubygems.rb', line 704 def self.post_install(&hook) @post_install_hooks << hook end |
+ (Object) post_uninstall(&hook)
Adds a post-uninstall hook that will be passed a Gem::Uninstaller instance and the spec that was uninstalled when Gem::Uninstaller#uninstall is called
713 714 715 |
# File 'lib/rubygems.rb', line 713 def self.post_uninstall(&hook) @post_uninstall_hooks << hook end |
+ (Object) pre_install(&hook)
Adds a pre-install hook that will be passed an Gem::Installer instance when Gem::Installer#install is called
721 722 723 |
# File 'lib/rubygems.rb', line 721 def self.pre_install(&hook) @pre_install_hooks << hook end |
+ (Object) pre_uninstall(&hook)
Adds a pre-uninstall hook that will be passed an Gem::Uninstaller instance and the spec that will be uninstalled when Gem::Uninstaller#uninstall is called
730 731 732 |
# File 'lib/rubygems.rb', line 730 def self.pre_uninstall(&hook) @pre_uninstall_hooks << hook end |
+ (Object) prefix
The directory prefix this RubyGems was installed at.
737 738 739 740 741 742 743 744 745 746 747 748 |
# File 'lib/rubygems.rb', line 737 def self.prefix dir = File.dirname File.(__FILE__) prefix = File.dirname dir if prefix == File.(ConfigMap[:sitelibdir]) or prefix == File.(ConfigMap[:libdir]) or 'lib' != File.basename(dir) then nil else prefix end end |
+ (Object) promote_load_path(gem_name, over_name)
Promotes the load paths of the gem_name over the load paths of over_name. Useful for allowing one gem to override features in another using #find_files.
755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 |
# File 'lib/rubygems.rb', line 755 def self.promote_load_path(gem_name, over_name) gem = Gem.loaded_specs[gem_name] over = Gem.loaded_specs[over_name] raise ArgumentError, "gem #{gem_name} is not activated" if gem.nil? raise ArgumentError, "gem #{over_name} is not activated" if over.nil? last_gem_path = File.join gem.full_gem_path, gem.require_paths.last over_paths = over.require_paths.map do |path| File.join over.full_gem_path, path end over_paths.each do |path| $LOAD_PATH.delete path end gem = $LOAD_PATH.index(last_gem_path) + 1 $LOAD_PATH.insert(gem, *over_paths) end |
+ (Object) read_binary(path)
Safely read a file in binary mode on all platforms.
789 790 791 |
# File 'lib/rubygems.rb', line 789 def self.read_binary(path) File.open path, binary_mode do |f| f.read end end |
+ (Object) refresh
Refresh source_index from disk and clear searcher.
780 781 782 783 784 |
# File 'lib/rubygems.rb', line 780 def self.refresh source_index.refresh! @searcher = nil end |
+ (Object) report_activate_error(gem)
Report a load error during activation. The message of load error depends on whether it was a version mismatch or if there are not gems of any version by the requested name.
798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 |
# File 'lib/rubygems.rb', line 798 def self.report_activate_error(gem) matches = Gem.source_index.find_name(gem.name) if matches.empty? then error = Gem::LoadError.new( "Could not find RubyGem #{gem.name} (#{gem.requirement})\n") else error = Gem::LoadError.new( "RubyGem version error: " + "#{gem.name}(#{matches.first.version} not #{gem.requirement})\n") end error.name = gem.name error.requirement = gem.requirement raise error end |
+ (Object) required_location(gemname, libfile, *requirements)
Full path to libfile in gemname. Searches for the latest gem unless requirements is given.
821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 |
# File 'lib/rubygems.rb', line 821 def self.required_location(gemname, libfile, *requirements) requirements = Gem::Requirement.default if requirements.empty? matches = Gem.source_index.find_name gemname, requirements return nil if matches.empty? spec = matches.last spec.require_paths.each do |path| result = File.join spec.full_gem_path, path, libfile return result if File.exist? result end nil end |
+ (Object) ruby
The path to the running Ruby interpreter.
840 841 842 843 844 845 846 847 848 849 850 851 |
# File 'lib/rubygems.rb', line 840 def self.ruby if @ruby.nil? then @ruby = File.join(ConfigMap[:bindir], ConfigMap[:ruby_install_name]) @ruby << ConfigMap[:EXEEXT] # escape string in case path to ruby executable contain spaces. @ruby.sub!(/.*\s.*/m, '"\&"') end @ruby end |
+ (Object) ruby_engine
A wrapper around RUBY_ENGINE const that may not be defined
92 93 94 95 96 97 98 |
# File 'lib/rubygems/defaults.rb', line 92 def self.ruby_engine if defined? RUBY_ENGINE then RUBY_ENGINE else 'ruby' end end |
+ (Object) ruby_version
A Gem::Version for the currently running ruby.
856 857 858 859 860 861 862 863 864 865 866 867 |
# File 'lib/rubygems.rb', line 856 def self.ruby_version return @ruby_version if defined? @ruby_version version = RUBY_VERSION.dup if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1 then version << ".#{RUBY_PATCHLEVEL}" elsif defined?(RUBY_REVISION) then version << ".dev.#{RUBY_REVISION}" end @ruby_version = Gem::Version.new version end |
+ (Object) searcher
The GemPathSearcher object used to search for matching installed gems.
872 873 874 |
# File 'lib/rubygems.rb', line 872 def self.searcher @searcher ||= Gem::GemPathSearcher.new end |
+ (Object) set_home(home)
Set the Gem home directory (as reported by Gem.dir).
879 880 881 882 |
# File 'lib/rubygems.rb', line 879 def self.set_home(home) home = home.gsub File::ALT_SEPARATOR, File::SEPARATOR if File::ALT_SEPARATOR @gem_home = home end |
+ (Object) set_paths(gpaths)
Set the Gem search path (as reported by Gem.path).
889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 |
# File 'lib/rubygems.rb', line 889 def self.set_paths(gpaths) if gpaths @gem_path = gpaths.split(File::PATH_SEPARATOR) if File::ALT_SEPARATOR then @gem_path.map! do |path| path.gsub File::ALT_SEPARATOR, File::SEPARATOR end end @gem_path << Gem.dir else # TODO: should this be Gem.default_path instead? @gem_path = [Gem.dir] end @gem_path.uniq! end |
+ (Object) source_index Also known as: cache
Returns the Gem::SourceIndex of specifications that are in the Gem.path
913 914 915 |
# File 'lib/rubygems.rb', line 913 def self.source_index @@source_index ||= SourceIndex.from_installed_gems end |
+ (Object) sources
Returns an Array of sources to fetch remote gems from. If the sources list is empty, attempts to load the "sources" gem, then uses default_sources if it is not installed.
922 923 924 925 926 927 928 929 930 931 932 933 |
# File 'lib/rubygems.rb', line 922 def self.sources if @sources.empty? then begin gem 'sources', '> 0.0.1' require 'sources' rescue LoadError @sources = default_sources end end @sources end |
+ (Object) sources=(new_sources)
Need to be able to set the sources without calling Gem.sources.replace since that would cause an infinite loop.
939 940 941 |
# File 'lib/rubygems.rb', line 939 def self.sources=(new_sources) @sources = new_sources end |
+ (Boolean) ssl_available?
Is SSL (used by the signing commands) available on this platform?
19 20 21 |
# File 'lib/rubygems/gem_openssl.rb', line 19 def ssl_available? @ssl_available end |
+ (Object) suffix_pattern
Glob pattern for require-able path suffixes.
946 947 948 |
# File 'lib/rubygems.rb', line 946 def self.suffix_pattern @suffix_pattern ||= "{#{suffixes.join(',')}}" end |
+ (Object) suffixes
Suffixes for require-able paths.
953 954 955 |
# File 'lib/rubygems.rb', line 953 def self.suffixes ['', '.rb', '.rbw', '.so', '.bundle', '.dll', '.sl', '.jar'] end |
+ (Object) time(msg, width = 0, display = Gem.configuration.verbose)
Prints the amount of time the supplied block takes to run using the debug UI output.
961 962 963 964 965 966 967 968 969 970 971 |
# File 'lib/rubygems.rb', line 961 def self.time(msg, width = 0, display = Gem.configuration.verbose) now = Time.now value = yield elapsed = Time.now - now ui.say "%2$*1$s: %3$3.3fs" % [-width, msg, elapsed] if display value end |
+ (Object) ui
Lazily loads DefaultUserInteraction and returns the default UI.
976 977 978 979 980 |
# File 'lib/rubygems.rb', line 976 def self.ui require 'rubygems/user_interaction' Gem::DefaultUserInteraction.ui end |
+ (Object) use_paths(home, paths = [])
Use the home and paths values for Gem.dir and Gem.path. Used mainly by the unit tests to provide environment isolation.
986 987 988 989 990 |
# File 'lib/rubygems.rb', line 986 def self.use_paths(home, paths=[]) clear_paths set_home(home) if home set_paths(paths.join(File::PATH_SEPARATOR)) if paths end |
+ (Object) user_dir
Path for gems in the user's home directory
35 36 37 |
# File 'lib/rubygems/defaults.rb', line 35 def self.user_dir File.join Gem.user_home, '.gem', ruby_engine, ConfigMap[:ruby_version] end |
+ (Object) user_home
The home directory for the user.
995 996 997 |
# File 'lib/rubygems.rb', line 995 def self.user_home @user_home ||= find_home end |
+ (Boolean) win_platform?
Is this a windows platform?
1002 1003 1004 1005 1006 1007 1008 |
# File 'lib/rubygems.rb', line 1002 def self.win_platform? if @@win_platform.nil? then @@win_platform = !!WIN_PATTERNS.find { |r| RUBY_PLATFORM =~ r } end @@win_platform end |