12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
- module ApplicationModel::HasCache
- extend ActiveSupport::Concern
- included do
- before_create :cache_delete
- after_commit :cache_delete
- end
- def cache_update(other)
- cache_delete if respond_to?(:cache_delete)
- other.cache_delete if other.respond_to?(:cache_delete)
- ActiveSupport::CurrentAttributes.clear_all
- true
- end
- def cache_delete
- cache_keys = []
- # delete by id with attributes_with_association_ids caches
- cache_keys.push "#{self.class}::aws::#{id}"
- # delete caches of lookup_keys (e.g. id, name, email, login, number)
- self.class.lookup_keys.each do |lookup_key|
- cache_keys.push "#{self.class}::#{self[lookup_key]}"
- next if !saved_changes? || !saved_changes.key?(lookup_key)
- obsolete_lookup_key = saved_changes[lookup_key][0]
- cache_keys.push "#{self.class}::#{obsolete_lookup_key}"
- end
- cache_keys.each do |key|
- Cache.delete(key)
- end
- true
- 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 for 4 hours max to lower impact of race conditions
- Cache.write(key, data, expires_in: 4.hours)
- end
- def cache_get(data_id)
- key = "#{self}::#{data_id}"
- Cache.read(key)
- end
- end
- end
|