Module: Mongoid::Relations::Synchronization
- Extended by:
- ActiveSupport::Concern
- Included in:
- Mongoid::Relations
- Defined in:
- lib/mongoid/relations/synchronization.rb
Overview
This module handles the behaviour for synchronizing foreign keys between both sides of a many to many relations.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#remove_inverse_keys(meta) ⇒ Object
Update the inverse keys on destroy.
-
#syncable?(metadata) ⇒ true, false
Is the document able to be synced on the inverse side? This is only if the key has changed and the relation bindings have not been run.
-
#synced ⇒ Hash
Get the synced foreign keys.
-
#synced?(foreign_key) ⇒ true, false
Has the document been synced for the foreign key?.
-
#update_inverse_keys(meta) ⇒ Object
Update the inverse keys for the relation.
Instance Method Details
#remove_inverse_keys(meta) ⇒ Object
Update the inverse keys on destroy.
63 64 65 |
# File 'lib/mongoid/relations/synchronization.rb', line 63 def remove_inverse_keys() .criteria(send(.foreign_key)).pull(.inverse_foreign_key, id) end |
#syncable?(metadata) ⇒ true, false
Is the document able to be synced on the inverse side? This is only if the key has changed and the relation bindings have not been run.
21 22 23 |
# File 'lib/mongoid/relations/synchronization.rb', line 21 def syncable?() !synced?(.foreign_key) && send(.foreign_key_check) end |
#synced ⇒ Hash
Get the synced foreign keys.
33 34 35 |
# File 'lib/mongoid/relations/synchronization.rb', line 33 def synced @synced ||= {} end |
#synced?(foreign_key) ⇒ true, false
Change the sync to be key based.
Has the document been synced for the foreign key?
49 50 51 |
# File 'lib/mongoid/relations/synchronization.rb', line 49 def synced?(foreign_key) !!synced[foreign_key] end |
#update_inverse_keys(meta) ⇒ Object
Update the inverse keys for the relation.
77 78 79 80 81 82 83 |
# File 'lib/mongoid/relations/synchronization.rb', line 77 def update_inverse_keys() return unless changes.has_key?(.foreign_key) old, new = changes[.foreign_key] adds, subs = new - (old || []), (old || []) - new .criteria(adds).add_to_set(.inverse_foreign_key, id) unless adds.empty? .criteria(subs).pull(.inverse_foreign_key, id) unless subs.empty? end |