Ruby on rails 链轮/轨道:查找所有文件链轮知道如何编译

Ruby on rails 链轮/轨道:查找所有文件链轮知道如何编译,ruby-on-rails,asset-pipeline,sprockets,konacha,Ruby On Rails,Asset Pipeline,Sprockets,Konacha,对于用于测试Rails应用程序的Rails引擎Konacha,我们需要一种方法来查找Sprocket可以编译为JavaScript的所有文件 现在我们用的是 Dir['spec/javascripts/**/*_spec.*'] 但这会拾取.bak、.orig和其他备份文件 链轮能否以某种方式告诉我们它是否知道如何编译文件,以便自动排除备份文件 的内容\u类型\u不起作用: Rails.application.assets.content_type_of('test/javascripts/f

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

现在我们用的是

Dir['spec/javascripts/**/*_spec.*']
但这会拾取
.bak
.orig
和其他备份文件

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

的内容\u类型\u不起作用:

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

您可以使用
each_file
方法迭代
Sprockets::Environment
加载路径中的所有文件:

Rails.application.assets.each_file { |pathname| ... }
将使用加载路径中每个文件的完全扩展路径的
路径名
实例调用该块

每个_文件
都返回一个
枚举数
,因此您可以跳过该块并获取一个数组,该数组带有
到_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

谢谢你,山姆!因此,这将列出
../app/assets/javascripts/foo.js.bak
,尽管
/assets/foo.js
会产生404(应该如此)。(而且,“…/app/assets/javascripts/foo.js.bak”的
Rails.application.assets.content\u type\u产生
“application/javascript”
)这很奇怪。我找到了一个似乎工作得很好的解决方案:
(pathname.extname='.js'| | Tilt[pathname])
——这将拾取所有已经是JavaScript(因此不需要编译)或可以由Tilt编译的文件。这明显排除了
.js.bak
文件。