diff --git a/lib/ancestry/instance_methods.rb b/lib/ancestry/instance_methods.rb index 331446ea..51f785ce 100644 --- a/lib/ancestry/instance_methods.rb +++ b/lib/ancestry/instance_methods.rb @@ -75,10 +75,13 @@ def touch_ancestors_callback # Counter Cache def increase_parent_counter_cache + # TODO: return if ancestry_callbacks_disabled? + # TODO: return unless parent_id self.class.ancestry_base_class.increment_counter counter_cache_column, parent_id end def decrease_parent_counter_cache + # TODO: ? # @_trigger_destroy_callback comes from activerecord, which makes sure only once decrement when concurrent deletion. # but @_trigger_destroy_callback began after rails@5.1.0.alpha. # https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/persistence.rb#L340 @@ -86,17 +89,27 @@ def decrease_parent_counter_cache # https://github.com/rails/rails/pull/27248 return if defined?(@_trigger_destroy_callback) && !@_trigger_destroy_callback return if ancestry_callbacks_disabled? + # TODO: return unless parent_id self.class.ancestry_base_class.decrement_counter counter_cache_column, parent_id end def update_parent_counter_cache + # TODO: + # # @_trigger_update_callback comes from activerecord, which makes sure only once decrement when concurrent deletion. + # # but @_trigger_update_callback began after rails@5.1.0.alpha. + # # https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/persistence.rb#L340 + # # https://github.com/rails/rails/pull/27248 + # return if defined?(@_trigger_update_callback) && !@_trigger_update_callback return unless saved_change_to_attribute?(self.class.ancestry_column) + # TODO: return if ancestry_callbacks_disabled? if parent_id_was = parent_id_before_last_save self.class.ancestry_base_class.decrement_counter counter_cache_column, parent_id_was end + # NOTE: will probably be callingincrease_parent_counter_cache instead + # make sure this will not break this PR parent_id && increase_parent_counter_cache end diff --git a/test/concerns/counter_cache_test.rb b/test/concerns/counter_cache_test.rb index 2093332c..025615e4 100644 --- a/test/concerns/counter_cache_test.rb +++ b/test/concerns/counter_cache_test.rb @@ -19,6 +19,9 @@ def test_counter_cache_when_destroying end end + # is this a real use case? + # test with disable callbacks? + # would like to get those rails internal variables out of this code base def test_counter_cache_when_reduplicate_destroying AncestryTestDatabase.with_model :depth => 2, :width => 2, :counter_cache => true do |_model, roots| parent = roots.first.first diff --git a/test/concerns/sti_support_test.rb b/test/concerns/sti_support_test.rb index 2911e81c..f4b96e67 100644 --- a/test/concerns/sti_support_test.rb +++ b/test/concerns/sti_support_test.rb @@ -63,6 +63,8 @@ def test_sti_support_with_from_subclass end end + # TODO: add some and remove some. make sure the updates work correctly + # thinking will find an issue here def test_sti_support_for_counter_cache AncestryTestDatabase.with_model :counter_cache => true, :extra_columns => {:type => :string} do |model| # NOTE had to use subclasses other than Subclass1/Subclass2 from above