# frozen_string_literal: truemoduleGemDEFAULT_HOST="https://rubygems.org"@post_install_hooks||=[]@done_installing_hooks||=[]@post_uninstall_hooks||=[]@pre_uninstall_hooks||=[]@pre_install_hooks||=[]### An Array of the default sources that come with RubyGemsdefself.default_sources%w[https://rubygems.org/]end### Default spec directory path to be used if an alternate value is not# specified in the environmentdefself.default_spec_cache_dirdefault_spec_cache_dir=File.joinGem.user_home,".gem","specs"unlessFile.exist?(default_spec_cache_dir)default_spec_cache_dir=File.joinGem.cache_home,"gem","specs"enddefault_spec_cache_dirend### Default home directory path to be used if an alternate value is not# specified in the environmentdefself.default_dir@default_dir||=File.join(RbConfig::CONFIG["rubylibprefix"],"gems",RbConfig::CONFIG["ruby_version"])end### Returns binary extensions dir for specified RubyGems base dir or nil# if such directory cannot be determined.## By default, the binary extensions are located side by side with their# Ruby counterparts, therefore nil is returneddefself.default_ext_dir_for(base_dir)nilend### Paths where RubyGems' .rb files and bin files are installeddefself.default_rubygems_dirsnil# default to standard layoutend### Path to specification files of default gems.defself.default_specifications_dir@default_specifications_dir||=File.join(Gem.default_dir,"specifications","default")end### 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).#++#--##++defself.find_homeDir.home.duprescueStandardErrorifGem.win_platform?File.expand_pathFile.join(ENV["HOMEDRIVE"]||ENV["SystemDrive"],"/")elseFile.expand_path"/"endendprivate_class_method:find_home### The home directory for the user.defself.user_home@user_home||=find_homeend### Path for gems in the user's home directorydefself.user_dirgem_dir=File.join(Gem.user_home,".gem")gem_dir=File.join(Gem.data_home,"gem")unlessFile.exist?(gem_dir)parts=[gem_dir,ruby_engine]parts<<RbConfig::CONFIG["ruby_version"]unlessRbConfig::CONFIG["ruby_version"].empty?File.joinpartsend### The path to standard location of the user's configuration directory.defself.config_home@config_home||=ENV["XDG_CONFIG_HOME"]||File.join(Gem.user_home,".config")end### Finds the user's config filedefself.find_config_filegemrc=File.joinGem.user_home,".gemrc"ifFile.exist?gemrcgemrcelseFile.joinGem.config_home,"gem","gemrc"endend### The path to standard location of the user's .gemrc file.defself.config_file@config_file||=find_config_fileend### The path to standard location of the user's state file.defself.state_file@state_file||=File.join(Gem.state_home,"gem","last_update_check")end### The path to standard location of the user's cache directory.defself.cache_home@cache_home||=ENV["XDG_CACHE_HOME"]||File.join(Gem.user_home,".cache")end### The path to standard location of the user's data directory.defself.data_home@data_home||=ENV["XDG_DATA_HOME"]||File.join(Gem.user_home,".local","share")end### The path to standard location of the user's state directory.defself.state_home@state_home||=ENV["XDG_STATE_HOME"]||File.join(Gem.user_home,".local","state")end### How String Gem paths should be split. Overridable for esoteric platforms.defself.path_separatorFile::PATH_SEPARATORend### Default gem load pathdefself.default_pathpath=[]path<<user_dirifuser_home&&File.exist?(user_home)path<<default_dirpath<<vendor_dirifvendor_dir&&File.directory?(vendor_dir)pathend### Deduce Ruby's --program-prefix and --program-suffix from its install namedefself.default_exec_formatexec_format=beginRbConfig::CONFIG["ruby_install_name"].sub("ruby","%s")rescueStandardError"%s"endunlessexec_format.include?("%s")raiseGem::Exception,"[BUG] invalid exec_format #{exec_format.inspect}, no %s"endexec_formatend### The default directory for binariesdefself.default_bindirRbConfig::CONFIG["bindir"]enddefself.ruby_engineRUBY_ENGINEend### The default signing key pathdefself.default_key_pathdefault_key_path=File.joinGem.user_home,".gem","gem-private_key.pem"unlessFile.exist?(default_key_path)default_key_path=File.joinGem.data_home,"gem","gem-private_key.pem"enddefault_key_pathend### The default signing certificate chain pathdefself.default_cert_pathdefault_cert_path=File.joinGem.user_home,".gem","gem-public_cert.pem"unlessFile.exist?(default_cert_path)default_cert_path=File.joinGem.data_home,"gem","gem-public_cert.pem"enddefault_cert_pathend### Enables automatic installation into user directorydefself.default_user_install# :nodoc:if!ENV.key?("GEM_HOME")&&File.exist?(Gem.dir)&&!File.writable?(Gem.dir)Gem.ui.say"Defaulting to user installation because default installation directory (#{Gem.dir}) is not writable."returntrueendfalseend### Install extensions into lib as well as into the extension directory.defself.install_extension_in_lib# :nodoc:Gem.configuration.install_extension_in_libend### Directory where vendor gems are installed.defself.vendor_dir# :nodoc:ifvendor_dir=ENV["GEM_VENDOR"]returnvendor_dir.dupendreturnnilunlessRbConfig::CONFIG.key?"vendordir"File.joinRbConfig::CONFIG["vendordir"],"gems",RbConfig::CONFIG["ruby_version"]end### Default options for gem commands for Ruby packagers.## The options here should be structured as an array of string "gem"# command names as keys and a string of the default options as values.## Example:## def self.operating_system_defaults# {# 'install' => '--no-rdoc --no-ri --env-shebang',# 'update' => '--no-rdoc --no-ri --env-shebang'# }# enddefself.operating_system_defaults{}end### Default options for gem commands for Ruby implementers.## The options here should be structured as an array of string "gem"# command names as keys and a string of the default options as values.## Example:## def self.platform_defaults# {# 'install' => '--no-rdoc --no-ri --env-shebang',# 'update' => '--no-rdoc --no-ri --env-shebang'# }# enddefself.platform_defaults{}endend