ループの内部で binding.pry
を使い処理を途中で止めたいとき
class FooController
def index
100.times do
# なにか処理1
binding.pry
# なにか処理2
end
end
end
こうやって書くと finish
, continue
, exit
などで処理を抜けたくても直後にまた次のループ評価でストップしてしまい、かなりうざい。
!!!
, exit!
などで脱出 -> ちょっと違う
!!!
, exit!
などで脱出してもいいけど、例外吐いて終わらせたいわけじゃなく、処理自体は続行して綺麗に終わって欲しい。
disable-pry
で無効化 -> ちょっと違う
disable-pry
コマンドを叩けばそれ以降は binding.pry
で止まらなくなりますが、設定するとそれ以降ずっと有効なフラグなので今度は逆に止められなくて困ります。
条件をつければ良い
そんなときは、適当に binding.pry
を評価する為の条件をつけてやるとちょっと幸せになれます。
class FooController
def index
100.times do
# なにか処理1
binding.pry unless @stop
# なにか処理2
end
end
end
処理が止まって確認後、 finish
, continue
, exit
などを叩く直前にこの場合なら @stop = true
とかを実施してやれば次は binding.pry
の条件が成立しないので止まりません。
条件はもちろん @stop
じゃなくてもなんでもいいですが、適当な名前のインスタンス変数がいろんな箇所で記述しやすいと思います。
(該当箇所のインスタンスが繰り返し生成される場合は別)