Sha256: 7bde21bd2b4415f09b920d180f432456b8f2e742a48b88f0402096ab78173b21

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

module Gretel
  module Trail
    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
      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

2 entries across 2 versions & 1 rubygems

Version Path
gretel-3.0.0.beta4 lib/gretel/trail/stores/active_record_store.rb
gretel-3.0.0.beta3 lib/gretel/trail/stores/active_record_store.rb