2012-06-12 3 views
4

Для Konacha, механизма Rails для тестирования приложений Rails, нам нужен способ поиска всех файлов, которые Sprockets может скомпилировать для JavaScript.Sprockets/Rails: Найти все файлы Sprockets умеет компилировать

Прямо сейчас мы используем что-то вроде

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

, но это поднимает .bak, .orig и другие файлы резервного копирования.

Может ли Sprockets сказать нам, как он умеет скомпилировать файл, чтобы файлы резервных копий были автоматически исключены?

content_type_of не помогает:

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

ответ

14

Вы можете перебрать все файлы в пути Грузоподьемность Sprockets::Environment «s с использованием метода 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

Спасибо, Сэм! Таким образом, это будет содержать список «.../app/assets/javascripts/foo.js.bak», хотя '/ assets/foo.js' дает 404 (как и должно быть). (И 'Rails.application.assets.content_type_of '.../app/assets/javascripts/foo.js.bak'' дает' 'application/javascript''.) Это довольно странно. Есть ли другой фильтр, который я мог бы применить? –

+0

Я нашел решение, которое, кажется, работает достаточно хорошо: '(pathname.extname == '.js' || Tilt [pathname])' - это будет отображать все файлы, которые либо уже являются JavaScript (отсюда не нужно быть скомпилирован) или может быть скомпилирован Tilt. Это заметно исключает файлы '.js.bak'. –

 Смежные вопросы

  • Нет связанных вопросов^_^