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) about 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