модуль DidYouMean
Джем DidYouMean добавляет функциональность для предложения возможных имён методов/классов при ошибках, таких как NameError и NoMethodError. В Ruby 2.3 или более поздних версиях он автоматически активируется при запуске.
@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
Отключение did_you_mean
Иногда вам может потребоваться отключить джем did_you_mean для отладки проблем в самом объекте ошибки. Вы можете полностью отключить его, указав опцию --disable-did_you_mean для команды ruby:
$ ruby --disable-did_you_mean -e "1.zeor?" -e:1:in `<main>': undefined method `zeor?' for 1:Integer (NameError)
Когда у вас нет прямого доступа к команде ruby (например, +rails console+, irb), вы можете применить опции, используя переменную окружения RUBYOPT:
$ RUBYOPT='--disable-did_you_mean' irb irb:0> 1.zeor? # => NoMethodError (undefined method `zeor?' for 1:Integer)
Получение исходного сообщения об ошибке
Иногда вам не нужно полностью отключать джем, но нужно получить исходное сообщение об ошибке без предложений (например, для тестирования). В этом случае вы можете использовать метод #original_message в объекте ошибки:
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)
Константы
- SPELL_CHECKERS
-
Карта типов ошибок и объектов проверки орфографии.
Общедоступные методы класса
# File lib/did_you_mean.rb, line 91 def self.correct_error(error_class, spell_checker) SPELL_CHECKERS[error_class.name] = spell_checker error_class.prepend(Correctable) unless error_class < Correctable end
Добавляет функциональность DidYouMean к ошибке, используя заданный проверятель орфографии
# File lib/did_you_mean.rb, line 102 def self.formatter @@formatter end
Возвращает текущий установленный форматер. По умолчанию он установлен на DidYouMean::Formatter.
# File lib/did_you_mean.rb, line 107 def self.formatter=(formatter) @@formatter = formatter end
Обновляет основной форматер, используемый для форматирования предложений.
Ruby Core © 1993–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.