How to find private singleton methods
Asked Answered
C

1

10

I have defined a module Vehicle like such

module Vehicle
  class <<self
    def build
    end

    private

    def background
    end
  end
end

A call to Vehicle.singleton_methods returns [:build].

How can I inspect all private singleton methods defined by Vehicle?

Crotchety answered 27/8, 2012 at 2:51 Comment(0)
R
10

In Ruby 1.9+, you can simply do:

Vehicle.singleton_class.private_instance_methods(false)
#=> [:background]

In Ruby 1.8, things are a bit more complicated.

Vehicle.private_methods
#=> [:background, :included, :extended, :method_added, :method_removed, ...]

will return all private methods. You can filter most of the ones declared outside by doing

Vehicle.private_methods - Module.private_methods
#=> [:background, :append_features, :extend_object, :module_function]

but that doesn't get quite all of them out, you have to create a module to do that

Vehicle.private_methods - Module.new.private_methods
#=> [:background]

This last one has the unfortunate requirement of creating a module only to throw it away.

Roughspoken answered 27/8, 2012 at 3:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.