2016-11-17 28 views
1

我目前正在寫一個非常簡單的開始到測試工具。這個想法是,你可以有包含我的「可測試」模塊的類。例如:功能羨慕當在模塊中混合

class Veilus 
    include Testable 
end 

site = Veilus.new 

可測試模塊有以下幾點:

module Testable 
    module_function 

    def included(caller) 
    caller.extend Testable::Interface::Page::Attribute 
    caller.__send__ :include, Testable::Interface::Page 
    end 
end 

當臭佬檢查出這個文件,它返回:

FeatureEnvy: Testable#included refers to 'caller' 
more than self (maybe move it to another class?) 

但不是點的那一個包含的方法?

我意識到我可以將Reek的這個方面的檢查關閉,但我很好奇我將如何遵循其建議在這裏?在這種情況下,這個班級不是我會知道的一段時間。其他人編寫的類將包括我的模塊。

同樣,我知道我可以關閉支票,但似乎我可能想要在其他情況下的支票。於是我開始懷疑,或許我正在做「mixin」方法錯誤,這就是Reek指出的。

回答

0

我發現了一種「處理」這種方式,實質上就是使用self來引用included調用。因此,例如,我可以這樣做:

module Testable 
    def self.included(caller) 
    caller.extend Testable::Interface::Page::Attribute 
    caller.__send__ :include, Testable::Interface::Page 
    end 
end 

我所做的是改變我上面的代碼中,使得以module_function呼叫不再使用。 (儘管這與其他風格指南規則相違背。)然後,我只在included消息前面使用了self.

當我這樣做時,FeatureEnvy警告不再發生。說實話,這似乎是FeatureEnvy條件被標記的一個非常薄弱的​​方式。

這和其他各種問題一樣,說服了我不要使用Reek並堅持使用Rubocop。 (我認識到他們在很多情況下看着非常不同的東西)。我不會主張這種方法用於企業類型的開發,但是在編寫測​​試工具方面,我發現你實際上做了很多「聰明」的事情,跳棋像Reek只是不喜歡。