71 lines
1.5 KiB
Ruby
71 lines
1.5 KiB
Ruby
|
# Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
|
||
|
module ApplicationModel::Cacheable
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
before_create :cache_delete
|
||
|
|
||
|
after_create :cache_delete
|
||
|
after_update :cache_delete
|
||
|
after_touch :cache_delete
|
||
|
after_destroy :cache_delete
|
||
|
end
|
||
|
|
||
|
def cache_update(o)
|
||
|
cache_delete if respond_to?('cache_delete')
|
||
|
o.cache_delete if o.respond_to?('cache_delete')
|
||
|
end
|
||
|
|
||
|
def cache_delete
|
||
|
keys = []
|
||
|
|
||
|
# delete by id caches
|
||
|
keys.push "#{self.class}::#{id}"
|
||
|
|
||
|
# delete by id with attributes_with_association_ids caches
|
||
|
keys.push "#{self.class}::aws::#{id}"
|
||
|
|
||
|
# delete by name caches
|
||
|
if self[:name]
|
||
|
keys.push "#{self.class}::#{name}"
|
||
|
end
|
||
|
|
||
|
# delete by login caches
|
||
|
if self[:login]
|
||
|
keys.push "#{self.class}::#{login}"
|
||
|
end
|
||
|
|
||
|
keys.each { |key|
|
||
|
Cache.delete(key)
|
||
|
}
|
||
|
|
||
|
# delete old name / login caches
|
||
|
if changed?
|
||
|
if changes.key?('name')
|
||
|
name = changes['name'][0]
|
||
|
key = "#{self.class}::#{name}"
|
||
|
Cache.delete(key)
|
||
|
end
|
||
|
if changes.key?('login')
|
||
|
name = changes['login'][0]
|
||
|
key = "#{self.class}::#{name}"
|
||
|
Cache.delete(key)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# methods defined here are going to extend the class, not the instance of it
|
||
|
class_methods do
|
||
|
|
||
|
def cache_set(data_id, data)
|
||
|
key = "#{self}::#{data_id}"
|
||
|
Cache.write(key, data)
|
||
|
end
|
||
|
|
||
|
def cache_get(data_id)
|
||
|
key = "#{self}::#{data_id}"
|
||
|
Cache.get(key)
|
||
|
end
|
||
|
end
|
||
|
end
|