module Sprockets::Rails::Helper

Constants

VIEW_ACCESSORS

Attributes

assets[RW]
precompile[RW]
raise_runtime_errors[RW]

Public Class Methods

extended(obj) click to toggle source
# File lib/sprockets/rails/helper.rb, line 66
def self.extended(obj)
  obj.class_eval do
    attr_accessor(*VIEW_ACCESSORS)
  end
end
included(klass) click to toggle source
# File lib/sprockets/rails/helper.rb, line 54
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

Public Instance Methods

asset_digest(path, options = {}) click to toggle source

Get digest for asset path.

path - String path options - Hash options

Returns String Hex digest or nil if digests are disabled.

# File lib/sprockets/rails/helper.rb, line 101
def asset_digest(path, options = {})
  return unless digest_assets

  if digest_path = asset_digest_path(path, options)
    digest_path[/-(.+)\./, 1]
  end
end
asset_digest_path(path, options = {}) click to toggle source

Expand asset path to digested form.

path - String path options - Hash options

Returns String path or nil if no asset was found.

# File lib/sprockets/rails/helper.rb, line 115
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
asset_path(source, options = {}) click to toggle source

Computes the full URL to a asset in the public directory. This method checks for errors before returning path.

# File lib/sprockets/rails/helper.rb, line 87
def asset_path(source, options = {})
  unless options[:debug]
    check_errors_for(source, options)
  end
  super(source, options)
end
Also aliased as: path_to_asset
assets() click to toggle source
# File lib/sprockets/rails/helper.rb, line 16
def assets
  Sprockets::Rails::Helper.assets
end
assets_manifest() click to toggle source
# File lib/sprockets/rails/helper.rb, line 58
def assets_manifest; end
compute_asset_path(path, options = {}) click to toggle source
# File lib/sprockets/rails/helper.rb, line 72
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
javascript_include_tag(*sources) click to toggle source

Override javascript tag helper to provide debugging support.

Eventually will be deprecated and replaced by source maps.

# File lib/sprockets/rails/helper.rb, line 132
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
path_to_asset(source, options = {})
Alias for: asset_path
precompile() click to toggle source
# File lib/sprockets/rails/helper.rb, line 12
def precompile
  Sprockets::Rails::Helper.precompile
end
raise_runtime_errors() click to toggle source
# File lib/sprockets/rails/helper.rb, line 20
def raise_runtime_errors
  Sprockets::Rails::Helper.raise_runtime_errors
end

Protected Instance Methods

asset_needs_precompile?(source, filename) click to toggle source

Returns true when an asset will not be available after precompile is run

# File lib/sprockets/rails/helper.rb, line 206
def asset_needs_precompile?(source, filename)
  if assets_environment && assets_environment.send(:matches_filter, precompile || [], source, filename)
    false
  else
    true
  end
end
check_dependencies!(dep) click to toggle source

Ensures the asset is included in the dependencies list.

# File lib/sprockets/rails/helper.rb, line 176
def check_dependencies!(dep)
  depend_on(dep)
  depend_on_asset(dep)
rescue Sprockets::FileNotFound
end
check_errors_for(source, options) click to toggle source

Raise errors when source is not in the precompiled list, or incorrectly contains the assets_prefix.

# File lib/sprockets/rails/helper.rb, line 184
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
lookup_asset_for_path(path, options = {}) click to toggle source

Internal method to support multifile debugging. Will eventually be removed w/ Sprockets 3.x.

# File lib/sprockets/rails/helper.rb, line 224
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
request_debug_assets?() click to toggle source

Enable split asset debugging. Eventually will be deprecated and replaced by source maps in Sprockets 3.x.

# File lib/sprockets/rails/helper.rb, line 216
def request_debug_assets?
  debug_assets || (defined?(controller) && controller && params[:debug_assets])
rescue
  return false
end