public function testRecordActionTemplate()
 {
     $actionTemplate = new RecordActionTemplate();
     $runner = new ActionRunner();
     $actionTemplate->register($runner, 'RecordActionTemplate', array('namespace' => 'test2', 'model' => 'test2Model', 'types' => array(['prefix' => 'Create'], ['prefix' => 'Update'], ['prefix' => 'Delete'], ['prefix' => 'BulkDelete'])));
     $className = 'test2\\Action\\Updatetest2Model';
     $this->assertCount(4, $runner->getPretreatments());
     $this->assertNotNull($pretreatment = $runner->getActionPretreatment($className));
     $generatedAction = $actionTemplate->generate($className, $pretreatment);
     $this->assertRequireGeneratedAction($className, $generatedAction);
 }
 protected function getModelActionClass(BaseModel $record, $prefix)
 {
     $recordClass = get_class($record);
     $refclass = new ReflectionClass($record);
     $actionClassNamespace = str_replace('\\Model', '\\Action', $refclass->getNamespaceName());
     $actionClassShortName = ucfirst($prefix) . $refclass->getShortName();
     $actionClass = $actionClassNamespace . '\\' . $actionClassShortName;
     if (!class_exists($actionClass, true)) {
         kernel()->actionRunner->loadActionClass($actionClass);
     }
     // Generate the default action and try to require it.
     if (!class_exists($actionClass)) {
         $baseAction = $prefix . 'RecordAction';
         $template = new RecordActionTemplate();
         if ($generatedAction = $template->generate($actionClass, ['extends' => '\\ActionKit\\RecordAction\\' . $baseAction, 'properties' => ['recordClass' => $recordClass]])) {
             $generatedAction->load();
         }
     }
     if (!class_exists($actionClass)) {
         throw new Exception("Can not load action class '{$actionClass}' from model " . get_class($record));
     }
     return $actionClass;
 }
 /**
  * Create CRUD class
  *
  * @param string $recordClass
  * @param string $type
  *
  * @return string class code
  */
 public static function createCRUDClass($recordClass, $type)
 {
     list($modelNs, $modelName) = explode('\\Model\\', $recordClass);
     $modelNs = ltrim($modelNs, '\\');
     $actionFullClass = $modelNs . '\\Action\\' . $type . $modelName;
     $recordClass = $modelNs . '\\Model\\' . $modelName;
     $baseAction = $type . 'RecordAction';
     $template = new RecordActionTemplate();
     $generatedAction = $template->generate($actionFullClass, ['extends' => '\\ActionKit\\RecordAction\\' . $baseAction, 'properties' => ['recordClass' => $recordClass]]);
     if (!class_exists($actionFullClass, true)) {
         $generatedAction->load();
     }
     return $actionFullClass;
 }