Issue #8284 has been updated by moll (Andri Möll). Well, it was actually reported by me to the RSpec project (https://github.com/rspec/rspec-core/pull/873) and the example I gave there involved a regular, not an anonymous module. The patch you made, nobu, tests only with an anonymous module, but does the fix also solve the visibility leakage for non anonymous modules? With Ruby v1.9.3p385: >> Object.define_method NoMethodError: private method `define_method' called for Object:Class from (irb):1 from /usr/local/bin/irb:12:in `<main>' >> module Foo >> public_class_method :define_method >> end => Foo >> Object.define_method ArgumentError: wrong number of arguments (0 for 1) from (irb):3:in `define_method' from (irb):3 from /usr/local/bin/irb:12:in `<main>' ---------------------------------------- Backport #8284: Expected behavior of Module#public_class_method https://bugs.ruby-lang.org/issues/8284#change-38717 Author: jacknagel (Jack Nagel) Status: Assigned Priority: Normal Assignee: nagachika (Tomoyuki Chikanaga) Category: Target version: It was pointed out by Myron Marston (here: https://gist.github.com/myronmarston/5401829) that calling public_class_method on an anonymous module makes the named method public on Object, etc. Object.define_method => NoMethodError Module.new.public_class_method(:define_method) Object.define_method => ArgumentError Also of note, the same is not true when calling it on a class: Object.define_method => NoMethodError Class.new.public_class_method(:define_method) Object.define_method => NoMethodError which seems inconsistent given: Module.new.singleton_class.ancestors => [Module, Object, Kernel, BasicObject] Class.new.singleton_class.ancestors => [Class, Module, Object, Kernel, BasicObject] Is this a bug or expected behavior? If the latter, what is the correct explanation? -- http://bugs.ruby-lang.org/