Sha256: 17e774acc4c591eaff60a038434a1125d80aa275cdc84b2b93b90d68ec23b09d

Contents?: true

Size: 1.49 KB

Versions: 30

Compression:

Stored size: 1.49 KB

Contents

module Rediska
  module Databases
    module Expiring
      def self.included(base)
        base.send(:include, InstanceMethods)
        base.extend ClassMethods

        attr_reader :expires
      end

      module InstanceMethods
        def initialize
          super

          @expires = {}
        end

        def [](key)
          key = normalize(key)
          delete(key) if expired?(key)

          super
        end

        def []=(key, val)
          key = normalize(key)
          expire(key)

          super
        end

        def delete(key)
          key = normalize(key)
          expire(key)

          super
        end

        def expire(key)
          key = normalize(key)
          expires.delete(key)
        end

        def expired?(key)
          key = normalize(key)
          expires.include?(key) && expires[key] < Time.now
        end

        def key?(key)
          key = normalize(key)
          delete(key) if expired?(key)

          super
        end

        def values_at(*keys)
          keys.each do |key|
            key = normalize(key)
            delete(key) if expired?(key)
          end

          super
        end

        def keys
          super.select do |key|
            key = normalize(key)

            if expired?(key)
              delete(key)
              false
            else
              true
            end
          end
        end

        def normalize(key)
          key.to_s
        end
      end

      module ClassMethods
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
rediska-0.2.6 lib/rediska/databases/expiring.rb
rediska-0.2.5.1 lib/rediska/databases/expiring.rb
rediska-0.2.5 lib/rediska/databases/expiring.rb
rediska-0.2.4 lib/rediska/databases/expiring.rb
rediska-0.2.3 lib/rediska/databases/expiring.rb
rediska-0.2.2 lib/rediska/databases/expiring.rb
rediska-0.2.1 lib/rediska/databases/expiring.rb
rediska-0.2.0 lib/rediska/databases/expiring.rb
rediska-0.1.12 lib/rediska/databases/expiring.rb
rediska-0.1.11 lib/rediska/databases/expiring.rb
rediska-0.1.10 lib/rediska/databases/expiring.rb
rediska-0.1.9 lib/rediska/databases/expiring.rb
rediska-0.1.8 lib/rediska/databases/expiring.rb
rediska-0.1.7 lib/rediska/databases/expiring.rb
rediska-0.1.6 lib/rediska/databases/expiring.rb
rediska-0.1.5 lib/rediska/databases/expiring.rb
rediska-0.1.4 lib/rediska/databases/expiring.rb
rediska-0.1.2 lib/rediska/databases/expiring.rb
rediska-0.1.1 lib/rediska/databases/expiring.rb
rediska-0.1.0 lib/rediska/databases/expiring.rb