Compare commits

..
9 Commits
Author SHA1 Message Date
Barry vd. Heuvel 5e5cfce28c Refactor a bit 2013-08-25 17:56:29 +02:00
Barry vd. Heuvel 098090ed36 Merge pull request #32 from claar/patch-1
Use camel case for model scope generation
2013-08-25 06:31:59 -07:00
Barry vd. Heuvel 7f055cec7e Merge pull request #33 from claar/patch-2
Include return value when generating scope methods
2013-08-25 06:30:45 -07:00
Ben Claar 5a0f8f1b64 Include return value when generating scope methods
It's handy to specify return values in phpDoc comments. This patch sets the return value to the containing class.
2013-08-23 16:25:03 -05:00
Ben Claar 92ec89bf87 Use camel case for model scope generation
In L4, scope functions only work with camel case (http://four.laravel.com/docs/eloquent#query-scopes)
2013-08-23 14:47:14 -05:00
Barry vd. Heuvel afeaf2f28b Add arguments for query scopes
Should fix #31
2013-08-23 13:47:25 +02:00
Barry vd. Heuvel 865bd8d32b Update readme 2013-08-23 13:31:10 +02:00
Barry vd. Heuvel e368338ba7 Make writing to files more default behaviour
But ask before overwriting. You can still force with -W
2013-08-23 13:29:44 +02:00
Barry vd. Heuvel 7bd3e1cc0a Update docblock 2013-08-23 13:19:57 +02:00
3 changed files with 56 additions and 13 deletions
+2 -3
View File
@@ -52,9 +52,8 @@ The Illuminate/Support/helpers.php is already set-up, but you can add/remove you
If you don't want to write your properties yourself, you can use the command `ide-helper:models` to generate If you don't want to write your properties yourself, you can use the command `ide-helper:models` to generate
phpDocs, based on table columns, relations and getters/setters. Still in beta, so please provide feedback if you want. phpDocs, based on table columns, relations and getters/setters. Still in beta, so please provide feedback if you want.
Docs are written to a phpfile (_ide_helper_models.php) in the root of the project, so you can move the docs to the real model. You can now also write the comments directly to your Model file, using the `--write (-W)` option. By default, you are asked to overwrite or
write to a seperate file (_ide_helper_models.php) Please make sure to backup your models, before writing the info.
You can now also write the comments directly to your Model file, using the `--write (-W)` option. Please make sure to backup your models, before writing the info.
It should keep the existing comments and only append new properties/methods. The existing phpdoc is replaced, or added if not found. It should keep the existing comments and only append new properties/methods. The existing phpdoc is replaced, or added if not found.
With the `--reset (-R)` option, the existing phpdocs are ignored, only the newly found columns/relations are saved as phpdocs. With the `--reset (-R)` option, the existing phpdocs are ignored, only the newly found columns/relations are saved as phpdocs.
@@ -324,6 +324,8 @@ exit('Only to be used as an helper for your IDE');\n\n";
/** /**
* @param \ReflectionMethod $method * @param \ReflectionMethod $method
* @param string $alias * @param string $alias
* @param $class
* @param null $methodName
* @return string * @return string
*/ */
protected function parseMethod($method, $alias, $class, $methodName = null){ protected function parseMethod($method, $alias, $class, $methodName = null){
+52 -10
View File
@@ -30,6 +30,7 @@ class ModelsCommand extends Command {
* @var string * @var string
*/ */
protected $name = 'ide-helper:models'; protected $name = 'ide-helper:models';
protected $filename = '_ide_helper_models.php';
/** /**
* The console command description. * The console command description.
@@ -59,6 +60,13 @@ class ModelsCommand extends Command {
$model = $this->argument('model'); $model = $this->argument('model');
$this->reset = $this->option('reset'); $this->reset = $this->option('reset');
//If filename is default and Write is not specified, ask what to do
if(!$this->write && $filename === $this->filename){
if($this->confirm("Do you want to overwrite the existing model files for '$model'? Choose no to write to $filename instead? (Yes/No): ")){
$this->write = true;
}
}
$content = $this->generateDocs($model); $content = $this->generateDocs($model);
if(!$this->write){ if(!$this->write){
@@ -69,7 +77,6 @@ class ModelsCommand extends Command {
$this->error("Failed to write model information to $filename"); $this->error("Failed to write model information to $filename");
} }
} }
} }
@@ -94,7 +101,7 @@ class ModelsCommand extends Command {
protected function getOptions() protected function getOptions()
{ {
return array( return array(
array('filename', 'F', InputOption::VALUE_OPTIONAL, 'The path to the helper file', '_ide_helper_models.php'), array('filename', 'F', InputOption::VALUE_OPTIONAL, 'The path to the helper file', $this->filename),
array('dir', 'D', InputOption::VALUE_OPTIONAL, 'The model dir','app/models'), array('dir', 'D', InputOption::VALUE_OPTIONAL, 'The model dir','app/models'),
array('write', 'W', InputOption::VALUE_NONE, 'Write to Model file'), array('write', 'W', InputOption::VALUE_NONE, 'Write to Model file'),
array('reset', 'R', InputOption::VALUE_NONE, 'Remove the original phpdocs instead of appending'), array('reset', 'R', InputOption::VALUE_NONE, 'Remove the original phpdocs instead of appending'),
@@ -225,9 +232,13 @@ class ModelsCommand extends Command {
} }
}elseif(\Str::startsWith($method, 'scope') && $method !== 'scopeQuery'){ }elseif(\Str::startsWith($method, 'scope') && $method !== 'scopeQuery'){
//Magic set<name>Attribute //Magic set<name>Attribute
$name = \Str::snake(substr($method, 5)); $name = \Str::camel(substr($method, 5));
if(!empty($name)){ if(!empty($name)){
$this->setMethod($name, 'static'); $reflection = new \ReflectionMethod($model, $method);
$args = $this->getParameters($reflection);
//Remove the first ($query) argument
array_shift($args);
$this->setMethod($name, $reflection->class, $args);
} }
}elseif(!method_exists('Eloquent', $method) && !\Str::startsWith($method, 'get')){ }elseif(!method_exists('Eloquent', $method) && !\Str::startsWith($method, 'get')){
@@ -293,13 +304,11 @@ class ModelsCommand extends Command {
} }
} }
protected function setMethod($name, $type = null){ protected function setMethod($name, $type = '', $arguments=array()){
if(!isset($this->methods[$name])){ if(!isset($this->methods[$name])){
$this->methods[$name] = array(); $this->methods[$name] = array();
$this->methods[$name]['type'] = 'static';
}
if($type !== null){
$this->methods[$name]['type'] = $type; $this->methods[$name]['type'] = $type;
$this->methods[$name]['arguments'] = $arguments;
} }
} }
@@ -355,8 +364,8 @@ class ModelsCommand extends Command {
if(in_array($name, $methods)){ if(in_array($name, $methods)){
continue; continue;
} }
$name = "$name()"; $arguments = implode(', ',$method['arguments']);
$tag = Tag::createInstance("@method {$method['type']} {$name}", $phpdoc); $tag = Tag::createInstance("@method static {$method['type']} {$name}({$arguments}) ", $phpdoc);
$phpdoc->appendTag($tag); $phpdoc->appendTag($tag);
} }
@@ -387,4 +396,37 @@ class ModelsCommand extends Command {
return $output; return $output;
} }
/**
* Get the parameters and format them correctly
*
* @param $method
* @return array
*/
public function getParameters($method){
//Loop through the default values for paremeters, and make the correct output string
$params = array();
$paramsWithDefault = array();
foreach ($method->getParameters() as $param) {
$paramStr = '$'.$param->getName();
$params[] = $paramStr;
if ($param->isOptional()) {
$default = $param->getDefaultValue();
if(is_bool($default)){
$default = $default? 'true':'false';
}elseif(is_array($default)){
$default = 'array()';
}elseif(is_null($default)){
$default = 'null';
}elseif(is_int($default)){
//$default = $default;
}else{
$default = "'".trim($default)."'";
}
$paramStr .= " = $default";
}
$paramsWithDefault[] = $paramStr;
}
return $paramsWithDefault;
}
} }