# HG changeset patch # User luka # Date 1687718715 14400 # Node ID cf9993c5c7df9260b0d724ec8ca259baf02d9d72 # Parent ca36acd2bef2642fdbbad5c09d1d008b580057b6 Updated .vimrc for some helper commands. updated the Base Generator Brought the controller generator into the package created an example generator, but it needs some work. diff -r ca36acd2bef2 -r cf9993c5c7df .php-cs-fixer.cache --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.php-cs-fixer.cache Sun Jun 25 14:45:15 2023 -0400 @@ -0,0 +1,1 @@ +{"php":"8.2.7","version":"3.19.1","indent":" ","lineEnding":"\n","rules":{"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_typehint":true,"curly_braces_position":{"allow_single_line_empty_anonymous_classes":true},"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/Generator\/BaseGenerator.php":"35ac461e0fefdb76984233e6e05b1d96","src\/Replacer.php":"7a70096cc0aa604f1220867101595d18","src\/MagicForgerServiceProvider.php":"32cf8654ee2d13f02338fac22de66245"}} \ No newline at end of file diff -r ca36acd2bef2 -r cf9993c5c7df .vimrc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.vimrc Sun Jun 25 14:45:15 2023 -0400 @@ -0,0 +1,49 @@ +syntax on +set tabstop=2 +set shiftwidth=2 +set softtabstop=2 +set autoindent +set smartindent +"set termguicolors +"set number +nnoremap cc :set colorcolumn=80 +nnoremap ncc :set colorcolumn-=80 +set mouse=a + +function! FixPhpFiles() + " Save the current cursor position + let save_cursor = getpos(".") + + "Format the files + let command = 'php-cs-fixer fix .' + let output = system(command) + " Reload the file and restore the cursor position + execute 'edit!' + call setpos(".", save_cursor) +endfunction + +nnoremap f :call FixPhpFiles() + +" Committing commands +map :wa:!hg addremove && hg commit + +" Git commands, for now don't port to hg +" function! GitDiffCached() +" let files = system('git diff --cached --name-only') +" +" if v:shell_error +" echo "Error running git diff" +" return +" endif +" +" let filelist = split(files, "\n") +" let chosen_file = inputlist(filelist) +" +" if chosen_file != -1 +" let cmd = 'tabnew ' . filelist[chosen_file] +" execute cmd +" endif +" endfunction +" +" execute "set =\033d" +" map :call GitDiffCached() diff -r ca36acd2bef2 -r cf9993c5c7df examples/ExampleGenerator.php.stub --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/ExampleGenerator.php.stub Sun Jun 25 14:45:15 2023 -0400 @@ -0,0 +1,120 @@ +tableExists($this->getTableInput())) { + $this->components->error('The table: "'.$this->getTableInput().'" does not exist in the database.'); + + return false; + } + + $name = $this->qualifyClass($this->getTableInput()); + + $path = $this->getPath($name); + + $file = $this->getFile($name); + + // Next, we will generate the path to the location where this class' file should get + // written. Then, we will build the class and make the proper replacements on the + // file so that it gets the correctly formatted namespace and class name. + $this->makeDirectory($path); + + $this->files->put($path, $this->sortImports($this->buildClass($name))); + + $info = $this->type; + + if (in_array(CreatesMatchingTest::class, class_uses_recursive($this))) { + if ($this->handleTestCreation($path)) { + $info .= ' and test'; + } + } + + $this->components->info(sprintf('%s [%s] created successfully.', $info, $path)); + } + + /** + * Get the stub file for the generator. + * + * @return string + */ + protected function getStub() + { + return $this->resolveStubPath('/stubs/seeder.stub'); + } + + /** + * Resolve the fully-qualified path to the stub. + * + * @param string $stub + * @return string + */ + protected function resolveStubPath($stub) + { + return is_file($customPath = $this->laravel->basePath(trim($stub, '/'))) + ? $customPath + : __DIR__.$stub; + } + /** + * Parse the class name and format according to the root namespace. + * + * @param string $name + * @return string + */ + protected function qualifyClass($name) + { + $name = ltrim($name, '\\/'); + + $name = str_replace('/', '\\', $name); + + $rootNamespace = $this->rootNamespace(); + + if (Str::startsWith($name, $rootNamespace)) { + return $name; + } + + return $this->qualifyClass( + $this->getDefaultNamespace(trim($rootNamespace, '\\')).'\\'.$name + ); + } +} + diff -r ca36acd2bef2 -r cf9993c5c7df src/Generator/BaseGenerator.php --- a/src/Generator/BaseGenerator.php Sat Jun 24 01:08:01 2023 -0400 +++ b/src/Generator/BaseGenerator.php Sun Jun 25 14:45:15 2023 -0400 @@ -10,15 +10,13 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use Illuminate\Support\Str; use Wizzard\MagicForger\Replacer; #[AsCommand(name: 'mf')] class BaseGenerator extends ControllerMakeCommand { - protected $schema; - protected $tables; - /** * The name and signature of the console command. * @@ -33,6 +31,21 @@ */ protected $description = 'Generates any (or all) of the available files.'; + + /** + * The console command description. + * + * @var string + */ + protected $schema; + + /** + * The console command description. + * + * @var string + */ + protected $tables; + /** * Execute the console command. */ @@ -74,11 +87,11 @@ $this->createModel(); } -//TODO: when working on an actual + //TODO: when working on an actual $name = $this->qualifyClass($this->getTableInput()); $path = $this->getPath($name); - dd($name, $path); + dd($name, $path); // Next, We will check to see if the class already exists. If it does, we don't want // to create the class and overwrite the user's code. So, we will bail out so the @@ -128,15 +141,17 @@ protected function promptForMissingArguments(InputInterface $input, OutputInterface $output) { - $table = null; - while ($table === null) { - $table = $this->components->askWithCompletion( - 'What Table should we use?', - $this->possibleTables() - ); + if(is_null($input->getArgument('table'))) { + $table = null; + while ($table === null) { + $table = $this->components->askWithCompletion( + 'What Table should we use?', + $this->possibleTables() + ); + } + + $input->setArgument('table', $table); } - - $input->setArgument('table', $table); parent::promptForMissingArguments($input, $output); } @@ -175,7 +190,6 @@ /* ['force', null, InputOption::VALUE_NONE, 'Create the class even if the controller already exists'], */ /* ['invokable', 'i', InputOption::VALUE_NONE, 'Generate a single method, invokable controller class'], */ - ['table', null, InputOption::VALUE_REQUIRED, 'The table to generate files for.'], ['all', 'a', InputOption::VALUE_NONE, 'Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model'], ]; @@ -194,6 +208,27 @@ /// TO GO IN THE BASE CLASS /// //////////////////////////////////////////// + + /** + * Gets the file that will be worked on. If there is already an existing file + * then we can open that. However if we are forcing the operation, then we + * will start with an empty stub. + * + */ + protected function getFile($name) + { + + if ((! $this->hasOption('force') || + ! $this->option('force')) && + $this->alreadyExists($name)) { + //Working with an existing file + $this->files->get($name); + } + + //Working with a stub + return $this->files->get($this->getStub()); + } + /** * Get the desired class table from the input. * @@ -214,19 +249,19 @@ */ protected function possibleTables() { + return $this->getTables(); + } - return $this->getTables(); - } - /** * Get the tables in the schema */ protected function getTables() { - $tables = $this->getSchema()->listTableNames(); + if (is_null($this->tables)) { + $this->tables = collect($this->getSchema()->listTableNames())->all(); + } - return collect($tables) - ->all(); + return $this->tables; } /** diff -r ca36acd2bef2 -r cf9993c5c7df src/Generator/Controller/ControllerGenerator.php diff -r ca36acd2bef2 -r cf9993c5c7df src/Generator/ControllerGenerator.php --- a/src/Generator/ControllerGenerator.php Sat Jun 24 01:08:01 2023 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -option('table'); - - // Create views directory - /* $directory = resource_path('views/' . strtolower($tableName)); */ - /* mkdir($directory, 0755, true); */ - - /* // Create index view */ - /* $indexViewPath = $directory . '/index.blade.php'; */ - /* file_put_contents($indexViewPath, ''); */ - - /* // Create create view */ - /* $createViewPath = $directory . '/create.blade.php'; */ - /* file_put_contents($createViewPath, ''); */ - - /* // Create edit view */ - /* $editViewPath = $directory . '/edit.blade.php'; */ - /* file_put_contents($editViewPath, ''); */ - - // Success message - $this->info('Table '. $tableName . ' controller and views created successfully.'); - } - - /** - * Get the console command options. - * - * @return array - */ - protected function getOptions() - { - return [ - ['table', null, InputOption::VALUE_REQUIRED, 'The name of the table.'] - ]; - } -} - diff -r ca36acd2bef2 -r cf9993c5c7df src/MagicForgerServiceProvider.php --- a/src/MagicForgerServiceProvider.php Sat Jun 24 01:08:01 2023 -0400 +++ b/src/MagicForgerServiceProvider.php Sun Jun 25 14:45:15 2023 -0400 @@ -1,21 +1,23 @@ -app->runningInConsole()) { - $this->commands([ - BaseGenerator::class, - ]); + /** + * Bootstrap any package services. + */ + public function boot(): void + { + if ($this->app->runningInConsole()) { + $this->commands([ + BaseGenerator::class, + ControllerGenerator::class, + ]); + } } } -} diff -r ca36acd2bef2 -r cf9993c5c7df src/Replacer.php --- a/src/Replacer.php Sat Jun 24 01:08:01 2023 -0400 +++ b/src/Replacer.php Sun Jun 25 14:45:15 2023 -0400 @@ -4,89 +4,95 @@ use Illuminate\Support\Str; -class Replacer { - +class Replacer +{ /** * Cached replacements for re-use. * * @var array */ - protected $replacement_cache = []; + protected $replacement_cache = []; + - /** - * Prefix and Suffix for controller. - * Usage is up to the user. + * Prefix and Suffix for controller. + * Usage is up to the user. * * @var string */ - protected $controller_prefix = ""; + protected $controller_prefix = ""; /** - * Prefix and Suffix for controller. - * Usage is up to the user. + * Prefix and Suffix for controller. + * Usage is up to the user. * * @var string */ - protected $controller_suffix = "Controller"; + protected $controller_suffix = "Controller"; /** - * The lowest level to show log outputs. + * The lowest level to show log outputs. * * @var int */ - private $log_level = 1; + private $log_level = 1; - public function __construct() { - /* parent::__construct(); */ - } + public function __construct() + { + /* parent::__construct(); */ + } - /** - * Model names are generated in uppercase first Camel case - */ - public function model_name(string $name) : string { - return Str::singular(Str::studly($name)); - } + /** + * Model names are generated in uppercase first Camel case + */ + public function model_name(string $name): string + { + return Str::singular(Str::studly($name)); + } - /** - * Controller names are generated in uppercase first Camel case - * and wrapped in the prefix and suffix - */ - public function controller_name(string $name) : string { - return $this->controller_prefix . - $this->model_name($name) . - $this->controller_suffix; - } + /** + * Controller names are generated in uppercase first Camel case + * and wrapped in the prefix and suffix + */ + public function controller_name(string $name): string + { + return $this->controller_prefix . + $this->model_name($name) . + $this->controller_suffix; + } - /** - * Breaks up a string and makes it human readable - * - * This function assumes that the inputted name is camel case - */ - public function human_readable(string $name) : string { - return Str::title(Str::replace('_', ' ', $name)); - } + /** + * Breaks up a string and makes it human readable + * + * This function assumes that the inputted name is camel case + */ + public function human_readable(string $name): string + { + return Str::title(Str::replace('_', ' ', $name)); + } - /** - * Breaks up a string and makes it human readable and lowecase - * - * This function assumes that the inputted name is camel case - */ - public function human_readable_lc(string $name) : string { - return Str::lower($this->human_readable($name)); - } + /** + * Breaks up a string and makes it human readable and lowecase + * + * This function assumes that the inputted name is camel case + */ + public function human_readable_lc(string $name): string + { + return Str::lower($this->human_readable($name)); + } - /** - * Outputs a log for the replacements based on log level. - */ - public function log(string $str, int $log_level = 1) : void { + /** + * Outputs a log for the replacements based on log level. + */ + public function log(string $str, int $log_level = 1): void + { - if($this->log_level <= $log_level) { - print($str . "\n"); - } + if($this->log_level <= $log_level) { + print($str . "\n"); + } - } + } }