class Gem::ConfigFile
Gem::ConfigFile RubyGems-Optionen und gem-Befehlsoptionen aus gemrc.
gemrc ist eine YAML-Datei, die Strings verwendet, um gem-Befehlsargumente abzugleichen, und Symbole, um RubyGems-Optionen abzugleichen.
Gem-Befehlsargumente verwenden einen String-Schlüssel, der dem Befehlsnamen entspricht, und ermöglichen die Angabe von Standardargumenten.
install: --no-rdoc --no-ri update: --no-rdoc --no-ri
Sie können gem: verwenden, um Standardargumente für alle Befehle festzulegen.
RubyGems-Optionen verwenden Symbolschlüssel. Gültige Optionen sind:
:backtrace-
Siehe
backtrace :sources-
Legt
Gem::sourcesfest. :verbose-
Siehe
verbose :concurrent_downloads-
Siehe
concurrent_downloads
gemrc-Dateien können sich an verschiedenen Orten befinden und werden in der folgenden Reihenfolge gelesen und zusammengeführt:
-
Systemweit (/etc/gemrc)
-
Pro Benutzer (~/.gemrc)
-
Pro Umgebung (gemrc-Dateien, die in der Umgebungsvariablen GEMRC aufgeführt sind)
Constants
- DEFAULT_BACKTRACE
- DEFAULT_BULK_THRESHOLD
- DEFAULT_CERT_EXPIRATION_LENGTH_DAYS
- DEFAULT_CONCURRENT_DOWNLOADS
- DEFAULT_INSTALL_EXTENSION_IN_LIB
-
TODO: Verwenden Sie false als Standardwert für diese Option in RubyGems 4.0
- DEFAULT_IPV4_FALLBACK_ENABLED
- DEFAULT_UPDATE_SOURCES
- DEFAULT_VERBOSITY
- OPERATING_SYSTEM_DEFAULTS
-
Damit Ruby-Packager Standardkonfigurationen festlegen können. Festgelegt in rubygems/defaults/operating_system.rb
- PLATFORM_DEFAULTS
-
Damit Ruby-Implementierer Standardkonfigurationen festlegen können. Festgelegt in rubygems/defaults/#{RUBY_ENGINE}.rb
- SYSTEM_WIDE_CONFIG_FILE
Attribute
Liste der dem Konfigurationsdatei-Objekt übergebenen Argumente.
True, wenn wir Backtraces bei Fehlern ausgeben.
Wert für die Schwellenwertmenge. Wenn die Anzahl fehlender Gems über diesem Schwellenwert liegt, wird eine Massen-Download-Technik verwendet. (veraltet)
Ablaufzeit für die Signatur eines Zertifikats.
Anzahl der gleichzeitig auszuführenden Gem-Downloads.
True, wenn wir beim Pushen eines Gems einen Gem-Server erzwingen wollen.
Wo Gems installiert werden sollen (veraltet).
Installiert Erweiterungen auch in lib sowie in das Erweiterungsverzeichnis.
Experimentell ==
Fallback auf IPv4, wenn IPv6 nicht erreichbar oder langsam ist (Standard: false).
Wo nach Gems gesucht werden soll (veraltet).
Quellen, nach denen nach Gems gesucht werden soll.
Pfadname des Verzeichnisses oder der Datei des OpenSSL CA-Zertifikats, verwendet für die entfernte HTTPS-Verbindung.
Pfadname des Verzeichnisses oder der Datei des OpenSSL-Client-Zertifikats, verwendet für die entfernte HTTPS-Verbindung mit Client-Authentifizierung.
OpenSSL-Verifizierungsmoduswert, verwendet für die entfernte HTTPS-Verbindung.
True, wenn wir die SourceInfoCache jedes Mal aktualisieren wollen, andernfalls false.
Ausführlichkeitsgrad der Ausgabe.
-
false – Keine Ausgabe
-
true – Normale Ausgabe
-
:loud – Zusätzliche Ausgabe
Öffentliche Klassenmethoden
Source
# File lib/rubygems/config_file.rb, line 563 def self.deep_transform_config_keys!(config) config.transform_keys! do |k| if k.match?(/\A:(.*)\Z/) k[1..-1].to_sym elsif k.include?("__") || k.match?(%r{/\Z}) if k.is_a?(Symbol) k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym else k.dup.gsub(/__/,".").gsub(%r{/\Z}, "") end else k end end config.transform_values! do |v| if v.is_a?(String) if v.match?(/\A:(.*)\Z/) v[1..-1].to_sym elsif v.match?(/\A[+-]?\d+\Z/) v.to_i elsif v.match?(/\Atrue|false\Z/) v == "true" elsif v.empty? nil else v end elsif v.empty? nil elsif v.is_a?(Hash) deep_transform_config_keys!(v) else v end end config end
Source
# File lib/rubygems/config_file.rb, line 545 def self.dump_with_rubygems_yaml(content) content.transform_keys! do |k| k.is_a?(Symbol) ? ":#{k}" : k end require_relative "yaml_serializer" Gem::YAMLSerializer.dump(content) end
Source
# File lib/rubygems/config_file.rb, line 554 def self.load_with_rubygems_config_hash(yaml) require_relative "yaml_serializer" content = Gem::YAMLSerializer.load(yaml) deep_transform_config_keys!(content) end
Source
# File lib/rubygems/config_file.rb, line 184 def initialize(args) set_config_file_name(args) @backtrace = DEFAULT_BACKTRACE @bulk_threshold = DEFAULT_BULK_THRESHOLD @verbose = DEFAULT_VERBOSITY @update_sources = DEFAULT_UPDATE_SOURCES @concurrent_downloads = DEFAULT_CONCURRENT_DOWNLOADS @cert_expiration_length_days = DEFAULT_CERT_EXPIRATION_LENGTH_DAYS @install_extension_in_lib = DEFAULT_INSTALL_EXTENSION_IN_LIB @ipv4_fallback_enabled = ENV["IPV4_FALLBACK_ENABLED"] == "true" || DEFAULT_IPV4_FALLBACK_ENABLED operating_system_config = Marshal.load Marshal.dump(OPERATING_SYSTEM_DEFAULTS) platform_config = Marshal.load Marshal.dump(PLATFORM_DEFAULTS) system_config = load_file SYSTEM_WIDE_CONFIG_FILE user_config = load_file config_file_name environment_config = (ENV["GEMRC"] || ""). split(File::PATH_SEPARATOR).inject({}) do |result, file| result.merge load_file file end @hash = operating_system_config.merge platform_config unless args.index "--norc" @hash = @hash.merge system_config @hash = @hash.merge user_config @hash = @hash.merge environment_config end @hash.transform_keys! do |k| # gemhome and gempath are not working with symbol keys if %w[backtrace bulk_threshold verbose update_sources cert_expiration_length_days install_extension_in_lib ipv4_fallback_enabled sources disable_default_gem_server ssl_verify_mode ssl_ca_cert ssl_client_cert].include?(k) k.to_sym else k end end # HACK: these override command-line args, which is bad @backtrace = @hash[:backtrace] if @hash.key? :backtrace @bulk_threshold = @hash[:bulk_threshold] if @hash.key? :bulk_threshold @verbose = @hash[:verbose] if @hash.key? :verbose @update_sources = @hash[:update_sources] if @hash.key? :update_sources # TODO: We should handle concurrent_downloads same as other options @cert_expiration_length_days = @hash[:cert_expiration_length_days] if @hash.key? :cert_expiration_length_days @install_extension_in_lib = @hash[:install_extension_in_lib] if @hash.key? :install_extension_in_lib @ipv4_fallback_enabled = @hash[:ipv4_fallback_enabled] if @hash.key? :ipv4_fallback_enabled @home = @hash[:gemhome] if @hash.key? :gemhome @path = @hash[:gempath] if @hash.key? :gempath @sources = @hash[:sources] if @hash.key? :sources @disable_default_gem_server = @hash[:disable_default_gem_server] if @hash.key? :disable_default_gem_server @ssl_verify_mode = @hash[:ssl_verify_mode] if @hash.key? :ssl_verify_mode @ssl_ca_cert = @hash[:ssl_ca_cert] if @hash.key? :ssl_ca_cert @ssl_client_cert = @hash[:ssl_client_cert] if @hash.key? :ssl_client_cert @api_keys = nil @rubygems_api_key = nil handle_arguments args end
Erzeugt das Konfigurationsdatei-Objekt. args ist die Liste der Argumente von der Kommandozeile.
Die folgenden Kommandozeilenoptionen werden hier frühzeitig behandelt und nicht erst später, wenn die meisten Befehlsoptionen verarbeitet werden.
--config-file,--config-file==NAME-
Offensichtlich müssen diese vom
ConfigFile-Objekt behandelt werden, um sicherzustellen, dass wir die richtige Konfigurationsdatei erhalten. --backtrace-
Backtrace muss frühzeitig aktiviert werden, damit Fehler vor der normalen Optionsverarbeitung ordnungsgemäß behandelt werden können.
--debug-
Aktiviert Ruby-Level-Debug-Nachrichten. Wird aus demselben Grund wie --backtrace frühzeitig behandelt.
Öffentliche Instanzmethoden
Source
# File lib/rubygems/config_file.rb, line 524 def [](key) @hash[key] || @hash[key.to_s] end
Gibt die Konfigurationsinformationen für key zurück.
Source
# File lib/rubygems/config_file.rb, line 529 def []=(key, value) @hash[key] = value end
Setzt die Konfigurationsoption key auf value.
Source
# File lib/rubygems/config_file.rb, line 251 def api_keys load_api_keys unless @api_keys @api_keys end
Hash von RubyGems.org und alternativen API-Schlüsseln.
Source
# File lib/rubygems/config_file.rb, line 388 def backtrace @backtrace || $DEBUG end
True, wenn die Option backtrace angegeben wurde oder debug aktiviert ist.
Source
# File lib/rubygems/config_file.rb, line 261 def check_credentials_permissions return if Gem.win_platform? # windows doesn't write 0600 as 0600 return unless File.exist? credentials_path existing_permissions = File.stat(credentials_path).mode & 0o777 return if existing_permissions == 0o600 alert_error <<-ERROR Your gem push credentials file located at: \t#{credentials_path} has file permissions of 0#{existing_permissions.to_s 8} but 0600 is required. To fix this error run: \tchmod 0600 #{credentials_path} You should reset your credentials at: \thttps://rubygems.org/profile/edit if you believe they were disclosed to a third party. ERROR terminate_interaction 1 end
Überprüft die Berechtigungen der Anmeldeinformationsdatei. Wenn diese nicht 0600 sind, wird eine Fehlermeldung angezeigt und RubyGems wird abgebrochen.
Source
# File lib/rubygems/config_file.rb, line 407 def config_file_name @config_file_name || Gem.config_file end
Der Name der Konfigurationsdatei.
Source
# File lib/rubygems/config_file.rb, line 293 def credentials_path credentials = File.join Gem.user_home, ".gem", "credentials" if File.exist? credentials credentials else File.join Gem.data_home, "gem", "credentials" end end
Speicherort der RubyGems.org-Anmeldeinformationen.
Source
# File lib/rubygems/config_file.rb, line 431 def each(&block) hash = @hash.dup hash.delete :update_sources hash.delete :verbose hash.delete :backtrace hash.delete :bulk_threshold yield :update_sources, @update_sources yield :verbose, @verbose yield :backtrace, @backtrace yield :bulk_threshold, @bulk_threshold yield "config_file_name", @config_file_name if @config_file_name hash.each(&block) end
Delegiert an @hash.
Source
# File lib/rubygems/config_file.rb, line 449 def handle_arguments(arg_list) @args = [] arg_list.each do |arg| case arg when /^--(backtrace|traceback)$/ then @backtrace = true when /^--debug$/ then $DEBUG = true warn "NOTE: Debugging mode prints all exceptions even when rescued" else @args << arg end end end
Verarbeitet die Befehlsargumente.
Source
# File lib/rubygems/config_file.rb, line 417 def last_update_check if File.readable?(state_file_name) File.read(state_file_name).to_i else 0 end end
Liest die Zeit der letzten Update-Überprüfung aus der Statusdatei.
Source
# File lib/rubygems/config_file.rb, line 426 def last_update_check=(timestamp) File.write(state_file_name, timestamp.to_s) if state_file_writable? end
Schreibt die Zeit der letzten Update-Überprüfung in die Statusdatei.
Source
# File lib/rubygems/config_file.rb, line 302 def load_api_keys check_credentials_permissions @api_keys = if File.exist? credentials_path load_file(credentials_path) else @hash end if @api_keys.key? :rubygems_api_key @rubygems_api_key = @api_keys[:rubygems_api_key] @api_keys[:rubygems] = @api_keys.delete :rubygems_api_key unless @api_keys.key? :rubygems end end
Source
# File lib/rubygems/config_file.rb, line 365 def load_file(filename) yaml_errors = [ArgumentError] return {} unless filename && !filename.empty? && File.exist?(filename) begin config = self.class.load_with_rubygems_config_hash(File.read(filename)) if config.keys.any? {|k| k.to_s.gsub(%r{https?:\/\/}, "").include?(": ") } warn "Failed to load #{filename} because it doesn't contain valid YAML hash" return {} else return config end rescue *yaml_errors => e warn "Failed to load #{filename}, #{e}" rescue Errno::EACCES warn "Failed to load #{filename} due to permissions problem." end {} end
Source
# File lib/rubygems/config_file.rb, line 467 def really_verbose case verbose when true, false, nil then false else true end end
Der Modus "wirklich ausführlich" liefert zusätzliche Ausgaben.
Source
# File lib/rubygems/config_file.rb, line 321 def rubygems_api_key load_api_keys unless @rubygems_api_key @rubygems_api_key end
Gibt den RubyGems.org API-Schlüssel zurück.
Source
# File lib/rubygems/config_file.rb, line 330 def rubygems_api_key=(api_key) set_api_key :rubygems_api_key, api_key @rubygems_api_key = api_key end
Setzt den RubyGems.org API-Schlüssel auf api_key.
Source
# File lib/rubygems/config_file.rb, line 339 def set_api_key(host, api_key) check_credentials_permissions config = load_file(credentials_path).merge(host => api_key) dirname = File.dirname credentials_path require "fileutils" FileUtils.mkdir_p(dirname) permissions = 0o600 & ~File.umask File.open(credentials_path, "w", permissions) do |f| f.write self.class.dump_with_rubygems_yaml(config) end load_api_keys # reload end
Setzt den API-Schlüssel eines bestimmten Hosts auf api_key.
Source
# File lib/rubygems/config_file.rb, line 412 def state_file_name Gem.state_file end
Der Name der Statusdatei.
Source
# File lib/rubygems/config_file.rb, line 393 def state_file_writable? if File.exist?(state_file_name) File.writable?(state_file_name) else require "fileutils" FileUtils.mkdir_p File.dirname(state_file_name) File.open(state_file_name, "w") {} true end rescue Errno::EACCES false end
Überprüft, ob die Statusdatei beschreibbar ist. Erstellt eine leere Datei, falls sie nicht vorhanden ist, um sicherzustellen, dass wir hineinschreiben können.
Source
# File lib/rubygems/config_file.rb, line 359 def unset_api_key! return false unless File.exist?(credentials_path) File.delete(credentials_path) end
Entfernt die Datei +~/.gem/credentials+, um alle aktuellen Sitzungen zu löschen.
Source
# File lib/rubygems/config_file.rb, line 514 def write require "fileutils" FileUtils.mkdir_p File.dirname(config_file_name) File.open config_file_name, "w" do |io| io.write to_yaml end end
Schreibt diese Konfigurationsdatei und ersetzt ihre Quelle.
Private Instanzmethoden
Source
# File lib/rubygems/config_file.rb, line 603 def set_config_file_name(args) @config_file_name = ENV["GEMRC"] need_config_file_name = false args.each do |arg| if need_config_file_name @config_file_name = arg need_config_file_name = false elsif arg =~ /^--config-file=(.*)/ @config_file_name = $1 elsif /^--config-file$/.match?(arg) need_config_file_name = true end end end