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?

Andrew Marshall
  • 95,083
  • 20
  • 220
  • 214
Mike Bradford
  • 240
  • 2
  • 10

1 Answers1

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.

Andrew Marshall
  • 95,083
  • 20
  • 220
  • 214