module Mongoid::Callbacks

Public Instance Methods

cascadable_child?(kind, child, metadata) click to toggle source
# File lib/patches/embedded_touch.rb, line 73
def cascadable_child?(kind, child, metadata)
  return false if kind == :initialize || kind == :find || kind == :touch
  return false if kind == :validate && metadata.validate?
  child.callback_executable?(kind) ? child.in_callback_state?(kind) : false
end
cascadable_children(kind, children = Set.new) click to toggle source
# File lib/patches/embedded_touch.rb, line 54
def cascadable_children(kind, children = Set.new)
  embedded_relations.each_pair do |name, metadata|
    next unless metadata.cascading_callbacks?
    without_autobuild do
      delayed_pulls = delayed_atomic_pulls[name]
      delayed_unsets = delayed_atomic_unsets[name]
      children.merge(delayed_pulls) if delayed_pulls
      children.merge(delayed_unsets) if delayed_unsets
      relation = send(name)
      Array.wrap(relation).each do |child|
        next if children.include?(child)
        children.add(child) if cascadable_child?(kind, child, metadata)
        child.send(:cascadable_children, kind, children)
      end
    end
  end
  children.to_a
end