Forum: Ruby-core Pepended methods are skipped if calling alias

F1d6cc2b735bfd82c8773172da2aeab9?d=identicon&s=25 Nobuyoshi Nakada (nobu)
on 2014-04-12 12:05
(Received via mailing list)
Issue #9443 has been updated by Nobuyoshi Nakada.


`alias` in Ruby does refer to the same definition with the original
method.
Probably what you want would be `Forwardable`.

----------------------------------------
Bug #9443: Pepended methods are skipped if calling alias
https://bugs.ruby-lang.org/issues/9443#change-46189

* Author: Brian Cardarella
* Status: Rejected
* Priority: Normal
* Assignee:
* Category:
* Target version:
* ruby -v: 2.1.0
* Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
I am unsure if this is related to https://bugs.ruby-lang.org/issues/7842
as that issue specifically mentions the user of "super" which my example
code does not use. Anyway, here is the test to recreate:

```ruby
require 'test/unit'

module A
  def foo
    'foo2'
  end
end

class B
  def foo
    'foo1'
  end
  alias_method :bar, :foo
end

B.send(:prepend, A)

class AliasTest < Test::Unit::TestCase
  def test_no_alias
    assert_equal 'foo2', B.new.foo
  end

  def test_with_alias
    assert_equal 'foo2', B.new.bar
  end
end
```

`test_with_alias` fails and will only call the original "foo" method.

I have confirmed this on Ruby 2.0.0-p353 & 2.1.0
This topic is locked and can not be replied to.