从脚本中禁用did_you_mean gem

时间:2017-05-04 01:29:00

标签: ruby

我读过您可以通过Ruby命令行禁用did_you_mean gem(默认情况下已启用),如下所示:

ruby --disable-did_you_mean script.rb

script.rb而不是命令行参数中是否有相同的方法?

2 个答案:

答案 0 :(得分:2)

您可以通过在script.rb中重新实现来撤消module definition of DidYouMean,其中您将错误处理程序委派给原始的Ruby实现。

# Beginning of script.rb
module DidYouMean
  module Correctable
    prepend_features NameError
    def to_s
      super
    end
  end
end

ary = [1,2]
ary.att(0)

#=> undefined method `att' for [1, 2]:Array
#   (repl):15:in `<main>'

答案 1 :(得分:2)

宝石通过猴子修补NameError,并将DidYouMean::Correctable添加到其祖先。

NameError.ancestors
#=> [DidYouMean::Correctable, NameError, StandardError, Exception, Object, Kernel, BasicObject]

您可以通过重新定义Wand Maker建议的DidYouMean::Correctable#to_s来解决此问题,或者您可以完全从模块中删除该方法:

module DidYouMean::Correctable
  remove_method :to_s
end

具有相同的结果。