Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
31 / 31 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
| HydeMakePostCommand | |
100.00% |
31 / 31 |
|
100.00% |
1 / 1 |
5 | |
100.00% |
1 / 1 |
| handle | |
100.00% |
31 / 31 |
|
100.00% |
1 / 1 |
5 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace Hyde\Framework\Commands; |
| 4 | |
| 5 | use Exception; |
| 6 | use Hyde\Framework\Actions\CreatesNewMarkdownPostFile; |
| 7 | use LaravelZero\Framework\Commands\Command; |
| 8 | |
| 9 | /** |
| 10 | * Hyde Command to scaffold a new Markdown Post. |
| 11 | */ |
| 12 | class HydeMakePostCommand extends Command |
| 13 | { |
| 14 | /** |
| 15 | * The signature of the command. |
| 16 | * |
| 17 | * @var string |
| 18 | */ |
| 19 | protected $signature = 'make:post |
| 20 | {title? : The title for the Post. Will be used to generate the slug} |
| 21 | {--force : Should the generated file overwrite existing posts with the same slug?}'; |
| 22 | |
| 23 | /** |
| 24 | * The description of the command. |
| 25 | * |
| 26 | * @var string |
| 27 | */ |
| 28 | protected $description = 'Scaffold a new Markdown blog post file'; |
| 29 | |
| 30 | /** |
| 31 | * Execute the console command. |
| 32 | * |
| 33 | * @return int |
| 34 | */ |
| 35 | public function handle(): int |
| 36 | { |
| 37 | $this->title('Creating a new post!'); |
| 38 | |
| 39 | $this->line( |
| 40 | $this->argument('title') |
| 41 | ? '<info>Selected title: '.$this->argument('title')."</info>\n" |
| 42 | : 'Please enter the title of the post, it will be used to generate the slug.' |
| 43 | ); |
| 44 | |
| 45 | $title = $this->argument('title') |
| 46 | ?? $this->ask('What is the title of the post?') |
| 47 | ?? 'My New Post'; |
| 48 | |
| 49 | $this->line('Tip: You can just hit return to use the defaults.'); |
| 50 | $description = $this->ask('Write a short post excerpt/description'); |
| 51 | $author = $this->ask('What is your (the author\'s) name?'); |
| 52 | $category = $this->ask('What is the primary category of the post?'); |
| 53 | |
| 54 | $this->info('Creating a post with the following details:'); |
| 55 | $creator = new CreatesNewMarkdownPostFile( |
| 56 | title: $title, |
| 57 | description: $description, |
| 58 | category: $category, |
| 59 | author: $author |
| 60 | ); |
| 61 | |
| 62 | $this->line("Title: $creator->title"); |
| 63 | $this->line("Description: $creator->description"); |
| 64 | $this->line("Author: $creator->author"); |
| 65 | $this->line("Category: $creator->category"); |
| 66 | $this->line("Date: $creator->date"); |
| 67 | $this->line("Slug: $creator->slug"); |
| 68 | |
| 69 | if (! $this->confirm('Do you wish to continue?', true)) { |
| 70 | $this->info('Aborting.'); |
| 71 | |
| 72 | return 130; |
| 73 | } |
| 74 | |
| 75 | try { |
| 76 | $path = $creator->save($this->option('force')); |
| 77 | $this->info("Post created! File is saved to $path"); |
| 78 | |
| 79 | return 0; |
| 80 | } catch (Exception $exception) { |
| 81 | $this->error('Something went wrong when trying to save the file!'); |
| 82 | $this->warn($exception->getMessage()); |
| 83 | if ($exception->getCode() === 409) { |
| 84 | $this->comment('If you want to overwrite the file supply the --force flag.'); |
| 85 | } |
| 86 | |
| 87 | return $exception->getCode(); |
| 88 | } |
| 89 | } |
| 90 | } |