one way to avoid autosave

This commit is contained in:
Didier Lafforgue 2012-04-05 18:01:16 +02:00
parent 64168cad37
commit 64ea41cbcd
3 changed files with 39 additions and 1 deletions

View File

@ -16,6 +16,7 @@ module Locomotive
before_validation :get_wildcards_from_parent before_validation :get_wildcards_from_parent
before_validation :add_slug_to_wildcards before_validation :add_slug_to_wildcards
before_save :build_fullpath before_save :build_fullpath
before_save :set_children_autosave
# before_rearrange :foo #propagate_fullpath_changes # before_rearrange :foo #propagate_fullpath_changes
# after_save :propagate_fullpath_changes # after_save :propagate_fullpath_changes
@ -61,6 +62,11 @@ module Locomotive
protected protected
def set_children_autosave
@autosave_for_children = !must_propagate_fullpath_changes?
true
end
def get_wildcards_from_parent def get_wildcards_from_parent
return true if self.parent.nil? return true if self.parent.nil?
@ -88,8 +94,12 @@ module Locomotive
end end
end end
def must_propagate_fullpath_changes?
self.wildcard_changed? || self.slug_changed?
end
def propagate_fullpath_changes def propagate_fullpath_changes
return true unless self.wildcard_changed? || self.slug_changed? return true unless must_propagate_fullpath_changes?
parent_identities = { self._id => self } parent_identities = { self._id => self }

View File

@ -74,6 +74,10 @@ module Locomotive
end end
def autosave_for_children?
@autosave_for_children != false
end
# Returns the children of this node but with the minimal set of required attributes # Returns the children of this node but with the minimal set of required attributes
# #
# @return [ Array ] The children pages ordered by their position # @return [ Array ] The children pages ordered by their position

View File

@ -12,6 +12,28 @@ module Mongoid#:nodoc:
end end
end end
module Relations #:nodoc:
module AutoSave
module ClassMethods #:nodoc:
def autosave(metadata)
if metadata.autosave?
set_callback :save, :after do |document|
relation = document.send(metadata.name)
return true if document.try(:"autosave_for_#{metadata.name}?") == false # FIXME (Didier L.) add more control on the document side
if relation
(relation.do_or_do_not(:in_memory) || Array.wrap(relation)).each do |doc|
doc.save
end
end
end
end
end
end
end
end
module Fields #:nodoc: module Fields #:nodoc:
module Internal #:nodoc: module Internal #:nodoc:
class RawArray < Mongoid::Fields::Internal::Array class RawArray < Mongoid::Fields::Internal::Array
@ -59,3 +81,5 @@ module Mongoid#:nodoc:
end end
end end