必ず役に立つ!Ruby on Railsでの開発で使えるデバッグコード
こ~れなんなん、これなんなん
こんにちは。
開発で最も必要とされる技術ってデバッグ力だと思っています。特にバグを大量生産することが得意な僕にとって、デバッグ力はとても大事。
そこで、普段開発で使ってるデバッグ用のコードをまとめておこうかと思います。
デバッグコード
Ruby on Railsで使える、デバッグで役に立ちそうなコードの一覧を書いていきます。なお、Rubyで使えるコードもあります。
byebug起動時やrails console
で使用することを想定しています。byebugの使い方よく分からんて人は以下の記事で使えるようにしてください。
https://web-nari.net/2018/03/16/byebug/
メソッド一覧
hoge
という変数の参照できるメソッドの中で、メソッド名にmethod_name
が含まれるメソッドの一覧を返します。
hoge.methods.select {|name| name.to_s.include?("method_name") }
メソッド定義場所
hoge
という変数の参照できるfoo
メソッドの定義されてるクラスを返します。
hoge.method(:foo)
ソースファイルのパス
hoge
という変数の参照できるfoo
メソッドの定義されてるファイルのパスを返します。
hoge.method(:foo).source_location
コールバック検索
Hoge
というクラスに定義されてるsave時のコールバックの一覧を返します。cb.kind.eql?
の引数にafterかbeforeを与えると、それぞれafter_コールバック関数、before_コールバック関数に定義されてるコールバックを返します。
Hoge._save_callbacks.select { |cb| cb.kind.eql?(:after) }.map { |cb| cb.filter }
その他のコールバック関数
save
だけではなくて以下のコールバック関数がそれぞれ利用可能。
=> [:validate,
:validation,
:initialize,
:find,
:touch,
:save,
:create,
:update,
:destroy,
:commit,
:rollback,
:before_commit,
:before_commit_without_transaction_enrollment,
:commit_without_transaction_enrollment,
:rollback_without_transaction_enrollment]
例えばafter_validation
のコールバックの一覧が知りたい場合は、以下のようにすればいい。
Hoge._validation_callbacks.select { |cb| cb.kind.eql?(:after) }.map { |cb| cb.filter }
クラス化
:string
という名前から該当するクラスに変換します。例の場合だと、String
が返ってきます。該当するクラスがない場合はNameError: uninitialized constant
が発生します。
:string.to_s.classify.constantize
クラスの確認
hoge
というオブジェクトのクラスを確認する。
hoge.class
継承元を検索する
hoge
というオブジェクトの継承クラスやそのさらに祖先も検索できる。
hoge.superclass # 親クラスを検索
hoge.ancestors # 祖先を検索
インスタンス変数の確認
hoge
というオブジェクトが持ってるインスタンス変数を返します。クラス変数はclass_variables
で参照可能。
hoge.instance_variables
まとめ
タイトルの勢いの割に書いてみたらすんごい少なかった。
これからも追加していきます。
Author And Source
この問題について(必ず役に立つ!Ruby on Railsでの開発で使えるデバッグコード), 我々は、より多くの情報をここで見つけました https://qiita.com/belion_freee/items/206ed4213c330d96340e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .