module Mongoid::RelationsDirtyTracking::ClassMethods

Public Instance Methods

relations_dirty_tracking(options = {}) click to toggle source
# File lib/mongoid/relations_dirty_tracking.rb, line 35
def relations_dirty_tracking(options = {})
  relations_dirty_tracking_options[:only]   += [options[:only]   || []].flatten.map(&:to_s)
  relations_dirty_tracking_options[:except] += [options[:except] || []].flatten.map(&:to_s)
end
track_relation?(rel_name) click to toggle source
# File lib/mongoid/relations_dirty_tracking.rb, line 40
def track_relation?(rel_name)
  rel_name = rel_name.to_s
  options = relations_dirty_tracking_options
  to_track = (!options[:only].blank? && options[:only].include?(rel_name)) ||
             (options[:only].blank? && !options[:except].include?(rel_name))

  trackables = [Mongoid::Association::Embedded::EmbedsOne::Proxy,
                Mongoid::Association::Embedded::EmbedsMany::Proxy,
                Mongoid::Association::Referenced::HasOne::Proxy,
                Mongoid::Association::Referenced::HasMany::Proxy,
                Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy,
                Mongoid::Association::Referenced::BelongsTo::Proxy]

  to_track && trackables.include?(relations[rel_name].try(:relation))
end
tracked_relations() click to toggle source
# File lib/mongoid/relations_dirty_tracking.rb, line 56
def tracked_relations
  @tracked_relations ||= relations.keys.select { |rel_name| track_relation?(rel_name) }
end