module Nucache::CountMonkeyPatch

Public Instance Methods

count(column_name=nil, nocache=false, invalidation=nil) click to toggle source
Calls superclass method
# File lib/nucache.rb, line 15
def count(column_name=nil, nocache=false, invalidation=nil)
  return super(column_name) if nocache
  return super(column_name) if group_values.any?
  amber = "CachingTable".constantize rescue nil
  if amber.nil?
    throw Exception.new("Missing Class CachingTable")
    return
  end
  sql = self.to_sql
  invalidation_date = invalidation
  if invalidation_date.nil?
    modelinvalidation = nil
    modelinvalidation = self.count_cache_invalidation(sql) rescue nil
    invalidation_date = modelinvalidation
  end
  if invalidation_date.nil?
    invalidation_date = Nucache::Config.get_invalidation_timeout
  end
  nucache = CachingTable.where("md5(sql)::uuid = md5(?)::uuid", sql).where("updated_at > ?", invalidation_date).pluck(:count)
  count = 0
  if nucache.blank?
    count = super(column_name)
    nucache_expired = CachingTable.where("md5(sql)::uuid = md5(?)::uuid", sql).first
    if nucache_expired.nil?
      CachingTable.create(sql: sql, count: count)
    else
      nucache_expired.update(count:count,updated_at:Time.now)
    end
  else
    count = nucache[0]
  end
  return count
end