class Sprockets::Base

‘Base` class for `Environment` and `Index`.

def [](*args)


environment['application.js']

Preferred `find_asset` shorthand.
def [](*args)
  find_asset(*args)
end

def attributes_for(path)

Internal. Return a `AssetAttributes` for `path`.
def attributes_for(path)
  AssetAttributes.new(self, path)
end

def build_asset(logical_path, pathname, options)

def build_asset(logical_path, pathname, options)
  pathname = Pathname.new(pathname)
  return unless stat(pathname)
  # If there are any processors to run on the pathname, use
  # `BundledAsset`. Otherwise use `StaticAsset` and treat is as binary.
  if attributes_for(pathname).processors.any?
    BundledAsset.new(self, logical_path, pathname, options)
  else
    StaticAsset.new(self, logical_path, pathname)
  end
end

def cache=(cache)

`[key]`/`[key]=value`, `read(key)`/`write(key, value)`.
setters. Either `get(key)`/`set(key, value)`,
The cache store must implement a pair of getters and

Set persistent cache store
def cache=(cache)
  expire_index!
  @cache = cache
end

def content_type_of(path)

Internal. Return content type of `path`.
def content_type_of(path)
  attributes_for(path).content_type
end

def each_entry(root, &block)

def each_entry(root, &block)
  return to_enum(__method__, root) unless block_given?
  root = Pathname.new(root) unless root.is_a?(Pathname)
  paths = []
  entries(root).sort.each do |filename|
    path = root.join(filename)
    paths << path
    if stat(path).directory?
      each_entry(path) do |subpath|
        paths << subpath
      end
    end
  end
  paths.sort_by(&:to_s).each(&block)
  nil
end

def each_file

def each_file
  return to_enum(__method__) unless block_given?
  paths.each do |root|
    each_entry(root) do |path|
      if !stat(path).directory?
        yield path
      end
    end
  end
  nil
end

def each_logical_path

def each_logical_path
  return to_enum(__method__) unless block_given?
  files = {}
  each_file do |filename|
    logical_path = attributes_for(filename).logical_path
    yield logical_path unless files[logical_path]
    files[logical_path] = true
  end
  nil
end

def entries(pathname)

Subclasses may cache this method.

Works like `Dir.entries`.
def entries(pathname)
  trail.entries(pathname)
end

def expire_index!

Clear index after mutating state. Must be implemented by the subclass.
def expire_index!
  raise NotImplementedError
end

def file_digest(path, data = nil)

Subclasses may cache this method.

Read and compute digest of filename.
def file_digest(path, data = nil)
  if stat = self.stat(path)
    # `data` maybe provided
    if data
      digest.update(data)
    # If its a file, digest the contents
    elsif stat.file?
      digest.file(path.to_s)
    # If its a directive, digest the list of filenames
    elsif stat.directory?
      contents = self.entries(path).join(',')
      digest.update(contents)
    end
  end
end

def find_asset(path, options = {})

Find asset by logical path or expanded path.
def find_asset(path, options = {})
  pathname = Pathname.new(path)
  if pathname.absolute?
    build_asset(attributes_for(pathname).logical_path, pathname, options)
  else
    find_asset_in_path(pathname, options)
  end
end

def index

Return an `Index`. Must be implemented by the subclass.
def index
  raise NotImplementedError
end

def inspect

Pretty inspect
def inspect
  "#<#{self.class}:0x#{object_id.to_s(16)} " +
    "root=#{root.to_s.inspect}, " +
    "paths=#{paths.inspect}, " +
    "digest=#{digest.to_s.inspect}" +
    ">"
end

def stat(path)

Subclasses may cache this method.

Works like `File.stat`.
def stat(path)
  trail.stat(path)
end