irbで便利そうなメソッド

.irbrcに書いておくと便利そうなメソッド。
オブジェクトに対して、使えるメソッドを取得する。methodsメソッドだと、Objectなど祖先クラスのメソッドが全部出るので見にくい。そのクラスのオブジェクトに特有のメソッドだけが出るといいなと思って書いた。

デフォルトだと、nilとの差分。自然数を引数にすると、その階層分だけさかのぼったクラスorモジュールのインスタンスメソッドとの差分を取る。

module Kernel
  def m(obj=nil)
    if obj.instance_of?(Fixnum) and obj > 0
      k = self.class.ancestors[obj]
      k ||= Object
      (methods-k.instance_methods).sort
    elsif is_a? Module
      (methods-Module.methods).sort
    else
      (methods-obj.methods).sort
    end
  end
end