Domanda

For Konacha, a Rails engine for testing Rails apps, we need a way to find all files that Sprockets can compile to JavaScript.

Right now we use something like

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

but this picks up .bak, .orig, and other backup files.

Can Sprockets tell us somehow whether it knows how to compile a file, so that backup files would be automatically excluded?

content_type_of doesn't help:

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

Soluzione

You can iterate through all the files in a Sprockets::Environment's load path using the each_file method:

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

The block will be invoked with a Pathname instance for the fully expanded path of each file in the load path.

each_file returns an Enumerator, so you can skip the block and get an array with to_a, or call include? on it. For example, to check whether a file is in the load path:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top