Issue #10985 has been updated by Tomoyuki Chikanaga.

Backport changed from 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: REQUIRED to 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONE

Backported into `ruby_2_2` branch at r50546.

----------------------------------------
Bug #10985: Ruby 2.2 respond_to_missing?/method_missing/Object#method is not detecting properly
https://bugs.ruby-lang.org/issues/10985#change-52495

* Author: Michael Herold
* Status: Closed
* Priority: Normal
* Assignee: 
* ruby -v: 2.2.1p85
* Backport: 2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: DONE
----------------------------------------
I'm one of the maintainers of the hashie gem. We had some reports that one of our specs started failing with Ruby 2.2 (and it was failing in ruby-head before then, but no one noticed), where `Object#method` was not picking up a `respond_to_missing?`/`method_missing` combo for our dynamic setters. This only occurs when we are dynamically constructing the method name from a string.

I have isolated the issue out into a tiny sample project that shows the issue. You can see that sample [on Github][regression_test]. That repository is set up to have Travis run on Ruby 2.1.5, 2.2.0, 2.2.1, and ruby-head to show that the issue is introduced in the 2.2 line.

I'm having trouble isolating the issue down at the C level, but from a Ruby level, it seems that dynamically constructed symbols aren't the same as explicitly constructed (i.e. fully typed out) symbols. Using the syntax from my little test repository:

```ruby
widget = Widget.new

widget.method(:abc=)  #=> This is found
widget.method("abc=") #=> This is found because it has previously been accessed via a symbol

widget.method("xyz=") #=> This is NOT found
widget.method(:xyz=)  #=> This is found
widget.method("xyz=") #=> Now this is found because it was previously accessed via a symbol
```

Because of that behavior, it makes me think that something is happening with the conversion of the argument to a symbol, but that could be way off.

Please let me know if the explanation is vague. I'm happy to provide any more information that you would find helpful.

[regression_test]: https://github.com/michaelherold/method_missing_regression



-- 
https://bugs.ruby-lang.org/