Question

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?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top