Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
| 1 | <?php | ||
| 12 | class CertificateCheckFailed extends BaseNotification | ||
| 13 | { | ||
| 14 | public InValidCertificateFoundEvent $event; | ||
|  | |||
| 15 | |||
| 16 | /** | ||
| 17 | * Get the mail representation of the notification. | ||
| 18 | * | ||
| 19 | * @param mixed $notifiable | ||
| 20 | * @return \Illuminate\Notifications\Messages\MailMessage | ||
| 21 | */ | ||
| 22 | public function toMail($notifiable) | ||
| 23 |     { | ||
| 24 | $mailMessage = (new MailMessage) | ||
| 25 | ->error() | ||
| 26 | ->subject($this->getMessageText()) | ||
| 27 | ->line($this->getMessageText()); | ||
| 28 | |||
| 29 |         foreach ($this->getMonitorProperties() as $name => $value) { | ||
| 30 | $mailMessage->line($name.': '.$value); | ||
| 31 | } | ||
| 32 | |||
| 33 | return $mailMessage; | ||
| 34 | } | ||
| 35 | |||
| 36 | public function toSlack($notifiable) | ||
| 37 |     { | ||
| 38 | return (new SlackMessage) | ||
| 39 | ->error() | ||
| 40 |             ->attachment(function (SlackAttachment $attachment) { | ||
| 41 | $attachment | ||
| 42 | ->title($this->getMessageText()) | ||
| 43 | ->content($this->getMonitor()->certificate_check_failure_reason) | ||
| 44 | ->fallback($this->getMessageText()) | ||
| 45 | ->footer($this->getMonitor()->certificate_issuer) | ||
| 46 | ->timestamp(Carbon::now()); | ||
| 47 | }); | ||
| 48 | } | ||
| 49 | |||
| 50 | public function getMonitorProperties($properties = []): array | ||
| 51 |     { | ||
| 52 | $extraProperties = ['Failure reason' => $this->event->monitor->certificate_check_failure_reason]; | ||
| 53 | |||
| 54 | return parent::getMonitorProperties($extraProperties); | ||
| 55 | } | ||
| 56 | |||
| 57 | public function setEvent(InValidCertificateFoundEvent $event): self | ||
| 58 |     { | ||
| 59 | $this->event = $event; | ||
| 60 | |||
| 61 | return $this; | ||
| 62 | } | ||
| 63 | |||
| 64 | public function getMessageText(): string | ||
| 65 |     { | ||
| 66 |         return "SSL Certificate for {$this->getMonitor()->url} is invalid"; | ||
| 67 | } | ||
| 68 | } | ||
| 69 |