Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Sep 21st, 2012  |  syntax: None  |  size: 2.14 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2. App::uses('CakeFixtureManager', 'TestSuite/Fixture');
  3. App::uses('CakeTestFixture', 'TestSuite/Fixture');
  4. App::uses('ConnectionManager', 'Model');
  5.  
  6. class NodesFixtureManager extends CakeFixtureManager {
  7.  
  8.         public function loadAllFixtures($source, $fixtures) {
  9.                 $this->_initDb($source);
  10.                 $this->_loadFixtures($fixtures);
  11.  
  12.                 $nested = $this->_db->useNestedTransactions;
  13.                 $this->_db->useNestedTransactions = false;
  14.                 $this->_db->begin();
  15.                 CakeLog::debug('Begin fixture import');
  16.                 CakeLog::debug('');
  17.                 foreach ($fixtures as $f) {
  18.                         CakeLog::debug(sprintf('Working on %s', $f));
  19.                         if (empty($this->_loaded[$f])) {
  20.                                 CakeLog::notice('-> Can not find it in the loaded array.. weird');
  21.                                 continue;
  22.                         }
  23.  
  24.                         $fixture = $this->_loaded[$f];
  25.                         CakeLog::debug(sprintf('-> Found fixture: %s', get_class($fixture)));
  26.  
  27.                         $this->_setupTable($fixture, $this->_db, true);
  28.                         CakeLog::debug('-> Created table "OK"');
  29.  
  30.                         if ($fixture->insert($this->_db)) {
  31.                                 CakeLog::debug('-> Inserted fixture data "OK"');
  32.                         } else {
  33.                                 CakeLog::error('-> Inserted fixture data "ERROR"');
  34.                         }
  35.                         CakeLog::debug('');
  36.                 }
  37.                 $this->_db->commit();
  38.                 $this->_useNestedTransactions = $nested;
  39.                 CakeLog::debug('Done!');
  40.         }
  41.  
  42.         protected function _initDb($source = 'default') {
  43.                 if ($this->_initialized) {
  44.                         return;
  45.                 }
  46.                 $db = ConnectionManager::getDataSource($source);
  47.                 $db->cacheSources = false;
  48.                 $this->_db = $db;
  49.                 $this->_initialized = true;
  50.         }
  51. }
  52.  
  53. class FixtureShell extends AppShell {
  54.  
  55.         public function main() {
  56.                 $CakeFixtureManager = new NodesFixtureManager();
  57.                 $CakeFixtureManager->loadAllFixtures($this->params['datasource'], explode(',', $this->args[0]));
  58.         }
  59.  
  60. /**
  61.  * get the option parser.
  62.  *
  63.  * @return void
  64.  */
  65.         public function getOptionParser() {
  66.                 $parser = parent::getOptionParser();
  67.                 return $parser
  68.                         ->description('Contains a set of utilities to store records from database into elastic search')
  69.                         ->addArgument('fixtures', array(
  70.                                 'help' => 'A comma separated list of fixtures to use (Format is same as $fixtures property in CakeTest classes',
  71.                                 'required' => true
  72.                         ))
  73.                         ->addOption('datasource', array(
  74.                                 'help' => 'Datasource to use',
  75.                                 'default' => 'default'
  76.                         ));
  77.         }
  78.  
  79. }