Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Object#public_methodsに偽の値を渡すと、スーパークラス由来のメソッドを除外してくれる

class Hoge
  def initialize(val)
     val.to_s
  end  
  def method_missing(name, *args, &blk)
    42
  end  
end

などというクラスがあった場合、何もつけずにpublic_methodsをやると
198個(awesome_printのモンキーパッチを含む)のメソッドが出てきます。

Hoge.new("").public_methods.size
#198

Hoge.new("").public_methods.include?(:method_missing)
#true

ここで、引数に偽の値(たとえばfalse)を与えると、
自身のメソッドのみを出力するようになります

Hoge.new("").public_methods(false)
[
    [0] method_missing(name, *args, &blk) Hoge
]