Sha256: 083968a4a9b87f97c98cf473806a800500e39c00f57b9d615b25b1159273bb81

Contents?: true

Size: 1.4 KB

Versions: 6

Compression:

Stored size: 1.4 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
  
      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

6 entries across 6 versions & 2 rubygems

Version Path
benschwarz-smoke-0.5.10 lib/smoke/cache.rb
benschwarz-smoke-0.5.7 lib/smoke/cache.rb
benschwarz-smoke-0.5.8 lib/smoke/cache.rb
smoke-0.5.10 lib/smoke/cache.rb
smoke-0.5.9 lib/smoke/cache.rb
smoke-0.5.11 lib/smoke/cache.rb