Sha256: ba893e7012ef888e433e0af0afd95aaf628bb72a6366187ee5ab7fbf1ed940b5
Contents?: true
Size: 1.96 KB
Versions: 2
Compression:
Stored size: 1.96 KB
Contents
module CollectiveIdea #:nodoc: module Acts #:nodoc: module NestedSet #:nodoc: module Model module Prunable # Prunes a branch off of the tree, shifting all of the elements on the right # back to the left so the counts still work. def destroy_descendants return if right.nil? || left.nil? || skip_before_destroy in_tenacious_transaction do reload_nested_set # select the rows in the model that extend past the deletion point and apply a lock nested_set_scope.right_of(left).select(id).lock(true) destroy_or_delete_descendants # update lefts and rights for remaining nodes update_siblings_for_remaining_nodes # Don't allow multiple calls to destroy to corrupt the set self.skip_before_destroy = true end end def destroy_or_delete_descendants if acts_as_nested_set_options[:dependent] == :destroy descendants.each do |model| model.skip_before_destroy = true model.destroy end elsif acts_as_nested_set_options[:dependent] == :restrict_with_exception raise ActiveRecord::DeleteRestrictionError.new(:children) unless leaf? else descendants.delete_all end end def update_siblings_for_remaining_nodes update_siblings(:left) update_siblings(:right) end def update_siblings(direction) full_column_name = send("quoted_#{direction}_column_full_name") column_name = send("quoted_#{direction}_column_name") nested_set_scope.where(["#{full_column_name} > ?", right]). update_all(["#{column_name} = (#{column_name} - ?)", diff]) end def diff right - left + 1 end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
awesome_nested_set-3.0.0.rc.3 | lib/awesome_nested_set/model/prunable.rb |
awesome_nested_set-3.0.0.rc.2 | lib/awesome_nested_set/model/prunable.rb |