Sha256: 78d837f4887d9e2121b2b6396984c2e32a7504860bab19983b2eac18ec5b8279

Contents?: true

Size: 1.01 KB

Versions: 1

Compression:

Stored size: 1.01 KB

Contents

require 'rubygems'
require 'cgi'
require 'json'
require 'memcached'

class Accelerator

  def initialize(host="localhost:11211")
    @memc = Memcached.new(host)
  end

  def delete(uri)
    @memc.delete(key(uri))
  end

  def expire(uri, ttl=nil)
    if data = get_and_set_time(uri)
      data[:ttl] = ttl if ttl
      data[:time] -= data[:ttl] || 10
      @memc.set(key(uri), data.to_json, 604800, false)
    end
  end

  def get(uri)
    if data = get_and_parse(uri)
      [ data.delete(:body), data ]
    end
  end

  def set(uri, body)
    data = get_and_set_time(uri) || { :time => Time.now.to_i }
    data[:body] = body
    @memc.set(key(uri), data.to_json, 604800, false)
  end

  private

  def key(k)
    CGI.escape(k).gsub(/%../) { |s| s.downcase }
  end

  def get_and_parse(uri)
    data = @memc.get(key(uri), nil) rescue nil
    if data
      JSON.parse(data, :symbolize_names => true)
    end
  end

  def get_and_set_time(uri)
    if data = get_and_parse(uri)
      data[:time] = Time.now.to_i
    end
    data
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
accelerator-0.1.0 lib/accelerator.rb