ApplicationController でフィルターを使用することに基づいて開発中の宝石があります。これは基本的にロギング用であり、モジュールの 1 つは次のように around フィルターを定義します。
module LogExceptionFilter
self.included(base)
base.around_filter :do_a_bunch_of_logging_stuff
end
def do_a_bunch_of_logging_stuff
...
end
end
たまたま例外ログを処理するのは周りのフィルターですが、私の質問はどのフィルターにも当てはまります。
だからこんな風に使われるはず
class ApplicationController
include LogExceptionFilter
end
だから私が心配しているのは、誰かがそうするかどうかです:
class ApplicationController
include LogExceptionFilter
include LogExceptionFilter
end
私は二度実行したくありませんdo_a_bunch_of_logging_stuff
。だから最初に
1)do_a_bunch_of_logging_stuff
が 2 回含まれている場合、レールはフィルターを 2 回適用しますか?
2)ユーザーがこれを行うのを防ぐのは私の責任ですか?次のようなクラス変数を使用してこれを行うことができます。
module LogExceptionFilter
class << self
cattr_accessor :filter_loaded
end
self.included(base)
unless filter_loaded
base.around_filter :do_a_bunch_of_logging_stuff
filter_loaded = true
end
end
def do_a_bunch_of_logging_stuff
...
end
end
この変数はスレッドセーフではないので、慎重に入れたいところです。しかし、簡単に壊れてしまうようなライブラリは書きたくありません。ありがとう。