Sprockets Require Module
Sprockets Require Module provides a sprocket directive require_module that allows wrapping a number of assets in a module and requiring them at once.
Installation
In order to install sprockets-require_module into your project, add
gem "sprockets-require_module"to your Gemfile.
Usage
Provide a module that has an assets method. For example:
module MyProject
module Assets
extend self
def assets
['myproject/core', 'myproject/something_else']
end
end
endMake sure the module is either loaded or auto loadable.
In a sprockets manifest, add a reference to this module, like this:
//= require_module my_project/assetsThe module does not have to be an actual module. As long as it is a constant that has an assets method, it's fine. So it can be class too.
The assets method should return an Enumerable.
Asset caching
Sprockets caches all asset files, also on development, to prevent unnecessary asset compilation. This behavior conflicts a bit with this gem. Luckily Sprockets allows us to register files that are dependencies of the assets. When these dependencies change, the assets that depend on them, are recompiled.
By default Sprockets Require Module registers the file that defines the assets method as a dependency. That means that in the example MyProject::Assets module, you can change the list of returned asset paths and it will all update perfectly well, because Sprockets will detect that the file where the module is defined has been altered and will invalidate the relevant cache parts.
If you create a more complicated implementation, you might need to spend a little more effort to make sure Sprockets cache does not prevent asset recompilation. If you for example create a class that receives it's paths from another part of the application, you will need to mark those other parts as dependencies.
If the constant that you mention in your require_module directive has an asset_dependencies method, the return value of this method is used as the list of dependencies, instead of the default behavior.