3

Ruby と Rails 3 を使い始めています。使用したい Rails エンジン (Gem としてパッケージ化されています) がありますが、思い通りに動作しません。少し変更を加えたいのですが、独自のフォーク バージョンを作成する必要はありません。これがモンキーパッチが役立つところだと思います。

Ruby を初めて使用する (そして PHP のバックグラウンドを持つ) モンキー パッチは、私にとって新しい概念です。既存の gem にモンキー パッチを適用するにはどうすればよいですか? また、変更を整理するにはどうすればよいでしょうか? これに対する「ベストプラクティス」のアプローチを探しています。

4

1 に答える 1

1

これは非常に幅広い質問です。なぜなら、どの宝石やどのように動作を変更したいかについて言及しなかったからですが...

一般的に、これにアプローチする方法(これにアプローチする1つの方法)は、宝石を開くことです。すべてのファイルを開くことができるエディターを使用して、ファイルを簡単に切り替えることができます。宝石を見るとき、変更したい機能がどのクラスに含まれているかを見つけてください。

したがって、テストまたはスペックディレクトリに移動し、次のようなテストを記述します。

# Write tests to your API the way you want to write
# your code, not how you expect you *will* write that
# code.

def test_it_spits_out_my_awesome_error_message
  # some setup code
  assert_equal my_obj.spit_out_error_message, "some expected error message"
end

テストを実行します。もちろん、新しい機能が整っていないため、失敗します。

さて、あなたの変更がspit_out_error_messageクラスに入るとしましょうAwesomeAuthentication。プロジェクトにクラスを作成できます。おそらくlib/awesome_auth.rbなどに作成できます。その中で、あなたはここで説明されているように行います:Rails 3:a​​lias_method_chainはまだ使用されていますか?この手法を使用して既存のクラスを変更する方法について説明しているhttp://yehudakatz.com/2009/03/06/alias_method_chain-in-models/もお読みください(一番下までスクロールしてください)。

したがって、新しいを作成し、spit_out_error_message上記のようにそれを石畳にして、テストを再実行します。

于 2011-04-09T22:40:06.617 に答える