I noticed some interesting behavior when implementing some
metaprogramming techniques with private. This is dependent on why's
metaid gem/library. I have included metaid at the end in case folks
are not familiar with it.

In 1.8.5 the output is:
true
true
true

In 1.8.6 the output is:
true
true
false

require 'metaid'

module NoSeeUm
  def self.included(base)
    base.extend(ClassMethods)
  end
  module ClassMethods
    def see(name)
      meta_eval do
        define_method("#{name}_public") { puts "I'm public" }
        define_method("#{name}_private") { puts "I'm private" }
        private ("#{name}_private").to_sym
        private
        define_method("#{name}_maybe_private") { puts "I may be private" }
      end
    end

  end
end

class Reveal
  include NoSeeUm
  see :me
end

p Reveal.public_methods.include?('me_public')
p Reveal.private_methods.include?('me_private')
p Reveal.private_methods.include?('me_maybe_private')

### Metaid ###

# Metaid == a few simple metaclass helper
# (See http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html.)
class Object
    # The hidden singleton lurks behind everyone
    def metaclass; class << self; self; end; end
    def meta_eval &blk; metaclass.instance_eval &blk; end

    # Adds methods to a metaclass
    def meta_def name, &blk
        meta_eval { define_method name, &blk }
    end

    # Defines an instance method within a class
    def class_def name, &blk
        class_eval { define_method name, &blk }
    end
end

Just wondering why the me_maybe_private method doesn't show up in the
list of private methods in 1.8.6? Which version of Ruby is 'right'?

Thanks,
Kevin