| 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 | } |