module Mongoid::TouchParentsRecursively::Utils

put encapsulation method here

Public Class Methods

fetch_and_store_parent(__parents, __parent, is_first_level) click to toggle source
# File lib/mongoid_touch_parents_recursively.rb, line 35
def self.fetch_and_store_parent __parents, __parent, is_first_level
  # parents 可能的是 has_and_belongs_to_many or belongs_to
  Array(__parent).each do |__parent1| # compact with Mongoid::Relations::Targets::Enumerable as Enumerable
    __parent1.class.relations.select do |k, v|
      __result = false
      __result ||= (v.macro == :belongs_to)
      __result ||= (k.match(__parent1.class.name.singularize.downcase) && (v.macro != :embeds_many)) if is_first_level
      __result = false if not ::Mongoid::TouchParentsRecursively.allowed_models_proc.call(v.class_name)
      __result
    end.map do |k, v|
      Array(__parent1.send(k))
    end.flatten.each do |__parent2|
      if not __parents.include? __parent2
        __parents.add __parent2
        Utils.fetch_and_store_parent __parents, __parent2, false
      end
    end
  end

  return __parents
end