Sha256: b687c022577ca2eee61d5cc139a81d41bb33c3bc697b83f564143840ea3693a2

Contents?: true

Size: 1.34 KB

Versions: 2

Compression:

Stored size: 1.34 KB

Contents

# Use singleton class Spree::Preferences::Store.instance to access
#
# StoreInstance has a persistence flag that is on by default,
# but we disable database persistence in testing to speed up tests
#
module Spree::Preferences

  class StoreInstance
    attr_accessor :persistence

    def initialize
      @cache = Rails.cache
      @persistence = true
      load_preferences
    end

    def set(key, value)
      @cache.write(key, value)
      persist(key, value)
    end

    def exist?(key)
      @cache.exist? key
    end

    def get(key, default_key=nil)
      @cache.read(key)
    end

    def delete(key)
      @cache.delete(key)
      destroy(key)
    end

    private

    def persist(cache_key, value)
      return unless should_persist?

      preference = Spree::Preference.find_or_initialize_by_key(cache_key)
      preference.value = value
      preference.save
    end

    def destroy(cache_key)
      return unless should_persist?

      preference = Spree::Preference.find_by_key(cache_key)
      preference.destroy if preference
    end

    def load_preferences
      return unless should_persist?

      Spree::Preference.all.each do |p|
         @cache.write(p.key, p.value)
      end
    end

    def should_persist?
      @persistence and Spree::Preference.table_exists?
    end

  end

  class Store < StoreInstance
    include Singleton
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
spree_core-1.0.0.rc2 app/models/spree/preferences/store.rb
spree_core-1.0.0.rc1 app/models/spree/preferences/store.rb