Issue #9005 has been reported by jeremyevans0 (Jeremy Evans).

----------------------------------------
Bug #9005: object.send(:define_method, ...){...} creates private method
https://bugs.ruby-lang.org/issues/9005

Author: jeremyevans0 (Jeremy Evans)
Status: Open
Priority: Normal
Assignee: 
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 `<main>': 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/