2012-08-03 69 views
2

我有一個寶石,我正在開發基於ApplicationController上的過濾器。它基本上是用於記錄和一個模塊定義了以下這樣一個圍繞過濾:Rails:包含相同過濾器兩次的副作用

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)我有責任保護用戶不要這樣做嗎?我可以用一個類變量這樣做,是這樣的:

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 

所以它的東西,我會想小心把這個變量不是線程安全的,但我不想寫一個圖書館。這很容易被破壞。謝謝。

回答