zendesk/zendesk_api_client_rb

View on GitHub
lib/zendesk_api/lru_cache.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ZendeskAPI
  # http://codesnippets.joyent.com/posts/show/12329
  # @private
  class ZendeskAPI::LRUCache
    attr_accessor :size

    def initialize(size = 10)
      @size = size
      @store = {}
      @lru = []
    end

    def write(key, value)
      @store[key] = value
      set_lru(key)
      @store.delete(@lru.pop) if @lru.size > @size
      value
    end

    def read(key)
      set_lru(key)
      @store[key]
    end

    def fetch(key)
      if @store.has_key? key
        read key
      else
        write key, yield
      end
    end

    private

    def set_lru(key)
      @lru.unshift(@lru.delete(key) || key)
    end
  end
end