Class/Module Index [+]

Quicksearch

Mongoid::Relations::Synchronization

This module handles the behaviour for synchronizing foreign keys between both sides of a many to many relations.

Public Instance Methods

remove_inverse_keys(meta) click to toggle source

Update the inverse keys on destroy.

@example Update the inverse keys.

document.remove_inverse_keys(metadata)

@param [ Metadata ] meta The document metadata.

@return [ Object ] The updated values.

@since 2.2.1

# File lib/mongoid/relations/synchronization.rb, line 62
def remove_inverse_keys(meta)
  meta.criteria(send(meta.foreign_key)).pull(meta.inverse_foreign_key, id)
end
syncable?(metadata) click to toggle source

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.

@example Are the foreign keys syncable?

document.syncable?(metadata)

@param [ Metadata ] metadata The relation metadata.

@return [ true, false ] If we can sync.

@since 2.1.0

# File lib/mongoid/relations/synchronization.rb, line 20
def syncable?(metadata)
  !synced?(metadata.foreign_key) && send(metadata.foreign_key_check)
end
synced() click to toggle source

Get the synced foreign keys.

@example Get the synced foreign keys.

document.synced

@return [ Hash ] The synced foreign keys.

@since 2.1.0

# File lib/mongoid/relations/synchronization.rb, line 32
def synced
  @synced ||= {}
end
synced?(foreign_key) click to toggle source

Has the document been synced for the foreign key?

@todo Change the sync to be key based.

@example Has the document been synced?

document.synced?

@param [ String ] foreign_key The foreign key.

@return [ true, false ] If we can sync.

@since 2.1.0

# File lib/mongoid/relations/synchronization.rb, line 48
def synced?(foreign_key)
  !!synced[foreign_key]
end
update_inverse_keys(meta) click to toggle source

Update the inverse keys for the relation.

@example Update the inverse keys

document.update_inverse_keys(metadata)

@param [ Metadata ] meta The document metadata.

@return [ Object ] The updated values.

@since 2.1.0

# File lib/mongoid/relations/synchronization.rb, line 76
def update_inverse_keys(meta)
  return unless changes.has_key?(meta.foreign_key)
  old, new = changes[meta.foreign_key]
  adds, subs = new - (old || []), (old || []) - new
  meta.criteria(adds).add_to_set(meta.inverse_foreign_key, id) unless adds.empty?
  meta.criteria(subs).pull(meta.inverse_foreign_key, id) unless subs.empty?
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.