class Tr8n::Cache

Public Class Methods

cache() click to toggle source
# File lib/tr8n/cache.rb, line 31
def self.cache
  return nil unless enabled?
  
  @cache ||= begin
    if Tr8n::Config.cache_adapter == 'ActiveSupport::Cache'
      store_params = cache_store_params
      store_params[0] = store_params[0].to_sym
      ActiveSupport::Cache.lookup_store(*store_params)
    else
      eval(Tr8n::Config.cache_adapter)  
    end
  end
end
cache_store_params() click to toggle source
# File lib/tr8n/cache.rb, line 27
def self.cache_store_params
  [Tr8n::Config.cache_store].flatten
end
cleanup(opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 96
def self.cleanup(opts = nil)
  return unless enabled?
  cache.cleanup(opts)
end
clear(opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 91
def self.clear(opts = nil)
  return unless enabled?
  cache.clear(opts)
end
decrement(name, amount = 1, opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 106
def self.decrement(name, amount = 1, opts = nil)
  return unless enabled?
  cache.decrement(name, amount, opts)
end
delete(key, opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 78
def self.delete(key, opts = nil)
  return unless enabled?

  # pp "delete #{key}"

  cache.delete(versioned_key(key), opts)
end
disabled?() click to toggle source
# File lib/tr8n/cache.rb, line 49
def self.disabled?
  not enabled?
end
enabled?() click to toggle source
# File lib/tr8n/cache.rb, line 45
def self.enabled?
  Tr8n::Config.enable_caching?
end
exist?(name, opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 86
def self.exist?(name, opts = nil)
  return unless enabled?
  cache.exists?(name, opts)
end
fetch(key, opts = {}) { || ... } click to toggle source

Cache Adapter Methods

# File lib/tr8n/cache.rb, line 68
def self.fetch(key, opts = {})
  return yield unless enabled?
  
  # pp "fetch #{key}"
  
  cache.fetch(versioned_key(key), opts) do 
    yield
  end
end
increment(name, amount = 1, opts = nil) click to toggle source
# File lib/tr8n/cache.rb, line 101
def self.increment(name, amount = 1, opts = nil)
  return unless enabled?
  cache.increment(name, amount, opts)
end
invalidate_source(source_name, language = Tr8n::Config.current_language) click to toggle source
# File lib/tr8n/cache.rb, line 125
def self.invalidate_source(source_name, language = Tr8n::Config.current_language)
  return if disabled? or language.default? 
  
  # only memory store needs this kind of reloading
  # memcached and other stores will expire shared keys
  return unless memory_store?
  
  # pp [:memory_times, sources_timestamps]
  
  translation_source = Tr8n::TranslationSource.find_or_create(source_name)

  # this is the only record that will never be cached and will always be loaded from the database
  translation_source_language = Tr8n::TranslationSourceLanguage.find_or_create(translation_source, language)

  if last_updated_at(translation_source_language) < translation_source_language.updated_at
    keys = Tr8n::TranslationKey.where(["id in (select translation_key_id from #{Tr8n::TranslationKeySource.table_name} where translation_source_id = ?) and updated_at > ?", 
                                      translation_source.id, last_updated_at(translation_source_language)])
                                      
    # pp "****************************** Found #{keys.count} outdated keys for this language"
    keys.each do |key|
      key.clear_translations_cache_for_language(language)
    end
    
    sources_timestamps[translation_source_language.id] = translation_source_language.updated_at
  end
end
last_updated_at(translation_source_language) click to toggle source
# File lib/tr8n/cache.rb, line 121
def self.last_updated_at(translation_source_language)
  sources_timestamps[translation_source_language.id] ||= 365.days.ago
end
memory_store?() click to toggle source
# File lib/tr8n/cache.rb, line 61
def self.memory_store?
  cache_store_params.first == 'memory_store'
end
sources_timestamps() click to toggle source

For local cache, the source+language = updated_at must always be present These keys cannot expire, or refreshing of the resources will never take place

# File lib/tr8n/cache.rb, line 117
def self.sources_timestamps
  @sources_timestamps ||= {}
end
version() click to toggle source
# File lib/tr8n/cache.rb, line 53
def self.version
  Tr8n::Config.cache_version
end
versioned_key(key) click to toggle source
# File lib/tr8n/cache.rb, line 57
def self.versioned_key(key)
  "#{version}_#{key}"
end