Sha256: 98fcd20b4f98a641db1d16cf3e21537a1c6cbc3616d853168d0664f483d14b6d

Contents?: true

Size: 950 Bytes

Versions: 13

Compression:

Stored size: 950 Bytes

Contents

require 'digest/md5'
require 'fileutils'
require 'pathname'

module Sprockets
  module Cache
    # A simple file system cache store.
    #
    #     environment.cache = Sprockets::Cache::FileStore.new("tmp/sprockets")
    #
    class FileStore
      def initialize(root)
        @root = Pathname.new(root)

        # Ensure directory exists
        FileUtils.mkdir_p @root
      end

      # Lookup value in cache
      def [](key)
        pathname = path_for(key)
        pathname.exist? ? pathname.open('rb') { |f| Marshal.load(f) } : nil
      end

      # Save value to cache
      def []=(key, value)
        path_for(key).open('w') { |f| Marshal.dump(value, f)}
        value
      end

      private
        # Returns path for cache key.
        #
        # The key may include some funky characters so hash it into
        # safe hex.
        def path_for(key)
          @root.join(::Digest::MD5.hexdigest(key))
        end
    end
  end
end

Version data entries

13 entries across 13 versions & 2 rubygems

Version Path
sprockets-2.0.5 lib/sprockets/cache/file_store.rb
sprockets-2.0.4 lib/sprockets/cache/file_store.rb
sprockets-2.0.3 lib/sprockets/cache/file_store.rb
sprockets-2.0.2 lib/sprockets/cache/file_store.rb
sprockets-2.0.1 lib/sprockets/cache/file_store.rb
sprockets-2.0.0 lib/sprockets/cache/file_store.rb
bpm-1.0.0.beta.8 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-1.0.0.beta.6 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-1.0.0.beta.5 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-1.0.0.beta.4 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-0.1.4 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-0.1.3 vendor/sprockets/lib/sprockets/cache/file_store.rb
bpm-0.1.2 vendor/sprockets/lib/sprockets/cache/file_store.rb