Sha256: b625d58f94da174ab4f5b1742bec1c038abce38b2eeeb3e8358bda375b951400

Contents?: true

Size: 1.15 KB

Versions: 2

Compression:

Stored size: 1.15 KB

Contents

module TmpCache

  module Prototype

    def self.included(klass)
      klass.extend Methods
      klass.__send__ :include, Methods
    end

    def self.apply(object)
      object.extend Methods
    end


    module Methods
      def cache
        @cache ||= Hash.new{|h,k| h = {:expire => 0, :value => nil}}
      end

      def set(key, value, expire=nil)
        cache[key] = {
          :value => value,
          :expire => expire ? Time.now.to_i+expire.to_i : nil
        }
        value
      end

      def get(key)
        if cache[key][:expire] < Time.now.to_i
          return cache[key][:value] = nil
        else
          return cache[key][:value]
        end
      end

      def gc
        cache.each do |k,c|
          if c[:expire] != nil and Time.now.to_i > c[:expire].to_i
            cache.delete k
          end
        end
      end

      def reset
        @cache = nil
      end

      def keys
        gc
        cache.keys
      end

      def values
        gc
        cache.values.map{|v| v[:value] }
      end

      def each(&block)
        gc
        cache.each do |k,v|
          yield k, v[:value]
        end
      end
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tmp_cache-0.1.1 lib/tmp_cache/cache.rb
tmp_cache-0.1.0 lib/tmp_cache/cache.rb