/**
  * Load macro once
  */
 public function testLoadMacroOnce()
 {
     // first
     $config = array('Replica_Macro_Null' => array());
     sfReplicaThumbnail::loadMacro('load_once', $config);
     // second
     $config = array('Replica_Macro_ThumbnailFit' => array($width = 10, $height = 20));
     sfReplicaThumbnail::loadMacro('load_once', $config);
     $this->assertTrue(Replica::hasMacro('load_once'), 'Macro is initialized');
     $this->assertType('Replica_Macro_Chain', $macro = Replica::getMacro('load_once'));
     $this->assertEquals(array('Replica_Macro_Null' => array()), $macro->getParameters());
 }
 /**
  * Load and register macro if not defined
  *
  * @param  string $type  - thumbnail type
  * @param  array $config - macro definition
  * @return void
  */
 public static function loadMacro($type, array $config)
 {
     if (!Replica::hasMacro($type)) {
         $chain = new Replica_Macro_Chain();
         foreach ($config as $class => $args) {
             $reflection = new ReflectionClass($class);
             if ($args && is_array($args)) {
                 $macro = $reflection->newInstanceArgs($args);
             } else {
                 $macro = $reflection->newInstance();
             }
             $chain->add($macro);
         }
         Replica::setMacro($type, $chain);
     }
 }