/** * Add multiple connections at once using arrays of options * * @param array $connectionOptions */ public function addConnections($connectionOptions) { if ($connectionOptions instanceof Zend_Config) { $connectionOptions = $connectionOptions->toArray(); } $masters = array(); $masterStackOptions = array(); $slaves = array(); $slaveStackOptions = array(); $group = $this; $addConnections = function (Shanty_Mongo_Connection_Stack $stack, array $connections) use($group) { foreach ($connections as $connectionData) { $options = array_intersect_key($connectionData, array_flip(Shanty_Mongo_Connection::getAvailableOptions())); $connection = new Shanty_Mongo_Connection($group->formatConnectionString($connectionData), $options); if (array_key_exists('weight', $connectionData)) { $weight = (int) $connectionData['weight']; } else { $weight = 1; } $stack->addNode($connection, $weight); } }; // Lets add our masters if (array_key_exists('master', $connectionOptions)) { $masters[] = $connectionOptions['master']; } elseif (array_key_exists('masters', $connectionOptions)) { $connectionKeys = array_filter(array_keys($connectionOptions['masters']), 'is_numeric'); $masters = array_intersect_key($connectionOptions['masters'], array_flip($connectionKeys)); // only connections $masterStackOptions = array_diff_key($connectionOptions['masters'], array_flip($connectionKeys)); // only options } else { $masters[] = $connectionOptions; } // one server $addConnections($this->getMasters(), $masters); // Add master connections $this->getMasters()->setOptions($masterStackOptions); // Set master stack options // Lets add our slaves if (array_key_exists('slave', $connectionOptions)) { $slaves[] = $connectionOptions['slave']; } elseif (array_key_exists('slaves', $connectionOptions)) { $connectionKeys = array_filter(array_keys($connectionOptions['slaves']), 'is_numeric'); $slaves = array_intersect_key($connectionOptions['slaves'], array_flip($connectionKeys)); // only connections $slaveStackOptions = array_diff_key($connectionOptions['slaves'], array_flip($connectionKeys)); // only options } $addConnections($this->getSlaves(), $slaves); // Add slave connections $this->getSlaves()->setOptions($slaveStackOptions); // Set slave stack options }
/** * @depends testParseConnectionString */ public function testGetHosts() { $connection = new Shanty_Mongo_Connection('mongodb://127.0.0.1:27017/shanty-mongo'); $hosts = array(array('host' => '127.0.0.1', 'port' => 27017)); $this->assertEquals($hosts, $connection->getHosts()); }