Sha256: d86a1cadafd01a34bc4b309af3a96e311918cdf412bf1c35596e2d5348ec2829

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module Lawnchair
  module StorageEngine
    class Abstract
      class << self
        attr_reader :data_store
        
        def data_store
          @data_store ||= {}
        end
      
        def fetch(key, options={}, &block)
          start_time = Time.now
          if value = get(key, options)
            log("HIT", key, Time.now-start_time)
            return value
          else
            value = block.call
            set(key, value, options)
            log("MISS", key, Time.now-start_time)
            return value
          end
        end
      
        def get(key, options={})
          if options[:raw]
            data_store[computed_key(key)]
          else
            value = data_store[computed_key(key)]
            value.nil? ? nil : Marshal.load(value)
          end
        end
      
        def computed_key(key)
          raise "Missing key" if key.nil? || key.empty?
          key.gsub!(" ","") if key.match(/\s/)
          prefix = "Lawnchair"
          "#{prefix}:#{key}"
        end
        
        def db_connection?
          true
        end
        
        def log(message, key, elapsed)
          Lawnchair.redis.hincrby(message, computed_key(key), 1)
          ActionController::Base.logger.info("Lawnchair Cache: #{message} (%0.6f secs): #{key}" % elapsed) if defined? ::ActionController::Base
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lawnchair-0.6.10 lib/storage_engine/abstract.rb