module Kasket::WriteMixin::InstanceMethods
Public Instance Methods
clear_kasket_indices(options = {})
click to toggle source
# File lib/kasket/write_mixin.rb, line 81 def clear_kasket_indices(options = {}) kasket_keys(options).each do |key| Kasket.cache.delete(key) end end
committed!(*args, **kwargs)
click to toggle source
Calls superclass method
# File lib/kasket/write_mixin.rb, line 114 def committed!(*args, **kwargs) Kasket.clear_pending_records kasket_after_commit if persisted? || destroyed? super end
default_kasket_cacheable?()
click to toggle source
# File lib/kasket/write_mixin.rb, line 28 def default_kasket_cacheable? true end
kasket_after_commit()
click to toggle source
# File lib/kasket/write_mixin.rb, line 68 def kasket_after_commit keys = kasket_keys if persisted? && Kasket::CONFIGURATION[:write_through] key = store_in_kasket keys.delete(key) end keys.each do |key| Kasket.cache.delete(key) end end
kasket_after_commit_dummy()
click to toggle source
# File lib/kasket/write_mixin.rb, line 102 def kasket_after_commit_dummy # This is here to force committed! to be invoked. end
kasket_after_destroy()
click to toggle source
# File lib/kasket/write_mixin.rb, line 110 def kasket_after_destroy Kasket.add_pending_record(self, _destroyed = true) end
kasket_after_save()
click to toggle source
# File lib/kasket/write_mixin.rb, line 106 def kasket_after_save Kasket.add_pending_record(self) end
kasket_key()
click to toggle source
# File lib/kasket/write_mixin.rb, line 24 def kasket_key @kasket_key ||= new_record? ? nil : self.class.kasket_key_for_id(id) end
kasket_keys(options = {})
click to toggle source
# File lib/kasket/write_mixin.rb, line 40 def kasket_keys(options = {}) attribute_sets = [attributes] previous_changes = options[:previous_changes] previous_changes ||= saved_changes.transform_values(&:first) if previous_changes.present? old_attributes = previous_changes.each_with_object({}) do |(attribute, (old, _)), all| all[attribute.to_s] = old end attribute_sets << old_attributes.reverse_merge(attribute_sets[0]) attribute_sets << attribute_sets[0].merge(old_attributes) end keys = [] self.class.kasket_indices.each do |index| keys.concat( attribute_sets.map do |attribute_set| key = self.class.kasket_key_for(index.map { |attribute| [attribute, attribute_set[attribute.to_s]] }) index.include?(:id) ? key : [key, key + '/first'] end ) end keys.flatten! keys.uniq! keys end
reload(*)
click to toggle source
Calls superclass method
# File lib/kasket/write_mixin.rb, line 87 def reload(*) clear_kasket_indices super end
rolledback!(*args, **kwargs)
click to toggle source
Calls superclass method
# File lib/kasket/write_mixin.rb, line 120 def rolledback!(*args, **kwargs) Kasket.clear_pending_records super end
store_in_kasket(key = kasket_key)
click to toggle source
# File lib/kasket/write_mixin.rb, line 32 def store_in_kasket(key = kasket_key) if kasket_cacheable? && key options = { expires_in: self.class.kasket_ttl } if self.class.kasket_ttl Kasket.cache.write(key, attributes_before_type_cast.dup, options) key end end
update_columns(new_attributes)
click to toggle source
Calls superclass method
# File lib/kasket/write_mixin.rb, line 92 def update_columns(new_attributes) previous_attributes = attributes previous_changes = new_attributes.each_with_object({}) do |(k, v), all| all[k] = [previous_attributes[k.to_s], v] end result = super clear_kasket_indices(previous_changes: previous_changes) result end