Sha256: b0a177321e2ccc161706549a80a150109f42086341106dcad7aa08d6a3ab6ef5

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

module Cachetastic
  module Adapters
    class Mongoid < Cachetastic::Adapters::Base

      class Store
        include ::Mongoid::Document
        include ::Mongoid::Timestamps

        field :cache_class, type: String
        field :key, type: String
        field :value, type: Object
        field :expiry_time, type: DateTime

        index({cache_class: 1, key: 1}, {background: true})

        validates :cache_class, presence: true
        validates :key, presence: true, uniqueness: {scope: :cache_class}
        validates :value, presence: {allow_blank: true}
        validates :expiry_time, presence: true
      end

      attr_accessor :klass

      def initialize(klass)
        self.klass = klass
        super
      end

      def get(key) # :nodoc:
        obj = connection.where(key: key).first
        if obj
          if obj.expiry_time > Time.now
            return obj.value
          else
            obj.destroy
          end
        end
        return nil
      end # get

      def set(key, value, expiry_time = configatron.cachetastic.defaults.default_expiry) # :nodoc:
        Cachetastic::Adapters::Mongoid::Store.create!(cache_class: self.klass.name, key: key, value: value, expiry_time: expiry_time.from_now)
        return value
      end # set

      def delete(key) # :nodoc:
        obj = connection.where(key: key).first
        if obj
          obj.destroy
        end
        return nil
      end # delete

      def expire_all # :nodoc:
        connection.destroy_all
        return nil
      end # expire_all

      def transform_key(key) # :nodoc:
        key.to_s.hexdigest
      end

      private
      def connection
        @connection ||= begin
          Cachetastic::Adapters::Mongoid::Store.create_indexes
          Cachetastic::Adapters::Mongoid::Store.where(cache_class: self.klass.name)
        end
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cachetastic-3.7.0 lib/cachetastic/adapters/mongoid.rb