Modul Gem
RubyGems ist der Ruby-Standard für die Veröffentlichung und Verwaltung von Drittanbieterbibliotheken.
Für Benutzerdokumentation siehe
-
gem helpundgem help [command]
Für Dokumentation für Gem-Entwickler siehe
-
Gem::Versionfür Hinweise zu Versionsabhängigkeiten
Weitere RubyGems-Dokumentation finden Sie unter
-
RubyGems API (auch verfügbar über
gem server)
RubyGems Plugins
RubyGems lädt Plugins in der neuesten Version jedes installierten Gems oder in $LOAD_PATH. Plugins müssen ‘rubygems_plugin’ (.rb, .so, etc) heißen und sich im Stammverzeichnis des require_path Ihres Gems befinden. Plugins werden an einem speziellen Ort installiert und beim Booten geladen.
Ein Beispiel für ein Plugin finden Sie im Graph Gem, das einen gem graph Befehl hinzufügt.
RubyGems Standardwerte, Verpackung
RubyGems Standardwerte werden in lib/rubygems/defaults.rb gespeichert. Wenn Sie RubyGems verpacken oder Ruby implementieren, können Sie die RubyGems-Standardwerte ändern.
Für RubyGems-Packer stellen Sie lib/rubygems/defaults/operating_system.rb bereit und überschreiben Sie alle Standardwerte aus lib/rubygems/defaults.rb.
Für Ruby-Implementierer stellen Sie lib/rubygems/defaults/#{RUBY_ENGINE}.rb bereit und überschreiben Sie alle Standardwerte aus lib/rubygems/defaults.rb.
Wenn Sie möchten, dass RubyGems bei der Installation oder Deinstallation zusätzliche Arbeiten durchführt, kann Ihre Standardwert-Überschreibungsdatei Pre-/Post-Installations- und Deinstallationshaken festlegen. Siehe Gem::pre_install, Gem::pre_uninstall, Gem::post_install, Gem::post_uninstall.
Fehler
Sie können Fehler im RubyGems Bug Tracker auf GitHub melden.
Danksagungen
RubyGems wird derzeit von Eric Hodel gepflegt.
RubyGems wurde ursprünglich auf der RubyConf 2003 von entwickelt
-
Rich Kilmer – rich(at)infoether.com
-
Chad Fowler – chad(at)chadfowler.com
-
David Black – dblack(at)wobblini.net
-
Paul Brannan – paul(at)atdesk.com
-
Jim Weirich – jim(at)weirichhouse.org
Mitwirkende
-
Gavin Sinclair – gsinclair(at)soyabean.com.au
-
George Marrows – george.marrows(at)ntlworld.com
-
Dick Davies – rasputnik(at)hellooperator.net
-
Mauricio Fernandez – batsman.geo(at)yahoo.com
-
Simon Strandgaard – neoneye(at)adslhome.dk
-
Dave Glasser – glasser(at)mit.edu
-
Paul Duncan – pabs(at)pablotron.org
-
Ville Aine – vaine(at)cs.helsinki.fi
-
Eric Hodel – drbrain(at)segment7.net
-
Daniel Berger – djberg96(at)gmail.com
-
Phil Hagelberg – technomancy(at)gmail.com
-
Ryan Davis – ryand-ruby(at)zenspider.com
-
Evan Phoenix – evan(at)fallingsnow.net
-
Steve Klabnik – steve(at)steveklabnik.com
(Wenn Ihr Name fehlt, BITTE lassen Sie es uns wissen!)
Lizenz
Siehe LICENSE.txt für Berechtigungen.
Danke!
-Das RubyGems-Team
Constants
- DEFAULT_HOST
- DEFAULT_SOURCE_DATE_EPOCH
-
Der Standardwert für SOURCE_DATE_EPOCH, wenn er nicht angegeben ist. Wir möchten ein Datum nach dem 01.01.1980, um Probleme mit Zip-Dateien zu vermeiden. Dieser spezielle Zeitstempel gilt für den 02.01.1980, 00:00:00 GMT.
- GEM_DEP_FILES
- LOADED_SPECS_MUTEX
- MARSHAL_SPEC_DIR
-
Speicherort von
Marshal-Schnell-Gemspecs in Remote-Repositorys - RDoc
- REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES
-
Unterverzeichnisse in einem Gem-Repository für Standard-Gems
- REPOSITORY_SUBDIRECTORIES
-
Unterverzeichnisse in einem Gem-Repository
- RUBYGEMS_DIR
- VERSION
- WIN_PATTERNS
-
Ein
Arrayvon Regexps, die Windows-Ruby-Plattformen abgleichen.
Attribute
RubyGems-Distributoren (wie Betriebssystem-Paketmanager) können RubyGems-Updates deaktivieren, indem sie dies auf eine Fehlermeldung setzen, die Endbenutzern bei gem update --system angezeigt wird, anstelle des tatsächlichen Updates.
Ob RubyGems das eingebaute `require` verbessern soll, um automatisch zu prüfen, ob der angeforderte Pfad in installierten Gems vorhanden ist, und sie automatisch zu aktivieren und zu `$LOAD_PATH` hinzuzufügen.
Die Liste der Hooks, die nach der Installation einer Reihe von Gems durch Gem::DependencyInstaller ausgeführt werden.
GemDependencyAPI-Objekt, das gesetzt wird, wenn .use_gemdeps aufgerufen wird. Dies enthält alle Informationen aus der Gemfile.
Hash der geladenen Gem::Specification, indiziert nach Namen
Die Liste der Hooks, die nach dem Extrahieren von Dateien und dem Erstellen von Erweiterungen durch Gem::Installer#install ausgeführt werden.
Die Liste der Hooks, die nach Abschluss der Installation durch Gem::Installer#install ausgeführt werden.
Die Liste der Hooks, die ausgeführt werden, nachdem Gem::Specification.reset ausgeführt wurde.
Die Liste der Hooks, die nach Abschluss der Deinstallation durch Gem::Uninstaller#uninstall ausgeführt werden.
Die Liste der Hooks, die ausgeführt werden, bevor Gem::Installer#install irgendeine Arbeit verrichtet.
Die Liste der Hooks, die ausgeführt werden, bevor Gem::Specification.reset ausgeführt wird.
Die Liste der Hooks, die ausgeführt werden, bevor Gem::Uninstaller#uninstall irgendeine Arbeit verrichtet.
Öffentliche Klassenmethoden
Source
# File lib/rubygems.rb, line 281 def self.activate_and_load_bin_path(name, exec_name = nil, *requirements) spec = find_and_activate_spec_for_exe name, exec_name, requirements if spec.name == "bundler" # Old versions of Bundler need a workaround to support nested `bundle # exec` invocations by overriding `Gem.activate_bin_path`. However, # RubyGems now uses this new `Gem.activate_and_load_bin_path` helper in # binstubs, which is of course not overridden in Bundler since it didn't # exist at the time. So, include the override here to workaround that. load ENV["BUNDLE_BIN_PATH"] if ENV["BUNDLE_BIN_PATH"] && spec.version <= Gem::Version.create("2.5.22") # Make sure there's no version of Bundler in `$LOAD_PATH` that's different # from the version we just activated. If that was the case (it happens # when testing Bundler from ruby/ruby), we would load Bundler extensions # to RubyGems from the copy in `$LOAD_PATH` but then load the binstub from # an installed copy, causing those copies to be mixed and yet more # redefinition warnings. # require_path = $LOAD_PATH.resolve_feature_path("bundler").last.delete_suffix("/bundler.rb") Gem.load_bundler_extensions(spec.version) if spec.full_require_paths.include?(require_path) end load spec.bin_file(exec_name) end
Suchen und laden Sie den vollständigen Pfad zur ausführbaren Datei für das Gem name. Wenn exec_name nicht angegeben ist, wird eine Ausnahme ausgelöst, andernfalls wird der Pfad der angegebenen ausführbaren Datei zurückgegeben. requirements ermöglicht es Ihnen, spezifische Gem-Versionen anzugeben.
Eine Nebenwirkung dieser Methode ist, dass das Gem, das die ausführbare Datei enthält, aktiviert wird.
Diese Methode sollte **nur** in Binärstub-Dateien verwendet werden.
Source
# File lib/rubygems.rb, line 624 def self.activated_gem_paths @activated_gem_paths ||= 0 end
Die Anzahl der Pfade in +$LOAD_PATH+ von aktivierten Gems. Wird verwendet, um Einträge von -I und ENV['RUBYLIB'] während des require zu priorisieren.
Source
# File lib/rubygems.rb, line 631 def self.add_to_load_path(*paths) @activated_gem_paths = activated_gem_paths + paths.size # gem directories must come after -I and ENV['RUBYLIB'] $LOAD_PATH.insert(Gem.load_path_insert_index, *paths) end
Fügen Sie eine Liste von Pfaden am richtigen Ort zu $LOAD_PATH hinzu.
Source
# File lib/rubygems.rb, line 229 def self.bin_path(name, exec_name = nil, *requirements) requirements = Gem::Requirement.default if requirements.empty? find_spec_for_exe(name, exec_name, requirements).bin_file exec_name end
Finden Sie den vollständigen Pfad zur ausführbaren Datei für das Gem name. Wenn exec_name nicht angegeben ist, wird eine Ausnahme ausgelöst, andernfalls wird der Pfad der angegebenen ausführbaren Datei zurückgegeben. requirements ermöglicht es Ihnen, spezifische Gem-Versionen anzugeben.
Source
# File lib/rubygems.rb, line 324 def self.binary_mode "rb" end
Der Modus, der zum Lesen einer Datei als reiner Binärdatei erforderlich ist.
Source
# File lib/rubygems.rb, line 331 def self.bindir(install_dir = Gem.dir) return File.join install_dir, "bin" unless install_dir.to_s == Gem.default_dir.to_s Gem.default_bindir end
Der Pfad, an dem Gem-Binärdateien installiert werden sollen.
Source
# File lib/rubygems/defaults.rb, line 147 def self.cache_home @cache_home ||= ENV["XDG_CACHE_HOME"] || File.join(Gem.user_home, ".cache") end
Der Pfad zum Standardort des Cache-Verzeichnisses des Benutzers.
Source
# File lib/rubygems.rb, line 1317 def clear_default_specs @path_to_default_spec_map.clear end
Löschen Sie gem-bezogene Standardvariablen. Dies dient zu Testzwecken.
Source
# File lib/rubygems.rb, line 349 def self.clear_paths @paths = nil @user_home = nil Gem::Specification.reset Gem::Security.reset if defined?(Gem::Security) end
Setzen Sie die Werte dir und path zurück. Beim nächsten Aufruf von dir oder path werden die Werte neu berechnet. Dies wird hauptsächlich von den Unit-Tests verwendet, um Testisolation zu gewährleisten.
Source
# File lib/rubygems/defaults.rb, line 133 def self.config_file @config_file ||= find_config_file end
Der Pfad zum Standardort der .gemrc-Datei des Benutzers.
Source
# File lib/rubygems/defaults.rb, line 114 def self.config_home @config_home ||= ENV["XDG_CONFIG_HOME"] || File.join(Gem.user_home, ".config") end
Der Pfad zum Standardort des Konfigurationsverzeichnisses des Benutzers.
Source
# File lib/rubygems.rb, line 359 def self.configuration @configuration ||= Gem::ConfigFile.new [] end
Das Standard-Konfigurationsobjekt für Gems.
Source
# File lib/rubygems.rb, line 367 def self.configuration=(config) @configuration = config end
Verwenden Sie das gegebene Konfigurationsobjekt (das das ConfigFile-Protokoll implementiert) als Standard-Konfigurationsobjekt.
Source
# File lib/rubygems/defaults.rb, line 154 def self.data_home @data_home ||= ENV["XDG_DATA_HOME"] || File.join(Gem.user_home, ".local", "share") end
Der Pfad zum Standardort des Datenverzeichnisses des Benutzers.
Source
# File lib/rubygems/defaults.rb, line 204 def self.default_bindir RbConfig::CONFIG["bindir"] end
Das Standardverzeichnis für Binärdateien.
Source
# File lib/rubygems/defaults.rb, line 228 def self.default_cert_path default_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem" unless File.exist?(default_cert_path) default_cert_path = File.join Gem.data_home, "gem", "gem-public_cert.pem" end default_cert_path end
Der Pfad zur Standard-Signaturzertifikatskette.
Source
# File lib/rubygems/defaults.rb, line 37 def self.default_dir @default_dir ||= File.join(RbConfig::CONFIG["rubylibprefix"], "gems", RbConfig::CONFIG["ruby_version"]) end
Standard-Stammverzeichnis, das verwendet wird, wenn kein alternativer Wert in der Umgebung angegeben ist.
Source
# File lib/rubygems/defaults.rb, line 186 def self.default_exec_format exec_format = begin RbConfig::CONFIG["ruby_install_name"].sub("ruby", "%s") rescue StandardError "%s" end unless exec_format.include?("%s") raise Gem::Exception, "[BUG] invalid exec_format #{exec_format.inspect}, no %s" end exec_format end
Leiten Sie Ruby's --program-prefix und --program-suffix von seinem Installationsnamen ab.
Source
# File lib/rubygems/defaults.rb, line 48 def self.default_ext_dir_for(base_dir) nil end
Gibt das Verzeichnis für Binärerweiterungen für das angegebene RubyGems-Basisverzeichnis zurück oder nil, wenn ein solches Verzeichnis nicht ermittelt werden kann.
Standardmäßig befinden sich die Binärerweiterungen nebeneinander mit ihren Ruby-Gegenstücken, daher wird nil zurückgegeben.
Source
# File lib/rubygems/defaults.rb, line 215 def self.default_key_path default_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem" unless File.exist?(default_key_path) default_key_path = File.join Gem.data_home, "gem", "gem-private_key.pem" end default_key_path end
Der Pfad zum Standardschlüssel für Signaturen.
Source
# File lib/rubygems/defaults.rb, line 175 def self.default_path path = [] path << user_dir if user_home && File.exist?(user_home) path << default_dir path << vendor_dir if vendor_dir && File.directory?(vendor_dir) path end
Standard-Gem-LadePfad.
Source
# File lib/rubygems/defaults.rb, line 55 def self.default_rubygems_dirs nil # default to standard layout end
Pfade, an denen RubyGems .rb-Dateien und Binärdateien installiert werden.
Source
# File lib/rubygems/defaults.rb, line 15 def self.default_sources @default_sources ||= %w[https://rubygems.org/] end
Ein Array der Standardquellen, die mit RubyGems geliefert werden.
Source
# File lib/rubygems/defaults.rb, line 23 def self.default_spec_cache_dir default_spec_cache_dir = File.join Gem.user_home, ".gem", "specs" unless File.exist?(default_spec_cache_dir) default_spec_cache_dir = File.join Gem.cache_home, "gem", "specs" end default_spec_cache_dir end
Standardverzeichnispfad für Specs, der verwendet wird, wenn kein alternativer Wert in der Umgebung angegeben ist.
Source
# File lib/rubygems/defaults.rb, line 62 def self.default_specifications_dir @default_specifications_dir ||= File.join(Gem.default_dir, "specifications", "default") end
Pfad zu den Spezifikationsdateien von Standard-Gems.
Source
# File lib/rubygems.rb, line 374 def self.deflate(data) require "zlib" Zlib::Deflate.deflate data end
Ein Zlib::Deflate.deflate Wrapper.
Source
# File lib/rubygems.rb, line 422 def self.dir paths.home end
Der Pfad, an dem Gems installiert werden sollen.
Source
# File lib/rubygems.rb, line 759 def self.done_installing(&hook) @done_installing_hooks << hook end
Fügt einen Post-Installations-Hook hinzu, der einen Gem::DependencyInstaller und eine Liste installierter Spezifikationen erhält, wenn Gem::DependencyInstaller#install abgeschlossen ist.
Source
# File lib/rubygems.rb, line 1040 def self.dynamic_library_suffixes @dynamic_library_suffixes ||= suffixes - [".rb"] end
Suffixe für dynamische Bibliotheken, die per require geladen werden können.
Source
# File lib/rubygems.rb, line 473 def self.ensure_default_gem_subdirectories(dir = Gem.dir, mode = nil) ensure_subdirectories(dir, mode, REPOSITORY_DEFAULT_GEM_SUBDIRECTORIES) end
Stellt stillschweigend sicher, dass das Gem-Verzeichnis dir alle richtigen Unterverzeichnisse zur Handhabung von Standard-Gems enthält. Wenn wir ein Verzeichnis aufgrund eines Berechtigungsproblems nicht erstellen können, fahren wir stillschweigend fort.
Wenn mode angegeben ist, werden fehlende Verzeichnisse mit diesem Modus erstellt.
Weltbeschreibbare Verzeichnisse werden niemals erstellt.
Source
# File lib/rubygems.rb, line 460 def self.ensure_gem_subdirectories(dir = Gem.dir, mode = nil) ensure_subdirectories(dir, mode, REPOSITORY_SUBDIRECTORIES) end
Stellt stillschweigend sicher, dass das Gem-Verzeichnis dir alle richtigen Unterverzeichnisse enthält. Wenn wir ein Verzeichnis aufgrund eines Berechtigungsproblems nicht erstellen können, fahren wir stillschweigend fort.
Wenn mode angegeben ist, werden fehlende Verzeichnisse mit diesem Modus erstellt.
Weltbeschreibbare Verzeichnisse werden niemals erstellt.
Source
# File lib/rubygems.rb, line 908 def self.env_requirement(gem_name) @env_requirements_by_name ||= {} @env_requirements_by_name[gem_name] ||= begin req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0" Gem::Requirement.create(req) end end
Source
# File lib/rubygems/defaults.rb, line 121 def self.find_config_file gemrc = File.join Gem.user_home, ".gemrc" if File.exist? gemrc gemrc else File.join Gem.config_home, "gem", "gemrc" end end
Findet die Konfigurationsdatei des Benutzers.
Source
# File lib/rubygems.rb, line 1302 def find_default_spec(path) @path_to_default_spec_map[path] end
Finden Sie eine Gem::Specification eines Standard-Gems aus path.
Source
# File lib/rubygems.rb, line 524 def self.find_files(glob, check_load_path = true) files = [] files = find_files_from_load_path glob if check_load_path gem_specifications = @gemdeps ? Gem.loaded_specs.values : Gem::Specification.stubs files.concat gem_specifications.flat_map {|spec| spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}") } # $LOAD_PATH might contain duplicate entries or reference # the spec dirs directly, so we prune. files.uniq! if check_load_path files end
Gibt eine Liste von Pfaden zurück, die dem glob entsprechen und von einem Gem verwendet werden können, um Features aus anderen Gems zu übernehmen. Zum Beispiel
Gem.find_files('rdoc/discover').each do |path| load path end
Wenn check_load_path wahr ist (Standard), durchsucht find_files auch $LOAD_PATH nach Dateien sowie nach Gems.
Beachten Sie, dass find_files alle Dateien zurückgibt, auch wenn sie von verschiedenen Versionen desselben Gems stammen. Siehe auch find_latest_files.
Source
# File lib/rubygems.rb, line 561 def self.find_latest_files(glob, check_load_path = true) files = [] files = find_files_from_load_path glob if check_load_path files.concat Gem::Specification.latest_specs(true).flat_map {|spec| spec.matches_for_glob("#{glob}#{Gem.suffix_pattern}") } # $LOAD_PATH might contain duplicate entries or reference # the spec dirs directly, so we prune. files.uniq! if check_load_path files end
Gibt eine Liste von Pfaden zurück, die dem glob aus den neuesten Gems entsprechen und von einem Gem verwendet werden können, um Features aus anderen Gems zu übernehmen. Zum Beispiel
Gem.find_latest_files('rdoc/discover').each do |path| load path end
Wenn check_load_path wahr ist (Standard), durchsucht find_latest_files auch $LOAD_PATH nach Dateien sowie nach Gems.
Im Gegensatz zu find_files gibt find_latest_files nur Dateien aus der neuesten Version eines Gems zurück.
Source
# File lib/rubygems.rb, line 1309 def find_unresolved_default_spec(path) default_spec = @path_to_default_spec_map[path] default_spec if default_spec && loaded_specs[default_spec.name] != default_spec end
Finden Sie eine unaufgelöste Gem::Specification eines Standard-Gems aus path.
Source
# File lib/rubygems.rb, line 214 def self.finish_resolve(request_set = Gem::RequestSet.new) request_set.import Gem::Specification.unresolved_deps.values request_set.import Gem.loaded_specs.values.map {|s| Gem::Dependency.new(s.name, s.version) } request_set.resolve_current.each do |s| s.full_spec.activate end end
Source
# File lib/rubygems.rb, line 1098 def self.freebsd_platform? RbConfig::CONFIG["host_os"].to_s.include?("bsd") end
Ist diese Plattform FreeBSD?
Source
# File lib/rubygems.rb, line 596 def self.host @host ||= Gem::DEFAULT_HOST end
Rufen Sie den Standard-RubyGems-API-Host ab. Dies ist normalerweise https://rubygems.org.
Source
# File lib/rubygems.rb, line 602 def self.host=(host) @host = host end
Setzen Sie den Standard-RubyGems-API-Host.
Source
# File lib/rubygems.rb, line 585 def self.install(name, version = Gem::Requirement.default, *options) require_relative "rubygems/dependency_installer" inst = Gem::DependencyInstaller.new(*options) inst.install name, version inst.installed_gems end
Top-Level-Installationshilfemethode. Ermöglicht die interaktive Installation von Gems.
% irb >> Gem.install "minitest" Fetching: minitest-5.14.0.gem (100%) => [#<Gem::Specification:0x1013b4528 @name="minitest", ...>]
Source
# File lib/rubygems.rb, line 1084 def self.java_platform? RUBY_PLATFORM == "java" end
Ist dies eine Java-Plattform?
Source
# File lib/rubygems.rb, line 933 def self.latest_rubygems_version latest_version_for("rubygems-update") || raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.") end
Gibt die neueste Release-Version von RubyGems zurück.
Source
# File lib/rubygems.rb, line 920 def self.latest_spec_for(name) dependency = Gem::Dependency.new name fetcher = Gem::SpecFetcher.fetcher spec_tuples, = fetcher.spec_for_dependency dependency spec, = spec_tuples.last spec end
Gibt die neueste Release-Version-Spezifikation für das Gem name zurück.
Source
# File lib/rubygems.rb, line 941 def self.latest_version_for(name) latest_spec_for(name)&.version end
Gibt die Version der neuesten Release-Version des Gems name zurück.
Source
# File lib/rubygems.rb, line 668 def self.load_bundler_extensions(version) return unless version <= Gem::Version.create("2.6.9") previous_platforms = {} platform_const_list = ["JAVA", "MSWIN", "MSWIN64", "MINGW", "X64_MINGW_LEGACY", "X64_MINGW", "UNIVERSAL_MINGW", "WINDOWS", "X64_LINUX", "X64_LINUX_MUSL"] platform_const_list.each do |platform| previous_platforms[platform] = Gem::Platform.const_get(platform) Gem::Platform.send(:remove_const, platform) end require "bundler/rubygems_ext" platform_const_list.each do |platform| Gem::Platform.send(:remove_const, platform) if Gem::Platform.const_defined?(platform) Gem::Platform.const_set(platform, previous_platforms[platform]) end end
Lädt Bundler-Erweiterungen in RubyGems und vermeidet dabei Neudefinitionswarnungen in Plattformkonstanten.
Source
# File lib/rubygems.rb, line 1133 def self.load_env_plugins load_plugin_files find_files_from_load_path("rubygems_plugin") end
Suchen Sie alle `rubygems_plugin`-Dateien in $LOAD_PATH und laden Sie sie.
Source
# File lib/rubygems.rb, line 610 def self.load_path_insert_index $LOAD_PATH.each_with_index do |path, i| return i if path.instance_variable_defined?(:@gem_prelude_index) end index = $LOAD_PATH.index RbConfig::CONFIG["sitelibdir"] index || 0 end
Der Index, an dem aktivierte Gem-Pfade in den $LOAD_PATH eingefügt werden. Die Pfade des aktivierten Gems werden standardmäßig vor dem Site-Lib-Verzeichnis eingefügt.
Source
# File lib/rubygems.rb, line 1124 def self.load_plugins Gem.path.each do |gem_path| load_plugin_files Gem::Util.glob_files_in_dir("*#{Gem.plugin_suffix_pattern}", plugindir(gem_path)) end end
Suchen Sie RubyGems-Plugin-Dateien am Standardspeicherort und laden Sie sie.
Source
# File lib/rubygems.rb, line 656 def self.load_safe_marshal return if @safe_marshal_loaded require_relative "rubygems/safe_marshal" @safe_marshal_loaded = true end
Source
# File lib/rubygems.rb, line 643 def self.load_yaml return if @yaml_loaded require "psych" require_relative "rubygems/psych_tree" require_relative "rubygems/safe_yaml" @yaml_loaded = true end
Source
# File lib/rubygems.rb, line 702 def self.location_of_caller(depth = 1) caller[depth] =~ /(.*?):(\d+).*?$/i file = $1 lineno = $2.to_i [file, lineno] end
Der Dateiname und die Zeilennummer des Aufrufers des Aufrufers dieser Methode.
depth gibt an, wie viele Ebenen im Aufrufstapel nach oben gegangen werden soll.
z.B.
def a; Gem.location_of_caller; end a #=> [“x.rb”, 2] # (variiert je nach Dateiname und Zeilennummer)
def b; c; end def c; Gem.location_of_caller(2); end b #=> [“x.rb”, 6] # (variiert je nach Dateiname und Zeilennummer)
Source
# File lib/rubygems.rb, line 713 def self.marshal_version "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}" end
Die Version des Marshal-Formats für Ihr Ruby.
Source
# File lib/rubygems.rb, line 206 def self.needs rs = Gem::RequestSet.new yield rs finish_resolve rs end
Source
# File lib/rubygems.rb, line 849 def self.open_file(path, flags, &block) File.open(path, flags, &block) end
Öffnet eine Datei mit den angegebenen Flags.
Source
# File lib/rubygems.rb, line 867 def self.open_file_with_flock(path, &block) # read-write mode is used rather than read-only in order to support NFS mode = IO::RDWR | IO::APPEND | IO::CREAT | IO::BINARY mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE) File.open(path, mode) do |io| begin # Try to get a lock without blocking. # If we do, the file is locked. # Otherwise, explain why we're waiting and get a lock, but block this time. if io.flock(File::LOCK_EX | File::LOCK_NB) != 0 warn "Waiting for another process to let go of lock: #{path}" io.flock(File::LOCK_EX) end io.puts(Process.pid) rescue Errno::ENOSYS, Errno::ENOTSUP end yield io end end
Öffnet eine Datei mit den angegebenen Flags und schützt den Zugriff mit flock.
Source
# File lib/rubygems.rb, line 856 def self.open_file_with_lock(path, &block) file_lock = "#{path}.lock" open_file_with_flock(file_lock, &block) ensure require "fileutils" FileUtils.rm_f file_lock end
Öffnet eine Datei mit den angegebenen Flags und schützt den Zugriff mit einer Dateisperre.
Source
# File lib/rubygems/defaults.rb, line 286 def self.operating_system_defaults {} end
Standardoptionen für Gem-Befehle für Ruby-Packer.
Die Optionen hier sollten als Array von String-„gem“-Befehlsnamen als Schlüssel und einem String der Standardoptionen als Werte strukturiert sein.
Beispiel
def self.operating_system_defaults
{
'install' => '--no-rdoc --no-ri --env-shebang',
'update' => '--no-rdoc --no-ri --env-shebang'
}
end
Source
# File lib/rubygems/defaults.rb, line 168 def self.path_separator File::PATH_SEPARATOR end
Wie Gem-Pfade durch String getrennt werden sollten. Überschreibbar für esoterische Plattformen.
Source
# File lib/rubygems.rb, line 382 def self.paths @paths ||= Gem::PathSupport.new(ENV) end
Rufen Sie das PathSupport-Objekt ab, das RubyGems zum Nachschlagen von Dateien verwendet.
Source
# File lib/rubygems.rb, line 392 def self.paths=(env) clear_paths target = {} env.each_pair do |k,v| case k when "GEM_HOME", "GEM_PATH", "GEM_SPEC_CACHE" case v when nil, String target[k] = v when Array unless Gem::Deprecate.skip warn <<-EOWARN Array values in the parameter to `Gem.paths=` are deprecated. Please use a String or nil. An Array (#{env.inspect}) was passed in from #{caller[3]} EOWARN end target[k] = v.join File::PATH_SEPARATOR end else target[k] = v end end @paths = Gem::PathSupport.new ENV.to_hash.merge(target) Gem::Specification.dirs = @paths.path end
Initialisiert die Dateisystempfade, die aus env verwendet werden sollen. env ist ein Hash-ähnliches Objekt (typischerweise ENV), das nach den Schlüsseln 'GEM_HOME', 'GEM_PATH' und 'GEM_SPEC_CACHE' abgefragt wird. Die Schlüssel für den env-Hash sollten Strings sein, und die Werte des Hash sollten Strings oder nil sein.
Source
# File lib/rubygems/defaults.rb, line 305 def self.platform_defaults {} end
Standardoptionen für Gem-Befehle für Ruby-Implementierer.
Die Optionen hier sollten als Array von String-„gem“-Befehlsnamen als Schlüssel und einem String der Standardoptionen als Werte strukturiert sein.
Beispiel
def self.platform_defaults
{
'install' => '--no-rdoc --no-ri --env-shebang',
'update' => '--no-rdoc --no-ri --env-shebang'
}
end
Source
# File lib/rubygems.rb, line 727 def self.platforms @platforms ||= [] if @platforms.empty? @platforms = [Gem::Platform::RUBY, Gem::Platform.local] end @platforms end
Array von Plattformen, die von dieser RubyGems-Version unterstützt werden.
Source
# File lib/rubygems.rb, line 720 def self.platforms=(platforms) @platforms = platforms end
Setzt das Array der Plattformen, die von dieser RubyGems-Version unterstützt werden (hauptsächlich für Tests).
Source
# File lib/rubygems.rb, line 1013 def self.plugin_suffix_pattern @plugin_suffix_pattern ||= "_plugin#{suffix_pattern}" end
Glob-Muster für per-require-ladbare Plugin-Suffixe.
Source
# File lib/rubygems.rb, line 1020 def self.plugin_suffix_regexp @plugin_suffix_regexp ||= /_plugin#{suffix_regexp}\z/ end
Regexp für per-require-ladbare Plugin-Suffixe.
Source
# File lib/rubygems.rb, line 340 def self.plugindir(install_dir = Gem.dir) File.join install_dir, "plugins" end
Der Pfad, an dem RubyGems-Plugins installiert werden sollen.
Source
# File lib/rubygems.rb, line 742 def self.post_build(&hook) @post_build_hooks << hook end
Fügt einen Post-Build-Hook hinzu, dem eine Gem::Installer-Instanz übergeben wird, wenn Gem::Installer#install aufgerufen wird. Der Hook wird aufgerufen, nachdem das Gem extrahiert und Erweiterungen erstellt wurden, aber bevor die Binärdateien oder die Gemspec geschrieben wurden. Wenn der Hook false zurückgibt, werden die Dateien des Gems entfernt und die Installation abgebrochen.
Source
# File lib/rubygems.rb, line 750 def self.post_install(&hook) @post_install_hooks << hook end
Fügt einen Post-Installations-Hook hinzu, dem eine Gem::Installer-Instanz übergeben wird, wenn Gem::Installer#install aufgerufen wird.
Source
# File lib/rubygems.rb, line 767 def self.post_reset(&hook) @post_reset_hooks << hook end
Fügt einen Hook hinzu, der ausgeführt wird, nachdem Gem::Specification.reset ausgeführt wurde.
Source
# File lib/rubygems.rb, line 776 def self.post_uninstall(&hook) @post_uninstall_hooks << hook end
Fügt einen Post-Deinstallations-Hook hinzu, dem ein Gem::Uninstaller-Instanz und die deinstallierte Spezifikation übergeben werden, wenn Gem::Uninstaller#uninstall aufgerufen wird.
Source
# File lib/rubygems.rb, line 785 def self.pre_install(&hook) @pre_install_hooks << hook end
Fügt einen Pre-Installations-Hook hinzu, dem eine Gem::Installer-Instanz übergeben wird, wenn Gem::Installer#install aufgerufen wird. Wenn der Hook false zurückgibt, wird die Installation abgebrochen.
Source
# File lib/rubygems.rb, line 793 def self.pre_reset(&hook) @pre_reset_hooks << hook end
Fügt einen Hook hinzu, der ausgeführt wird, bevor Gem::Specification.reset ausgeführt wird.
Source
# File lib/rubygems.rb, line 802 def self.pre_uninstall(&hook) @pre_uninstall_hooks << hook end
Fügt einen Pre-Deinstallations-Hook hinzu, dem ein Gem::Uninstaller-Instanz und die zu deinstallierende Spezifikation übergeben werden, wenn Gem::Uninstaller#uninstall aufgerufen wird.
Source
# File lib/rubygems.rb, line 811 def self.prefix prefix = File.dirname RUBYGEMS_DIR if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) && prefix != File.expand_path(RbConfig::CONFIG["libdir"]) && File.basename(RUBYGEMS_DIR) == "lib" prefix end end
Das Verzeichnispraefix, an dem diese RubyGems-Installation vorgenommen wurde. Wenn Ihr Praefix an einem Standardort liegt (d.h. RubyGems ist dort installiert, wo Sie es erwarten), gibt prefix nil zurück.
Source
# File lib/rubygems/rdoc.rb, line 13 def self.rdoc_hooks_defined_via_plugin? Gem::Version.new(::RDoc::VERSION) >= Gem::Version.new("6.9.0") end
Gibt zurück, ob RDoc seine eigenen Installations-Hooks über ein RubyGems-Plugin definiert. Dies und was davon geschützt wird, kann entfernt werden, sobald kein unterstütztes Ruby mehr RDoc älter als 6.9.0 ausliefert.
Source
# File lib/rubygems.rb, line 831 def self.read_binary(path) File.binread(path) end
Liest eine Datei sicher im Binärmodus auf allen Plattformen.
Source
# File lib/rubygems.rb, line 824 def self.refresh Gem::Specification.reset end
Verfügbare Gems von der Festplatte neu laden.
Source
# File lib/rubygems.rb, line 1277 def register_default_spec(spec) extended_require_paths = spec.require_paths.map {|f| f + "/" } new_format = extended_require_paths.any? {|path| spec.files.any? {|f| f.start_with? path } } if new_format prefix_group = extended_require_paths.join("|") prefix_pattern = /^(#{prefix_group})/ end spec.files.each do |file| if new_format file = file.sub(prefix_pattern, "") next unless $~ end spec.activate if already_loaded?(file) @path_to_default_spec_map[file] = spec @path_to_default_spec_map[file.sub(suffix_regexp, "")] = spec end end
Registriert eine Gem::Specification für ein Standard-Gem.
Zwei Formate für die Spezifikation werden unterstützt:
-
MRI 2.0 Stil, bei dem spec.files unpräfixierte Require-Namen enthält. Die Dateinamen des Specs werden unverändert registriert.
-
Neuer Stil, bei dem spec.files Dateien enthält, die mit Pfaden aus spec.require_paths präfixiert sind. Die Präfixe werden vor der Registrierung der Dateinamen des Specs entfernt. Unpräfixierte Dateien werden weggelassen.
Source
# File lib/rubygems.rb, line 891 def self.ruby if @ruby.nil? @ruby = RbConfig.ruby @ruby = "\"#{@ruby}\"" if /\s/.match?(@ruby) end @ruby end
Der Pfad zum ausgeführten Ruby-Interpreter.
Source
# File lib/rubygems.rb, line 904 def self.ruby_api_version @ruby_api_version ||= target_rbconfig["ruby_version"].dup end
Gibt einen String zurück, der die API-Kompatibilitätsversion von Ruby enthält.
Source
# File lib/rubygems/defaults.rb, line 208 def self.ruby_engine RUBY_ENGINE end
Source
# File lib/rubygems.rb, line 948 def self.ruby_version return @ruby_version if defined? @ruby_version version = RUBY_VERSION.dup if RUBY_PATCHLEVEL == -1 if RUBY_ENGINE == "ruby" desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1] else desc = RUBY_DESCRIPTION[/\A#{RUBY_ENGINE} #{Regexp.quote(RUBY_ENGINE_VERSION)} \(#{RUBY_VERSION}([^ ]+)\) /, 1] end version << ".#{desc}" if desc end @ruby_version = Gem::Version.new version end
Eine Gem::Version für das aktuell ausgeführte Ruby.
Source
# File lib/rubygems.rb, line 967 def self.rubygems_version return @rubygems_version if defined? @rubygems_version @rubygems_version = Gem::Version.new Gem::VERSION end
Eine Gem::Version für das aktuell ausgeführte RubyGems.
Source
# File lib/rubygems.rb, line 444 def self.set_target_rbconfig(rbconfig_path) @target_rbconfig = Gem::TargetRbConfig.from_path(rbconfig_path) Gem::Platform.local(refresh: true) Gem.platforms << Gem::Platform.local unless Gem.platforms.include? Gem::Platform.local @target_rbconfig end
Source
# File lib/rubygems.rb, line 1091 def self.solaris_platform? RUBY_PLATFORM.include?("solaris") end
Ist diese Plattform Solaris?
Source
# File lib/rubygems.rb, line 1232 def self.source_date_epoch Time.at(source_date_epoch_string.to_i).utc.freeze end
Gibt den Wert von Gem.source_date_epoch_string als Time-Objekt zurück.
Dies wird in ganz RubyGems verwendet, um reproduzierbare Builds zu ermöglichen.
Source
# File lib/rubygems.rb, line 1216 def self.source_date_epoch_string specified_epoch = ENV["SOURCE_DATE_EPOCH"] # If it's empty or just whitespace, treat it like it wasn't set at all. specified_epoch = nil if !specified_epoch.nil? && specified_epoch.strip.empty? epoch = specified_epoch || DEFAULT_SOURCE_DATE_EPOCH.to_s epoch.strip end
Wenn die Umgebungsvariable SOURCE_DATE_EPOCH gesetzt ist, wird ihr Wert zurückgegeben. Andernfalls wird DEFAULT_SOURCE_DATE_EPOCH als String zurückgegeben.
HINWEIS(@duckinator): Die Implementierung ist etwas seltsam, da wir
1. Make builds reproducible by default, by having this function always return the same result during a given run. 2. Allow changing ENV['SOURCE_DATE_EPOCH'] at runtime, since multiple tests that set this variable will be run in a single process.
Wenn Sie diese Funktion vereinfachen und viele Tests fehlschlagen, liegt dies wahrscheinlich an #2 oben.
Details zu SOURCE_DATE_EPOCH: reproducible-builds.org/specs/source-date-epoch/
Source
# File lib/rubygems.rb, line 976 def self.sources source_list = configuration.sources || default_sources @sources ||= Gem::SourceList.from(source_list) end
Gibt ein Array von Quellen zurück, von denen Remote-Gems bezogen werden sollen. Verwendet default_sources, wenn die Quellenliste leer ist.
Source
# File lib/rubygems.rb, line 988 def self.sources=(new_sources) if !new_sources @sources = nil else @sources = Gem::SourceList.from(new_sources) end end
Muss in der Lage sein, die Quellen zu setzen, ohne Gem.sources.replace aufzurufen, da dies zu einer Endlosschleife führen würde.
DOC: Dieser Kommentar ist keine Dokumentation über die Methode selbst, sondern eher ein Code-Kommentar zur Implementierung.
Source
# File lib/rubygems.rb, line 430 def self.spec_cache_dir paths.spec_cache_dir end
Source
# File lib/rubygems/defaults.rb, line 140 def self.state_file @state_file ||= File.join(Gem.state_home, "gem", "last_update_check") end
Der Pfad zum Standardort der Zustandsdatei des Benutzers.
Source
# File lib/rubygems/defaults.rb, line 161 def self.state_home @state_home ||= ENV["XDG_STATE_HOME"] || File.join(Gem.user_home, ".local", "state") end
Der Pfad zum Standardort des Zustandsverzeichnisses des Benutzers.
Source
# File lib/rubygems.rb, line 999 def self.suffix_pattern @suffix_pattern ||= "{#{suffixes.join(",")}}" end
Glob-Muster für per-require-ladbare Pfad-Suffixe.
Source
# File lib/rubygems.rb, line 1006 def self.suffix_regexp @suffix_regexp ||= /#{Regexp.union(suffixes)}\z/ end
Regexp für per-require-ladbare Pfad-Suffixe.
Source
# File lib/rubygems.rb, line 1027 def self.suffixes @suffixes ||= ["", ".rb", *%w[DLEXT DLEXT2].map do |key| val = RbConfig::CONFIG[key] next unless val && !val.empty? ".#{val}" end].compact.uniq end
Suffixe für per-require-ladbare Pfade.
Source
# File lib/rubygems.rb, line 440 def self.target_rbconfig @target_rbconfig || Gem::TargetRbConfig.for_running_ruby end
Das RbConfig-Objekt für die Zielplattform der Bereitstellung.
Dies ist normalerweise dasselbe wie die laufende Plattform, kann aber unterschiedlich sein, wenn Sie kreuzkompilieren.
Source
# File lib/rubygems.rb, line 1048 def self.time(msg, width = 0, display = Gem.configuration.verbose) now = Time.now value = yield elapsed = Time.now - now ui.say format("%2$*1$s: %3$3.3fs", -width, msg, elapsed) if display value end
Gibt die Ausführungszeit des bereitgestellten Blocks über die Debug-UI-Ausgabe aus.
Source
# File lib/rubygems.rb, line 181 def self.try_activate(path) # finds the _latest_ version... regardless of loaded specs and their deps # if another gem had a requirement that would mean we shouldn't # activate the latest version, then either it would already be activated # or if it was ambiguous (and thus unresolved) the code in our custom # require will try to activate the more specific version. spec = Gem::Specification.find_by_path path return false unless spec return true if spec.activated? begin spec.activate rescue Gem::LoadError => e # this could fail due to gem dep collisions, go lax spec_by_name = Gem::Specification.find_by_name(spec.name) if spec_by_name.nil? raise e else spec_by_name.activate end end true end
Versucht, ein Gem zu aktivieren, das path enthält. Gibt true zurück, wenn die Aktivierung erfolgreich war oder nicht benötigt wurde, da es bereits aktiviert war. Gibt false zurück, wenn der Pfad in einem Gem nicht gefunden werden kann.
Source
# File lib/rubygems.rb, line 1063 def self.ui require_relative "rubygems/user_interaction" Gem::DefaultUserInteraction.ui end
Lädt DefaultUserInteraction verzögert und gibt die Standard-UI zurück.
Source
# File lib/rubygems.rb, line 1157 def self.use_gemdeps(path = nil) raise_exception = path path ||= ENV["RUBYGEMS_GEMDEPS"] return unless path path = path.dup if path == "-" Gem::Util.traverse_parents Dir.pwd do |directory| dep_file = GEM_DEP_FILES.find {|f| File.file?(f) } next unless dep_file path = File.join directory, dep_file break end end unless File.file? path return unless raise_exception raise ArgumentError, "Unable to find gem dependencies file at #{path}" end ENV["BUNDLE_GEMFILE"] ||= File.expand_path(path) require_relative "rubygems/user_interaction" require "bundler" begin Gem::DefaultUserInteraction.use_ui(ui) do Bundler.ui.silence do @gemdeps = Bundler.setup end ensure Gem::DefaultUserInteraction.ui.close end rescue Bundler::BundlerError => e warn e.message warn "You may need to `bundle install` to install missing gems" warn "" end end
Sucht nach einer Gem-Abhängigkeitsdatei unter path und aktiviert die Gems in der Datei, wenn sie gefunden wird. Wenn die Datei nicht gefunden wird, wird ein ArgumentError ausgelöst.
Wenn path nicht angegeben ist, wird die Umgebungsvariable RUBYGEMS_GEMDEPS verwendet. Wenn jedoch keine Datei gefunden wird, wird keine Ausnahme ausgelöst.
Wenn für path „-“ angegeben wird, durchsucht RubyGems aufwärts vom aktuellen Arbeitsverzeichnis nach Gem-Abhängigkeitsdateien (gem.deps.rb, Gemfile, Isolate) und aktiviert die Gems in der zuerst gefundenen.
Sie können dies automatisch ausführen, wenn RubyGems startet. Um dies zu aktivieren, setzen Sie die Umgebungsvariable RUBYGEMS_GEMDEPS entweder auf den Pfad Ihrer Gem-Abhängigkeitsdatei oder auf „-“ für die automatische Erkennung in übergeordneten Verzeichnissen.
HINWEIS: Die Aktivierung der automatischen Erkennung auf Multiuser-Systemen kann zur Ausführung von beliebigem Code führen, wenn sie von Verzeichnissen außerhalb Ihrer Kontrolle verwendet wird.
Source
# File lib/rubygems.rb, line 1073 def self.use_paths(home, *paths) paths.flatten! paths.compact! hash = { "GEM_HOME" => home, "GEM_PATH" => paths.empty? ? home : paths.join(File::PATH_SEPARATOR) } hash.delete_if {|_, v| v.nil? } self.paths = hash end
Source
# File lib/rubygems/defaults.rb, line 103 def self.user_dir gem_dir = File.join(Gem.user_home, ".gem") gem_dir = File.join(Gem.data_home, "gem") unless File.exist?(gem_dir) parts = [gem_dir, ruby_engine] parts << RbConfig::CONFIG["ruby_version"] unless RbConfig::CONFIG["ruby_version"].empty? File.join parts end
Pfad für Gems im Home-Verzeichnis des Benutzers
Source
# File lib/rubygems/defaults.rb, line 96 def self.user_home @user_home ||= find_home end
Das Home-Verzeichnis für den Benutzer.
Source
# File lib/rubygems/win_platform.rb, line 23 def self.win_platform? if @@win_platform.nil? ruby_platform = RbConfig::CONFIG["host_os"] @@win_platform = !WIN_PATTERNS.find {|r| ruby_platform =~ r }.nil? end @@win_platform end
Handelt es sich um eine Windows-Plattform?
Source
# File lib/rubygems.rb, line 838 def self.write_binary(path, data) File.binwrite(path, data) rescue Errno::ENOSPC # If we ran out of space but the file exists, it's *guaranteed* to be corrupted. File.delete(path) if File.exist?(path) raise end
Schreibt eine Datei sicher im Binärmodus auf allen Plattformen.
Private Klassenmethoden
Source
# File lib/rubygems.rb, line 1368 def already_loaded?(file) $LOADED_FEATURES.any? do |feature_path| feature_path.end_with?(file) && default_gem_load_paths.any? {|load_path_entry| feature_path == "#{load_path_entry}/#{file}" } end end
Source
# File lib/rubygems.rb, line 1374 def default_gem_load_paths @default_gem_load_paths ||= $LOAD_PATH[load_path_insert_index..-1].map do |lp| expanded = File.expand_path(lp) next expanded unless File.exist?(expanded) File.realpath(expanded) end end
Source
# File lib/rubygems.rb, line 236 def self.find_and_activate_spec_for_exe(name, exec_name, requirements) spec = find_spec_for_exe name, exec_name, requirements Gem::LOADED_SPECS_MUTEX.synchronize do spec.activate finish_resolve end spec end
Source
# File lib/rubygems/defaults.rb, line 81 def self.find_home Dir.home.dup rescue StandardError if Gem.win_platform? File.expand_path File.join(ENV["HOMEDRIVE"] || ENV["SystemDrive"], "/") else File.expand_path "/" end end
Findet das Home-Verzeichnis des Benutzers.
Source
# File lib/rubygems.rb, line 246 def self.find_spec_for_exe(name, exec_name, requirements) raise ArgumentError, "you must supply exec_name" unless exec_name dep = Gem::Dependency.new name, requirements loaded = Gem.loaded_specs[name] return loaded if loaded && dep.matches_spec?(loaded) specs = dep.matching_specs(true) specs = specs.find_all do |spec| spec.executables.include? exec_name end if exec_name unless spec = specs.first msg = "can't find gem #{dep} with executable #{exec_name}" raise Gem::GemNotFoundException, msg end spec end