class Tins::LRUCache

def [](key)

def [](key)
  case value = @data.delete(key){ not_exist }
  when not_exist
    nil
  else
    @data[key] = value
  end
end

def []=(key, value)

def []=(key, value)
  @data.delete(key)
  @data[key] = value
  if @data.size > @capacity
    @data.delete(@data.keys.first)
  end
  value
end

def clear

def clear
  @data.clear
end

def delete(key)

def delete(key)
  @data.delete(key)
end

def each(&block)

def each(&block)
  @data.reverse_each(&block)
end

def initialize(capacity)

def initialize(capacity)
  @capacity = capacity
  @data     = {}
end

def not_exist

def not_exist
  self.class.send(:not_exist)
end

def size

def size
  @data.size
end