0

Ruby アプリケーションのコードベースでコア ロジックとロギング/デバッグ/端末出力コードを分離する一般的な方法を探しています。理想的には、アプリケーション コア (典型的な Ruby プロジェクトの「lib」ディレクトリ) と並行して、別の「トレーサー」コードベースを持ちたいと考えています。トレーサ コードは、単体テストが test/spec ディレクトリの並列構造にあることが多いのと同じように、特別なディレクトリ (おそらく "trace" と呼ばれる) にあります。トレーサー ファイルは、さまざまなメソッドのラッパーを使用してターゲット クラスを拡張します。これらのラッパーは、ログへの書き込み、ブレークポイントの設定 (たとえばpry 's'をbinding.pry使用)、またはメソッドが返されるたびにプログレス バーをインクリメントするなどのことを行います。トレーサ コードのロードは、1 つのスイッチで制御できます。

私はいくつかの調査を行い、ほとんど空白になっています。私が求めている機能の一部を見つけました。たとえば、標準ライブラリのTracerクラスとmethod_decorators gem。しかし、テスト用のrspecに似た、より完全なソリューションが世の中にあるのではないかと思っています。そのようなものは存在しますか?または、この問題に対処する他の方法はありますか?

4

1 に答える 1

1

たとえば、開発時にのみこのコードを有効にすることを検討している場合は、レールに初期化子を追加できます: /config/initializers

if( Rails.env.development?)
  require "logging_wrappers"
end

lib/フォルダーで、拡張機能を lib/logging_wrappers.rb に追加できます。

User モデルで find_by_id 関数をオーバーライドするには、以下を追加するだけです。

class User
  alias_method :unlogged__find_by_id, :find_by_id

  def find_by_id(id)
    Rails.logger.info "About to find by id"
    x = unlogged__find_by_id(id)
    if (x.blank?)
      Rails.logger.info "We didn't find any users"
    end
  end

この手法の詳細については、いくつかの良い例をhttp://yehudakatz.com/2009/01/18/other-ways-to-wrap-a-method/で見つけることができます。

于 2013-06-25T21:43:26.747 に答える