Class: Sprockets::Index

### Home Classes Methods

### In Files

- lib/sprockets/index.rb

### Parent

Sprockets::Base

### Methods

- ::new
- #build_asset
- #expire_index!
- #file_digest
- #find_asset
- #index

### Class/Module Index

Quicksearch

- Sprockets
- Sprockets::ArgumentError
- Sprockets::Asset
- Sprockets::AssetAttributes
- Sprockets::Base
- Sprockets::BundledAsset
- Sprockets::Cache
- Sprockets::Cache::FileStore
- Sprockets::Caching
- Sprockets::CharsetNormalizer
- Sprockets::CircularDependencyError
- Sprockets::ContentTypeMismatch
- Sprockets::Context
- Sprockets::DirectiveProcessor
- Sprockets::EcoTemplate
- Sprockets::EjsTemplate
- Sprockets::EncodingError
- Sprockets::EngineError
- Sprockets::Engines
- Sprockets::Environment
- Sprockets::Error
- Sprockets::FileNotFound
- Sprockets::FileOutsidePaths
- Sprockets::Index
- Sprockets::JstProcessor
- Sprockets::Manifest
- Sprockets::Mime
- Sprockets::ProcessedAsset
- Sprockets::ProcessedAsset::DependencyFile
- Sprockets::Processing
- Sprockets::Processor
- Sprockets::SafetyColons
- Sprockets::Server
- Sprockets::StaticAsset
- Sprockets::Trail
- Sprockets::UnserializeError
- Sprockets::Utils
- Rake
- Rake::SprocketsTask

No matching classes.

# Sprockets::Index

`Index` is a special cached version of `Environment`.

The expection is that all of its file system methods are cached for the instances lifetime. This makes `Index` much faster. This behavior is ideal in production environments where the file system is immutable.

`Index` should not be initialized directly. Instead use `Environment#index`.

### Public Class Methods

new(environment) click to toggle source

    # File lib/sprockets/index.rb, line 14
    def initialize(environment)
      @environment = environment

      if environment.respond_to?(:default_external_encoding)
        @default_external_encoding = environment.default_external_encoding
      end

      # Copy environment attributes
      @logger            = environment.logger
      @context_class     = environment.context_class
      @cache             = environment.cache
      @trail             = environment.trail.index
      @digest            = environment.digest
      @digest_class      = environment.digest_class
      @version           = environment.version
      @mime_types        = environment.mime_types
      @engines           = environment.engines
      @preprocessors     = environment.preprocessors
      @postprocessors    = environment.postprocessors
      @bundle_processors = environment.bundle_processors

      # Initialize caches
      @assets  = {}
      @digests = {}
    end

### Public Instance Methods

file_digest(pathname) click to toggle source

Cache calls to `file_digest`

    # File lib/sprockets/index.rb, line 46
    def file_digest(pathname)
      key = pathname.to_s
      if @digests.key?(key)
        @digests[key]
      else
        @digests[key] = super
      end
    end

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

Cache `find_asset` calls

    # File lib/sprockets/index.rb, line 56
    def find_asset(path, options = {})
      options[:bundle] = true unless options.key?(:bundle)
      if asset = @assets[cache_key_for(path, options)]
        asset
      elsif asset = super
        logical_path_cache_key = cache_key_for(path, options)
        full_path_cache_key    = cache_key_for(asset.pathname, options)

        # Cache on Index
        @assets[logical_path_cache_key] = @assets[full_path_cache_key] = asset

        # Push cache upstream to Environment
        @environment.instance_eval do
          @assets[logical_path_cache_key] = @assets[full_path_cache_key] = asset
        end

        asset
      end
    end

index() click to toggle source

No-op return self as index

    # File lib/sprockets/index.rb, line 41
    def index
      self
    end

### Protected Instance Methods

build_asset(path, pathname, options) click to toggle source

Cache asset building in memory and in persisted cache.

    # File lib/sprockets/index.rb, line 84
    def build_asset(path, pathname, options)
      # Memory cache
      key = cache_key_for(pathname, options)
      if @assets.key?(key)
        @assets[key]
      else
        @assets[key] = begin
          # Persisted cache
          cache_asset(key) do
            super
          end
        end
      end
    end

expire_index!() click to toggle source

Index is immutable, any methods that try to clear the cache should bomb.

    # File lib/sprockets/index.rb, line 79
    def expire_index!
      raise TypeError, "can't modify immutable index"
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.