module Sprockets::Preload
Constants
- VERSION
Attributes
environment[RW]
inline[RW]
precompiles[RW]
Public Class Methods
[](path)
click to toggle source
Forks circular calls protection to allow cross-tree assets interactions
# File lib/sprockets/preload.rb, line 38 def self.[](path) calls = Thread.current[:sprockets_circular_calls] Thread.current[:sprockets_circular_calls] = Set.new environment[path] ensure Thread.current[:sprockets_circular_calls] = calls end
collect(environment, logical_path)
click to toggle source
Recursively collects #= preload directives from given logical path
# File lib/sprockets/preload.rb, line 61 def self.collect(environment, logical_path) pathname = environment.resolve logical_path context = environment.context_class.new(environment, logical_path, pathname) template = Sprockets::DirectiveProcessor.new(pathname.to_s) template.render(context, {}) to_preload = context._assets_to_preload || [] # Files marked for preloading should not have nested preload directives to_preload.each do |dependency| nesteds = collect(environment, dependency) if nesteds.length > 0 raise CircularPreloadError.new("Circular preloading detected: #{dependency} -> #{nesteds.join(',')}") end end # Going deeper dependencies = context._required_paths.select do |dependency| dependency != pathname.to_s end dependencies.map! do |dependency| environment.attributes_for(dependency).logical_path end dependencies -= context._stubbed_assets.to_a + [pathname.to_s] dependencies.each do |dependency| to_preload += collect(environment, dependency) end to_preload end
each_logical_path() { |path, environment| ... }
click to toggle source
Iterates through all JS base-level assets of an application
# File lib/sprockets/preload.rb, line 49 def self.each_logical_path(&block) paths = environment.each_logical_path(*precompiles).to_a + precompiles.flatten.select{ |fn| Pathname.new(fn).absolute? if fn.is_a?(String) } paths.each do |path| yield(path, environment) if environment.content_type_of(path) == 'application/javascript' end end
setup_sprockets(receiver)
click to toggle source
# File lib/sprockets/preload.rb, line 22 def self.setup_sprockets(receiver) receiver.append_path File.expand_path('../../../assets', __FILE__) # Pass in current environment condition to mark if loading should be stubbed receiver.register_postprocessor 'application/javascript', :preload do |context, data| if context._assets_to_preload data << "SprocketsPreload.inline = true;" unless context.preload? end data end end