From: "jeremyevans0 (Jeremy Evans)" Date: 2013-12-23T15:54:53+09:00 Subject: [ruby-core:59276] [ruby-trunk - Bug #9005] object.send(:define_method, ...){...} creates private method Issue #9005 has been updated by jeremyevans0 (Jeremy Evans). There's only two days until the release of 2.1.0, and this still hasn't been fixed. This is a serious regression that breaks existing code (among other things, it causes Sequel's tests to freeze). If this can't be fixed before 2.1.0, I think r40022 should be reverted on the 2.1 branch, and the feature should be moved to 2.2.0. Assuming this is fixed on trunk before 2.1.0, it should be immediately backported to the 2.1 branch. ---------------------------------------- Bug #9005: object.send(:define_method, ...){...} creates private method https://bugs.ruby-lang.org/issues/9005#change-43842 Author: jeremyevans0 (Jeremy Evans) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: core Target version: current: 2.1.0 ruby -v: ruby 2.1.0dev (2013-09-22 trunk 43011) [i386-openbsd] Backport: I assume this is caused by r40022, which made define_method consider visibility. However, visibility should only be considered if define_method is called normally, not via send. When called via send, it should define a public method. Here's example code showing the error: $ ruby21 -ve "Object.send(:define_method, :foo){|*a| 1}.foo" -e:1:in `
': private method `foo' called for :foo:Symbol (NoMethodError) I apologize in advance if this has already been fixed (I tested 2.1.0-preview1, not trunk), but from the commit logs it doesn't appear to have been. -- http://bugs.ruby-lang.org/