public function removeModel($className)
 {
     if (!$this->hasModel($className)) {
         throw new Exceptions\ModelNotInConfigException();
     }
     unset($this->configData['models'][ElegantModel::generateId($className)]);
 }
 protected function getForForm()
 {
     if ($this->field->getRelation()->getType() !== 'belongsTo') {
         return '';
     }
     $relatedModels = app(EloquentModelsRepositoryInterface::class, [ElegantModel::normalizeClassName($this->field->getRelation()->getRelatedModel())]);
     return Form::elegantSelect($this->field->getRelation()->getForeignKey(), $this->field->getDisplayName(), View::getShared()['errors'], $relatedModels->elegantLists());
 }
 public function __construct($modelName)
 {
     $modelId = ElegantModel::generateId($modelName);
     if (!($model = Config::getModelById($modelId))) {
         throw new \Exception('Model not found with name ' . $modelName);
     }
     $this->elegantModel = $model;
     parent::__construct($this->elegantModel->getModelInstance());
 }
 protected function registerEloquentEvents()
 {
     // Flush Elegant cache when anything changes for models registered by Elegant
     Event::listen('eloquent.*', function ($caller) {
         $callerClass = get_class($caller);
         if (!in_array($callerClass, ElegantConfig::getModelsAsClassNames())) {
             return;
         }
         if (in_array(Event::firing(), ['eloquent.saved', 'eloquent.deleted', 'eloquent.updated', 'eloquent.created']) && $this->cacheIsTaggable()) {
             Cache::tags('elegant-' . Support\ElegantModel::normalizeClassName($callerClass))->flush();
         }
     });
 }
 /**
  * Checks if a certain class should be considered
  * a application-level Eloquent model and if so,
  * stores the class name as a found model.
  */
 protected function checkClass($className)
 {
     if (is_a($className, self::CLASS_MATCHING_NAME, true) && $className !== self::CLASS_MATCHING_NAME && strpos((new ReflectionClass($className))->getFileName(), $this->path) === 0) {
         $this->foundModels[ElegantModel::generateId($className)] = $className;
     }
 }
 public function __construct(EloquentModelsRepositoryInterface $eloquentModels)
 {
     parent::__construct();
     $this->entityName = 'elegant-' . ElegantModel::normalizeClassName($eloquentModels->model());
     $this->repository = $eloquentModels;
 }
 public function it_should_return_model_by_id()
 {
     $this->addModel(new TestModels\Article(), []);
     $this->getModelById(ElegantModel::generateId(TestModels\Article::class))->shouldReturnAnInstanceOf(ElegantModel::class);
 }
 public function it_should_find_existing_models()
 {
     $this->findModels()->shouldReturn([ElegantModel::generateId(TestModels\Article::class) => TestModels\Article::class, ElegantModel::generateId(TestModels\Comment::class) => TestModels\Comment::class, ElegantModel::generateId(TestModels\User::class) => TestModels\User::class]);
 }
 protected function addNewModels(array $newModels)
 {
     foreach (array_unique($newModels) as $model) {
         $this->info("Adding new model {$model}...");
         $this->config->addModel(new $model());
         $this->navigation->addItem(['class_name' => $model, 'slug' => ElegantModel::normalizeClassName($model)]);
     }
 }