Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

単体だと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

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

nao58
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした