public function addOperation($operation, $property = null, $value = null)
{
// Make sure the operation is valid
if (!Shanty_Mongo::isValidOperation($operation)) {
require_once 'Shanty/Mongo/Exception.php';
throw new Shanty_Mongo_Exception("'{$operation}' is not valid operation");
}
// Prime the specific operation
if (!array_key_exists($operation, $this->_operations)) {
$this->_operations[$operation] = array();
}
// Save the operation
if (is_null($property)) {
$path = $this->getPathToDocument();
} else {
$path = $this->getPathToProperty($property);
}
// Mix operation with existing operations if needed
switch ($operation) {
case '$pushAll':
case '$pullAll':
if (!array_key_exists($path, $this->_operations[$operation])) {
break;
}
$value = array_merge($this->_operations[$operation][$path], $value);
break;
}
$this->_operations[$operation][$path] = $value;
}