Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
41
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@nao58

Pry上でreload!要らずのファイル編集

単体だとreload!の無いprypry-railsならコマンド入るけど、そうでなければコードをいじるたびに再起動とか面倒。

でも、pry上でエディタ起動してファイルを編集すれば、コードがリロードされるだけでなくオブジェクト再作成などテストの流れをやり直さなくて良くて便利だったのでメモ。

まず、エディタはvimを使いたいので.pryrcで指定しておく。

Pry.config.editor = "vim"

で、とりあえず簡単なテストクラスを作成。

/tmp/my_class.rb
class MyClass
  def initialize
    @create_time = DateTime.now
  end
  def foo
    puts "created at #{@create_time}."
  end
end

pryで動かしてみる。

pry
[1] pry(main)> require '/tmp/my_class'
=> true
[2] pry(main)> x = MyClass.new
=> #<MyClass:0x007fbbebd03848
 @create_time=
  #<DateTime: 2014-01-19T23:35:08+09:00 ((2456677j,52508s,39159000n),+32400s,2299161j)>>
[3] pry(main)> x.foo
created at 2014-01-19T23:35:08+09:00.
=> nil

というところで、先ほどのクラスを編集。

pry
[4] pry(main)> edit /tmp/my_class.rb

ここで先ほどエディタとして指定したvimが起動するので、適当に編集。今回はfooメソッドの出力するメッセージを気持ち変えてみただけ。

/tmp/my_class.rb
class MyClass
  def initialize
    @create_time = DateTime.now
  end
  def foo
    puts "edited. but still created at #{@create_time}."
  end
end

保存してvimを終了させると、pryに戻る(自動的にコードは再読み込みされている)。
Railsのreload!だと、リロード後はインスタンスの再作成からやらなければならないが、この形であれば、すぐに続きのテストが出来る。

pry
[5] pry(main)> x.foo
edited. but still created at 2014-01-19T23:35:08+09:00.
=> nil

いちいち開けたり閉じたりが面倒な場合もあるけど、テストの流れでちょっとした修正を入れたい時など、むしろ便利な場面も多いかなと。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
41
Help us understand the problem. What are the problem?