module DidYouMean
Das DidYouMean Gem fügt Funktionalität hinzu, um mögliche Methoden-/Klassennamen bei Fehlern wie NameError und NoMethodError vorzuschlagen. In Ruby 2.3 oder höher wird es beim Start automatisch aktiviert.
@example
methosd # => NameError: undefined local variable or method `methosd' for main:Object # Did you mean? methods # method OBject # => NameError: uninitialized constant OBject # Did you mean? Object @full_name = "Yuki Nishijima" first_name, last_name = full_name.split(" ") # => NameError: undefined local variable or method `full_name' for main:Object # Did you mean? @full_name @@full_name = "Yuki Nishijima" @@full_anme # => NameError: uninitialized class variable @@full_anme in Object # Did you mean? @@full_name full_name = "Yuki Nishijima" full_name.starts_with?("Y") # => NoMethodError: undefined method `starts_with?' for "Yuki Nishijima":String # Did you mean? start_with? hash = {foo: 1, bar: 2, baz: 3} hash.fetch(:fooo) # => KeyError: key not found: :fooo # Did you mean? :foo
Deaktivieren von did_you_mean
Gelegentlich möchten Sie möglicherweise das did_you_mean Gem deaktivieren, z. B. um Probleme im Fehlerobjekt selbst zu debuggen. Sie können es vollständig deaktivieren, indem Sie die Option --disable-did_you_mean für den ruby Befehl angeben.
$ ruby --disable-did_you_mean -e "1.zeor?" -e:1:in `<main>': undefined method `zeor?' for 1:Integer (NameError)
Wenn Sie keinen direkten Zugriff auf den ruby Befehl haben (z. B. +rails console+, irb), können Sie Optionen über die Umgebungsvariable RUBYOPT anwenden.
$ RUBYOPT='--disable-did_you_mean' irb irb:0> 1.zeor? # => NoMethodError (undefined method `zeor?' for 1:Integer)
Abrufen der ursprünglichen Fehlermeldung
Manchmal möchten Sie das Gem nicht vollständig deaktivieren, sondern die ursprüngliche Fehlermeldung ohne Vorschläge erhalten (z. B. beim Testen). In diesem Fall können Sie die Methode original_message auf dem Fehlerobjekt verwenden.
no_method_error = begin 1.zeor? rescue NoMethodError => error error end no_method_error.message # => NoMethodError (undefined method `zeor?' for 1:Integer) # Did you mean? zero? no_method_error.original_message # => NoMethodError (undefined method `zeor?' for 1:Integer)
Constants
- PlainFormatter
-
Der
DidYouMean::Formatterist der grundlegende, standardmäßige Formatter für das Gem. Der Formatter reagiert auf die Methodemessage_forund gibt eine für Menschen lesbare Zeichenkette zurück. - VERSION
- VerboseFormatter
-
Der
DidYouMean::Formatterist der grundlegende, standardmäßige Formatter für das Gem. Der Formatter reagiert auf die Methodemessage_forund gibt eine für Menschen lesbare Zeichenkette zurück.
Öffentliche Klassenmethoden
Source
# File lib/did_you_mean.rb, line 97 def self.correct_error(error_class, spell_checker) if defined?(Ractor) new_mapping = { **@spell_checkers, error_class.to_s => spell_checker } new_mapping.default = NullChecker @spell_checkers = Ractor.make_shareable(new_mapping) else spell_checkers[error_class.to_s] = spell_checker end error_class.prepend(Correctable) if error_class.is_a?(Class) && !(error_class < Correctable) end
Fügt einem Fehler mithilfe eines gegebenen Spell-Checkers die DidYouMean Funktionalität hinzu.
Source
# File lib/did_you_mean.rb, line 117 def self.formatter if defined?(Ractor) Ractor.current[:__did_you_mean_formatter__] || Formatter else Formatter end end
Gibt den aktuell eingestellten Formatter zurück. Standardmäßig ist er auf DidYouMean::Formatter gesetzt.
Source
# File lib/did_you_mean.rb, line 126 def self.formatter=(formatter) if defined?(Ractor) Ractor.current[:__did_you_mean_formatter__] = formatter end end
Aktualisiert den primären Formatter, der zur Formatierung der Vorschläge verwendet wird.
Source
# File lib/did_you_mean.rb, line 92 def self.spell_checkers @spell_checkers end
Gibt eine teilbare Hash-Map von Fehlertypen und Spell-Checker-Objekten zurück.