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`.
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…
Add table
Add a link
Reference in a new issue