Module: Mongoid::RelationsDirtyTracking::ClassMethods

Defined in:
lib/mongoid/relations_dirty_tracking.rb

Instance Method Summary collapse

Instance Method Details

#relations_dirty_tracking(options = {}) ⇒ Object



35
36
37
38
# 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) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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_relationsObject



56
57
58
# File 'lib/mongoid/relations_dirty_tracking.rb', line 56

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