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
    end
  else
    klass.class_attribute(*VIEW_ACCESSORS)
  end
end

def asset_digest(path, options = {})

Returns String Hex digest or nil if digests are disabled.

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 = {})

Returns String path or nil if no asset was found.

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 assets_manifest; end

def assets_manifest; end

def compute_asset_path(path, options = {})

def compute_asset_path(path, options = {})
  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)

Eventually will be deprecated and replaced by source maps.

Override javascript tag helper to provide debugging support.
def javascript_include_tag(*sources)
  options = sources.extract_options!.stringify_keys
  if request_debug_assets?
    sources.map { |source|
      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 = {})

eventually be removed w/ Sprockets 3.x.
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 request_debug_assets?

and replaced by source maps in Sprockets 3.x.
Enable split asset debugging. Eventually will be deprecated
def request_debug_assets?
  debug_assets || (defined?(controller) && controller && params[:debug_assets])
end

def stylesheet_link_tag(*sources)

Eventually will be deprecated and replaced by source maps.

Override stylesheet tag helper to provide debugging support.
def stylesheet_link_tag(*sources)
  options = sources.extract_options!.stringify_keys
  if request_debug_assets?
    sources.map { |source|
      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