module Sprockets::Rails::Helper
def self.extended(obj)
def self.extended(obj) obj.class_eval do attr_accessor(*VIEW_ACCESSORS) end end
def self.included(klass)
def self.included(klass) if klass < Sprockets::Context klass.class_eval do alias_method :assets_environment, :environment def assets_manifest; end class_attribute :config, :assets_prefix, :digest_assets, :debug_assets end else klass.class_attribute(*VIEW_ACCESSORS) end end
def asset_digest(path, options = {})
options - Hash options
path - String path
Get digest for asset path.
def asset_digest(path, options = {}) return unless digest_assets if digest_path = asset_digest_path(path, options) digest_path[/-(.+)\./, 1] end end
def asset_digest_path(path, options = {})
options - Hash options
path - String path
Expand asset path to digested form.
def asset_digest_path(path, options = {}) if manifest = assets_manifest if digest_path = manifest.assets[path] return digest_path end end if environment = assets_environment if asset = environment[path] return asset.digest_path end end end
def asset_needs_precompile?(source, filename)
def asset_needs_precompile?(source, filename) if assets_environment && assets_environment.send(:matches_filter, precompile || [], source, filename) false else true end end
def asset_path(source, options = {})
Computes the full URL to a asset in the public directory. This
def asset_path(source, options = {}) unless options[:debug] check_errors_for(source, options) end super(source, options) end
def assets
def assets Sprockets::Rails::Helper.assets end
def assets_manifest; end
def assets_manifest; end
def check_dependencies!(dep)
def check_dependencies!(dep) depend_on(dep) depend_on_asset(dep) rescue Sprockets::FileNotFound end
def check_errors_for(source, options)
Raise errors when source is not in the precompiled list, or
def check_errors_for(source, options) return unless self.raise_runtime_errors source = source.to_s return if source.blank? || source =~ URI_REGEXP asset = lookup_asset_for_path(source, options) if asset && asset_needs_precompile?(asset.logical_path, asset.pathname.to_s) raise AssetFilteredError.new(asset.logical_path) end full_prefix = File.join(self.assets_prefix || "/", '') if !asset && source.start_with?(full_prefix) short_path = source[full_prefix.size, source.size] if lookup_asset_for_path(short_path, options) raise AbsoluteAssetPathError.new(source, short_path, full_prefix) end end end
def compute_asset_path(path, options = {})
def compute_asset_path(path, options = {}) # Check if we are inside Sprockets context before calling check_dependencies!. check_dependencies!(path) if defined?(depend_on) if digest_path = asset_digest_path(path) path = digest_path if digest_assets path += "?body=1" if options[:debug] File.join(assets_prefix || "/", path) else super end end
def javascript_include_tag(*sources)
Override javascript tag helper to provide debugging support.
def javascript_include_tag(*sources) options = sources.extract_options!.stringify_keys if options["debug"] != false && request_debug_assets? sources.map { |source| check_errors_for(source, :type => :javascript) if asset = lookup_asset_for_path(source, :type => :javascript) asset.to_a.map do |a| super(path_to_javascript(a.logical_path, :debug => true), options) end else super(source, options) end }.flatten.uniq.join("\n").html_safe else sources.push(options) super(*sources) end end
def lookup_asset_for_path(path, options = {})
Internal method to support multifile debugging. Will
def lookup_asset_for_path(path, options = {}) return unless env = assets_environment path = path.to_s if extname = compute_asset_extname(path, options) path = "#{path}#{extname}" end env[path] end
def precompile
def precompile Sprockets::Rails::Helper.precompile end
def raise_runtime_errors
def raise_runtime_errors Sprockets::Rails::Helper.raise_runtime_errors end
def request_debug_assets?
Enable split asset debugging. Eventually will be deprecated
def request_debug_assets? debug_assets || (defined?(controller) && controller && params[:debug_assets]) rescue return false end
def stylesheet_link_tag(*sources)
Override stylesheet tag helper to provide debugging support.
def stylesheet_link_tag(*sources) options = sources.extract_options!.stringify_keys if options["debug"] != false && request_debug_assets? sources.map { |source| check_errors_for(source, :type => :stylesheet) if asset = lookup_asset_for_path(source, :type => :stylesheet) asset.to_a.map do |a| super(path_to_stylesheet(a.logical_path, :debug => true), options) end else super(source, options) end }.flatten.uniq.join("\n").html_safe else sources.push(options) super(*sources) end end