Sha256: 3dda04ba6faca3a34b4472344389b3adfe3d7075f98a0b43d800d96b243484eb

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

module Gretel
  module Trails
    class ActiveRecordStore < Store
      class << self
        # Number of seconds to keep the trails in the database.
        # Default: +1.day+
        def expires_in
          @expires_in ||= 1.day
        end

        # Sets the number of seconds to keep the trails in the database.
        attr_writer :expires_in

        # Save array to database.
        def save(array)
          json = array.to_json
          key = Digest::SHA1.hexdigest(json)
          GretelTrail.set(key, array, expires_in.from_now)
          key
        end

        # Retrieve array from database.
        def retrieve(key)
          GretelTrail.get(key)
        end

        # Delete expired keys.
        def delete_expired
          GretelTrail.delete_expired
        end

        # Gets the number of trails stored in the database.
        def key_count
          GretelTrail.count
        end

        # Deletes all trails stored in the database.
        def delete_all_keys
          GretelTrail.delete_all
        end
      end
      
      class GretelTrail < ActiveRecord::Base
        serialize :value, Array

        def self.get(key)
          find_by_key(key).try(:value)
        end

        def self.set(key, value, expires_at)
          find_or_initialize_by_key(key).tap do |rec|
            rec.value = value
            rec.expires_at = expires_at
            rec.save
          end
        end

        def self.delete_expired
          delete_all(["expires_at < ?", Time.now])
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gretel-trails-0.0.4 lib/gretel/trails/stores/active_record_store.rb
gretel-trails-0.0.3 lib/gretel/trails/stores/active_record_store.rb
gretel-trails-0.0.2 lib/gretel/trails/stores/active_record_store.rb