Rubyはirbでmethodsメソッドを使うことで、それぞれのオブジェクトに定義されているメソッドをインタラクティブに検索できて便利ですよね。
メソッド検索用メソッド一覧
でmethodsという単語を含むメソッドは以下の通りです。
# instance_methods (Module)
# methods (Object)
# private_instance_methods (Module)
# private_methods (Object)
# protected_instance_methods (Module)
# protected_methods (Object)
# public_instance_methods (Module)
# public_methods (Object)
# singleton_methods (Object)
private, public等のスコープやインスタンスメソッドや特異メソッドのみ取り出すものがあるようですね。
ちなみに変数を検索するのもあります。(variablesで検索)
# class_variables (Module)
# global_variables (Kernel)
# instance_variables (Object)
# local_variables (Kernel)
# thread_variables (Thread)
constantsはクラスメソッドとインスタンスメソッドだけ。
::constants (Module)
# constants (Module)
以下の例では基本的にmethodsを使いますが、目的に応じてpublic_methods、instance_methods等に適宜置き換えてください。
とりあえずアルファベット順にメソッド一覧をみてみる
hoge.methods.sort
めちゃくちゃいっぱいメソッドが出てくるがアルファベット順にソートしておくことで、こんなメソッドないかなーというのが探しやすくなります。
grepしてみる
例えばtargetという文字を含むメソッドを探すには以下のようにします。
ここでは念のためiオプションを付けて大文字小文字を無視しています。CamelCaseを使うRubyMotionでは必須です。
hoge.methods.grep /target/i
Object等の基底クラスで定義されているメソッドを取り除く
hoge.methods - Object.methods
ObjectはActiveRecord::Base等、場合に応じて適当に変えてみて下さい。
ちなみにinstance_methodsの検索だったら、
hoge.instance_methods - Module.instance_methods
スーパークラスに定義されているメソッドを取り除く
hoge.methods - hoge.class.superclass.instance_methods
hoge.class.methods - hoge.class.superclass.methods
instance_methodsだったら、第二引数がinclude_superなので実は普通にできます。
hoge.instance_methods(false)
ちなみに:pryが使える場合
pryのlsを使えばやりたいことは多分解決します。
[1] pry(main)> ls hoge
RubyMotionではpryが使えないので上の方法を組み合わせることで、メソッドをうまく探すと幸せになれるかもしれません。