Rails 4.2: Пользовательский помощник для манифеста SCSS в движках

Наше приложение представляет собой набор из 3-х движков, составляющих наш базовый гем. Другие гемы-плагины, написанные специально для нашего базового гема, можно использовать для добавления функциональности к базе.

В настоящее время у нас есть 2 настраиваемые директивы sprockets и 1 настраиваемый импортер Sass, который пытается динамически извлекать файлы SCSS из этих плагинов в базовый манифест. Надуманный пример выглядит примерно так:

//= depend_on_gemfile     # mimics default "depend_on" functionality
//= depend_on_stylesheets # mimics default "depend_on" functionality

...

@import 'engine/namespace/settings/global';
@import 'engine/namespace/settings/colors';
@import 'engine/namespace/settings/fonts';
@import '[engine-plugins]/namespace/settings'; # mimics Sass Filesystem importer

...

Чтобы было ясно, это работает. У нас проблемы с тем, как Sass кэширует файлы, это слишком сложно для понимания и не является моей целью на данный момент.

Дело в том, что мы поняли, что удаление кастомных директив Sprockets и импортера Sass в пользу использования хелпера Rails также решит нашу проблему, так как ERB будет скомпилирован раньше SCSS, мы сможем найти и отформатировать все путей, необходимых во всех включенных плагинах, в строку и вывести ее в манифест. Что-то типа:

@import 'engine/namespace/settings/global';
@import 'engine/namespace/settings/colors';
@import 'engine/namespace/settings/fonts';
<%= load_plugin_stylesheets_for('settings'); %>

...

Это кажется гораздо более простым решением, так как все, что мы делаем, это находим каждый путь и преобразовываем эти пути в строки.

Проблема, похоже, в том, что помощники Rails полностью находятся за пределами домена Sprockets.

Я нашел некоторые ресурсы, но все они, похоже, относятся к Rails 3.

Мне любопытно, была ли у кого-нибудь эта проблема с Rails 4, решили ли они ее и как. Или, если я просто думаю об этом неправильно, и есть лучший способ подойти к проблеме без такого же чрезмерного усложнения, как у нас было раньше.

TL;DR

Я хотел бы использовать обычные помощники Rails внутри файла манифеста Sprockets. Версия Rails — 4.2.4. Мы запускаем двигатели. Это возможно?


ИЗМЕНИТЬ:

Этот комментарий ответил на мой вопрос.

После реализации этого решения в инициализаторе в нашем файле engine.rb стали доступны все помощники Rails ActionView, включая мой пользовательский написанный помощник.


person meowsus    schedule 13.10.2015    source источник


Ответы (1)


У нас была аналогичная проблема некоторое время назад.

application.scss (внутри драгоценного камня) выглядит так:

 /*
 *= require_tree .
 *= require_self
 */

@import "c3.min";
@import "analytics";

а gemspec содержит строку для включения всего кода из папки приложения.

Gem::Specification.new do |s|    
   s.files = Dir['{app,config,db,lib}/**/*', 'MIT-LICENSE', 'Rakefile',   'README.rdoc']
end

Обязательно убедитесь, что у вас не включено кэширование в файлах env.

person Mike Eirih    schedule 13.10.2015
comment
Спасибо, Майк, но я нашел другое решение, которое немного лучше подходит для моего варианта использования. Я дал ссылку в своем исходном посте. - person meowsus; 14.10.2015