Module: Mongoid::RelationsDirtyTracking::ClassMethods

Defined in:
lib/mongoid/relations_dirty_tracking.rb

Instance Method Summary collapse

Instance Method Details

#relations_dirty_tracking(options = {}) ⇒ Object



85
86
87
88
# File 'lib/mongoid/relations_dirty_tracking.rb', line 85

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) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
94
95
96
97
98
99
100
# File 'lib/mongoid/relations_dirty_tracking.rb', line 91

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))

  to_track && [Mongoid::Relations::Embedded::One, Mongoid::Relations::Embedded::Many,
    Mongoid::Relations::Referenced::One, Mongoid::Relations::Referenced::Many,
    Mongoid::Relations::Referenced::ManyToMany, Mongoid::Relations::Referenced::In].include?(relations[rel_name].try(:relation))
end

#tracked_relationsObject



103
104
105
# File 'lib/mongoid/relations_dirty_tracking.rb', line 103

def tracked_relations
  @tracked_relations ||= relations.keys.select {|rel_name| track_relation?(rel_name) }
end