Sha256: a8cc3af4b2157014b10f6800a278c8c9fd311fb055d03620e87bec10712e9234

Contents?: true

Size: 1.49 KB

Versions: 7

Compression:

Stored size: 1.49 KB

Contents

module Smoke
  class Cache
    class << self
      def fetch(uri, options)  
        output = (enabled?) ? read(uri) : query(uri, options)
        
        unless output.keys.any?
          Smoke.log.info "Cache miss"
          output = query(uri, options)
        end
        
        output
      rescue
        query(uri, options)
      end

      def enabled?
        Smoke.config[:cache][:enabled]
      end
    
      # Clear all your request caches
      def clear!
        cache.clear
      end
  
      protected
      def cache
        Moneta.autoload(klass_name.to_sym, file_name)
        @@cache ||= Moneta.const_get(klass_name).new(Smoke.config[:cache][:options])
      end
            
      def file_name
        "moneta/#{Smoke.config[:cache][:store].to_s}"
      end
      
      def klass_name
        Smoke.config[:cache][:store].to_s.camel_case
      end
      
      def query(uri, options)
        request = RestClient.get(uri, options)
        write(uri, request, request.headers[:content_type]) if enabled?
        {:body => request, :content_type => request.headers[:content_type]}
      end
      
      def read(uri)
        key = generate_key(uri)
        return cache[key]
      end
      
      def write(uri, body, content_type)
        store = {:body => body, :content_type => content_type}
        self.cache.store(generate_key(uri), store, :expire_in => Smoke.config[:cache][:expiry])
      end
  
      def generate_key(key)
        Digest::MD5.hexdigest(key.to_s)
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
benschwarz-smoke-0.5.13 lib/smoke/cache.rb
smoke-0.5.17 lib/smoke/cache.rb
smoke-0.5.16 lib/smoke/cache.rb
smoke-0.5.15 lib/smoke/cache.rb
smoke-0.5.14 lib/smoke/cache.rb
smoke-0.5.13 lib/smoke/cache.rb
smoke-0.5.12 lib/smoke/cache.rb