From: michael.j.herold+ruby@... Date: 2015-03-19T20:17:36+00:00 Subject: [ruby-core:68564] [Ruby trunk - Bug #10985] [Open] Ruby 2.2 respond_to_missing?/method_missing/Object#method is not detecting properly Issue #10985 has been reported by Michael Herold. ---------------------------------------- Bug #10985: Ruby 2.2 respond_to_missing?/method_missing/Object#method is not detecting properly https://bugs.ruby-lang.org/issues/10985 * Author: Michael Herold * Status: Open * Priority: Normal * Assignee: * ruby -v: 2.2.1p85 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 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/