6

对于用于测试 Rails 应用程序的 Rails 引擎 Konacha,我们需要一种方法来查找 Sprockets 可以编译为 JavaScript 的所有文件。

现在我们使用类似的东西

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

但这会拾取.bak,.orig和其他备份文件。

Sprockets 能否以某种方式告诉我们它是否知道如何编译文件,以便自动排除备份文件?

content_type_of没有帮助:

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

1 回答 1

17

您可以使用以下方法遍历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
于 2012-06-12T21:46:53.283 回答