mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Let Correctable#original_message skip prepended method definitions
Previously, DidYouMean::Correctable#original_message did `method(:to_s).super_method.call` to call the original to_s method by skipping Correctable#to_s. I'm now creating a gem that prepends another to_s method to NameError, which confuses the hack. An immediate solution is to replace it with `method(:to_s).super_method.super_method.call` to skip the two methods. But it is too ad-hoc. This changeset uses more extensible approach and allow a prepended module to declare that they should be skipped by defining a constant named `SKIP_TO_S_FOR_SUPER_LOOKUP`. https://github.com/ruby/did_you_mean/commit/8352c154e3
This commit is contained in:
parent
4670458af8
commit
612b6fcd37
1 changed files with 8 additions and 1 deletions
|
@ -1,7 +1,14 @@
|
|||
module DidYouMean
|
||||
module Correctable
|
||||
SKIP_TO_S_FOR_SUPER_LOOKUP = true
|
||||
private_constant :SKIP_TO_S_FOR_SUPER_LOOKUP
|
||||
|
||||
def original_message
|
||||
method(:to_s).super_method.call
|
||||
meth = method(:to_s)
|
||||
while meth.owner.const_defined?(:SKIP_TO_S_FOR_SUPER_LOOKUP)
|
||||
meth = meth.super_method
|
||||
end
|
||||
meth.call
|
||||
end
|
||||
|
||||
def to_s
|
||||
|
|
Loading…
Reference in a new issue