たとえば API の呼び出しを console からテストしたい場合、もろもろの準備などを毎回書くのは大変面倒である。API を呼び出して結果を取得するまでをヘルパーメソッドにしておくと楽になる。RSpec でいうところの Request Spec を書けば良いという話は置いておいておく。
module Hoge class Application < Rails::Application # ... console do require "console/hoge_helper" Rails::ConsoleMethods.include Console::HogeHelper TOPLEVEL_BINDING.eval('self').extend Rails::ConsoleMethods end end
config/application.rb
に console
ディレクティブを追加して、そこで任意の Module を include してやる。
Rails::ConsoleMethods
に include すればいいのかと思ったけど、main
に extend してやらないと動かなかった。
module Console module HogeHelper def awesome # ... end end end
Module は lib/console/*_helper.rb
に置いてるけどどこでも良さそう。
ファイルに分けるまでもない場合は、直接メソッドを定義してやってもよい。
TOPLEVEL_BINDING.eval('self').instance_eval do def hoge # ... end end
これで Rails console 上からおもむろに awesome
メソッドが呼べる。
$ bin/rails console > awesome => すごい結果
pry-rails を使っているので この辺 を参考にしたが、もしかしたら irb だと事情が違うかもしれない。
この記事は Add helper methods to your Rails console を参考に書きました。