2012-06-12 28 views
4

對於測試Rails應用程序的Rails引擎Konacha,我們需要一種方法來查找Sprockets可以編譯爲JavaScript的所有文件。Sprockets/Rails:查找所有文件鏈輪知道如何編譯

現在我們使用類似

Dir['spec/javascripts/**/*_spec.*'] 

但這種回升.bak.orig,和其他的備份文件。

Can Sprockets可以告訴我們它是否知道如何編譯文件,以便自動排除備份文件?

content_type_of沒有幫助:

Rails.application.assets.content_type_of('test/javascripts/foo.js.bak') 
=> "application/javascript" 

回答

14

您可以通過所有的文件在Sprockets::Environment的負載路徑使用each_file方法迭代:

Rails.application.assets.each_file { |pathname| ... } 

塊將與被調用Pathname實例用於加載路徑中每個文件的完全擴展路徑。

each_file返回Enumerator,所以你可以跳過該塊,並得到一個數組to_a,或調用include?就可以了。例如,要檢查文件是否在加載路徑中:

assets = Rails.application.assets 
pathname1 = Pathname.new("test/javascripts/foo.js").expand_path 
pathname2 = Pathname.new("test/javascripts/foo.js.bak").expand_path 
assets.each_file.include?(pathname1) # => true 
assets.each_file.include?(pathname2) # => false 
+0

謝謝,山姆!因此儘管'/ assets/foo.js'產生404(應該是這樣),這將會列出'.../app/assets/javascripts/foo.js.bak'。 (並且'Rails.application.assets.content_type_of'.../app/assets/javascripts/foo.js.bak'會產生''application/javascript''。)這很奇怪。有沒有其他的我可以申請的過濾器? –

+0

我發現了一個似乎工作得很好的解決方案:'(pathname.extname =='.js'|| Tilt [pathname])' - 這將拾取所有已經是JavaScript的文件(因此不需要被編譯),或者可以由Tilt編譯。這顯然不包括'.js.bak'文件。 –

相關問題