Actions
Bug #15278
closedRefinements don't work well with Forwardable
Bug #15278:
Refinements don't work well with Forwardable
Description
Refined methods become unreachable when called through def_delegator.
require "forwardable"
module URIExtensions
refine URI::Generic do
def authority
port_string = port == default_port ? nil : ":#{port}"
"#{host}#{port_string}"
end
def origin
"#{scheme}://#{authority}"
end
end
end
using URIExtensions
class Container
extend Forwardable
def_delegator :@uri, :origin
def_delegator :@uri, :authority
def initialize(uri)
@uri = uri
end
end
u = URI("https://google.com")
container = Container.new(u)
puts container.origin
puts container.authority
Updated by matz (Yukihiro Matsumoto) almost 7 years ago
- Status changed from Open to Closed
It's intentional. Refinement is lexical overriding of methods. That means refined methods (e.g. origin
in this case) are not called from delegators.
Matz.
Actions