Actions
Bug #15591
closedSimpleDelegator: Undefined method when delegating a refined method
Bug #15591:
SimpleDelegator: Undefined method when delegating a refined method
Description
SimpleDelegator does not seem compatible with refinements (tested on 2.5.3 and 2.6.0).
Here's an example:
require "delegate"
module SuperDuper
refine Object do
def super_duper
puts "!"
end
end
end
class Result < SimpleDelegator; end
using SuperDuper
value = ""
# Works fine.
#
value.super_duper
# => !
# Breaks unexpectedly :(
#
Result.new(value).super_duper
# => undefined method `super_duper' for "":Result (NoMethodError)
Creating my own naive delegator works as expected:
require "delegate"
module SuperDuper
refine Object do
def super_duper
puts "!"
end
end
end
class Result
def initialize(value)
@value = value
end
def method_missing(method, *args, &block)
if @value.respond_to?(method)
@value.public_send(method, *args, &block)
else
super
end
end
end
using SuperDuper
value = ""
# Works fine.
#
value.super_duper
# => !
# Works fine.
#
Result.new(value).super_duper
# => !
Happy to work on fixing this, but first wanted to confirm that this is not expected behavior.
Bryan P.
Actions