From c9a01d1a083c8a97fd2a00272a93c5347f00090c Mon Sep 17 00:00:00 2001 From: Pat Allan Date: Sun, 23 Sep 2012 13:13:12 +0100 Subject: [PATCH] If fire_delta? exists in the model, let it decide. Overriding should_toggle_delta? or indexed_data_changed? isn't an option, because those methods are loaded only when the index definitions are (and thus would actually override custom versions). This allows us some way to delegate the decision. --- lib/thinking_sphinx/active_record/delta.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/thinking_sphinx/active_record/delta.rb b/lib/thinking_sphinx/active_record/delta.rb index a9eca1436..c490da3b9 100644 --- a/lib/thinking_sphinx/active_record/delta.rb +++ b/lib/thinking_sphinx/active_record/delta.rb @@ -3,7 +3,7 @@ module ActiveRecord # This module contains all the delta-related code for models. There isn't # really anything you need to call manually in here - except perhaps # index_delta, but not sure what reason why. - # + # module Delta # Code for after_commit callback is written by Eli Miller: # http://elimiller.blogspot.com/2007/06/proper-cache-expiry-with-aftercommit.html @@ -18,38 +18,40 @@ class << self def index_delta(instance = nil) delta_objects.each { |obj| obj.index(self, instance) } end - + def delta_objects self.sphinx_indexes.collect(&:delta_object).compact end end - + def toggled_delta? self.class.delta_objects.any? { |obj| obj.toggled(self) } end - + private - + # Set the delta value for the model to be true. def toggle_delta self.class.delta_objects.each { |obj| obj.toggle(self) } if should_toggle_delta? end - + # Build the delta index for the related model. This won't be called # if running in the test environment. - # + # def index_delta self.class.index_delta(self) if self.class.delta_objects.any? { |obj| obj.toggled(self) } end - + def should_toggle_delta? + return fire_delta? if respond_to?(:fire_delta?) + self.new_record? || indexed_data_changed? end - + def indexed_data_changed? sphinx_indexes.any? { |index| index.fields.any? { |field| field.changed?(self) } ||