How to obtain all methods defined in a module (but only those methods!)

Hi. Consider:

module Foo
  def self.bar
  end
  def ble
  end
end

I need to get all methods defined in module Foo, including ble() and
Foo.bar()

But only these, no other methods!

With Foo.methods I sadly also get other methods, which makes this a bit
useless to answer my question "which methods does this module bring in?"

···

--
Posted via http://www.ruby-forum.com/.

$ irb
2.1.0 :001 > module Foo
2.1.0 :002?> def self.bar; end
2.1.0 :003?> def ble; end
2.1.0 :004?> end
  => :ble
2.1.0 :005 > Foo.methods(false)
  => [:bar]
2.1.0 :006 > Foo.instance_methods(false)
  => [:ble]

http://rdoc.info/stdlib/core/Object:methods
http://rdoc.info/stdlib/core/Module:instance_methods

-Justin

···

On 02/05/2014 01:13 AM, Marc Heiler wrote:

Hi. Consider:

module Foo
   def self.bar
   end
   def ble
   end
end

I need to get all methods defined in module Foo, including ble() and
Foo.bar()

But only these, no other methods!

With Foo.methods I sadly also get other methods, which makes this a bit
useless to answer my question "which methods does this module bring in?"

Thanks!

···

--
Posted via http://www.ruby-forum.com/.

Hmm... I lose the information here which one is a class method and which
one is not.

Am I right in assuming that Foo.methods(false) would return only class
methods?

···

--
Posted via http://www.ruby-forum.com/.

Ok thanks! That should suffice to build a little convenience method that
will output 'Foo.bar' and 'bar' as strings in an array output.

···

--
Posted via http://www.ruby-forum.com/.

Yes, as far as I know. This includes "singleton classes" for instances of a class.

2.1.0 :018 > a = A.new
  => #<A:0x00000001f8d4e0>
2.1.0 :019 > class << a
2.1.0 :020?> def z
2.1.0 :021?> end
2.1.0 :022?> end
  => :z
2.1.0 :023 > a.methods(false)
  => [:z]

-Justin

···

On 02/05/2014 01:36 AM, Marc Heiler wrote:

Hmm... I lose the information here which one is a class method and which
one is not.

Am I right in assuming that Foo.methods(false) would return only class
methods?