gabynaiman/datacenter

View on GitHub
lib/datacenter/cache.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Datacenter
  class Cache

    def initialize(expiration_time=nil)
      @expiration_time = expiration_time
      @data = {}
    end

    def fetch(key, &block)
      set key, block.call if !data.key?(key) || expired?(key)
      get key
    end

    private

    attr_reader :data, :expiration_time

    def get(key)
      data[key][:value]
    end

    def set(key, value)
      data[key] = {
        value: value,
        fetched_at: Time.now
      }
    end

    def expired?(key)
      return false unless expiration_time
      Time.now >= data[key][:fetched_at] + expiration_time
    end

  end
end