Skip to content

Commit 510bd0b

Browse files
committed
Code review fixes
1 parent 99aa964 commit 510bd0b

15 files changed

+99
-102
lines changed

src/Symfony/Component/Mailer/Bridge/Amazon/Factory/SesTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
namespace Symfony\Component\Mailer\Bridge\Amazon\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Amazon;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class SesTransportFactory extends AbstractTransportFactory
23+
final class SesTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
@@ -41,7 +41,7 @@ public function create(Dsn $dsn): TransportInterface
4141
return new Amazon\Http\SesTransport($user, $pass, $region, $this->client, $this->dispatcher, $this->logger);
4242
}
4343

44-
throw InvalidDsnException::unsupportedScheme($dsn);
44+
throw new UnsupportedSchemeException($dsn);
4545
}
4646

4747
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Bridge/Google/Factory/GmailTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@
1212
namespace Symfony\Component\Mailer\Bridge\Google\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class GmailTransportFactory extends AbstractTransportFactory
23+
final class GmailTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
2727
if ('smtp' === $dsn->getScheme()) {
2828
return new GmailTransport($dsn->getUser(), $dsn->getPass(), $this->dispatcher, $this->logger);
2929
}
3030

31-
throw InvalidDsnException::unsupportedScheme($dsn);
31+
throw new UnsupportedSchemeException($dsn);
3232
}
3333

3434
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Bridge/Mailchimp/Factory/MandrillTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
namespace Symfony\Component\Mailer\Bridge\Mailchimp\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Mailchimp;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class MandrillTransportFactory extends AbstractTransportFactory
23+
final class MandrillTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
@@ -39,7 +39,7 @@ public function create(Dsn $dsn): TransportInterface
3939
return new Mailchimp\Http\MandrillTransport($user, $this->client, $this->dispatcher, $this->logger);
4040
}
4141

42-
throw InvalidDsnException::unsupportedScheme($dsn);
42+
throw new UnsupportedSchemeException($dsn);
4343
}
4444

4545
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Bridge/Mailgun/Factory/MailgunTransportFactory.php

+7-6
Original file line numberDiff line numberDiff line change
@@ -12,35 +12,36 @@
1212
namespace Symfony\Component\Mailer\Bridge\Mailgun\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Mailgun;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class MailgunTransportFactory extends AbstractTransportFactory
23+
final class MailgunTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
2727
$scheme = $dsn->getScheme();
2828
$user = $dsn->getUser();
2929
$pass = $dsn->getPass();
30+
$region = $dsn->getOption('region');
3031

3132
if ('smtp' === $scheme) {
32-
return new Mailgun\Smtp\MailgunTransport($user, $pass, $this->dispatcher, $this->logger);
33+
return new Mailgun\Smtp\MailgunTransport($user, $pass, $region, $this->dispatcher, $this->logger);
3334
}
3435

3536
if ('http' === $scheme) {
36-
return new Mailgun\Http\MailgunTransport($user, $pass, $this->client, $this->dispatcher, $this->logger);
37+
return new Mailgun\Http\MailgunTransport($user, $pass, $this->client, $region, $this->dispatcher, $this->logger);
3738
}
3839

3940
if ('api' === $scheme) {
40-
return new Mailgun\Http\Api\MailgunTransport($user, $pass, $this->client, $this->dispatcher, $this->logger);
41+
return new Mailgun\Http\Api\MailgunTransport($user, $pass, $this->client, $region, $this->dispatcher, $this->logger);
4142
}
4243

43-
throw InvalidDsnException::unsupportedScheme($dsn);
44+
throw new UnsupportedSchemeException($dsn);
4445
}
4546

4647
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Bridge/Postmark/Factory/PostmarkTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
namespace Symfony\Component\Mailer\Bridge\Postmark\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Postmark;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class PostmarkTransportFactory extends AbstractTransportFactory
23+
final class PostmarkTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
@@ -35,7 +35,7 @@ public function create(Dsn $dsn): TransportInterface
3535
return new Postmark\Http\Api\PostmarkTransport($user, $this->client, $this->dispatcher, $this->logger);
3636
}
3737

38-
throw InvalidDsnException::unsupportedScheme($dsn);
38+
throw new UnsupportedSchemeException($dsn);
3939
}
4040

4141
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Bridge/Sendgrid/Factory/SendgridTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
namespace Symfony\Component\Mailer\Bridge\Sendgrid\Factory;
1313

1414
use Symfony\Component\Mailer\Bridge\Sendgrid;
15-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
15+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1616
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
1717
use Symfony\Component\Mailer\Transport\Dsn;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
1919

2020
/**
2121
* @author Konstantin Myakshin <molodchick@gmail.com>
2222
*/
23-
class SendgridTransportFactory extends AbstractTransportFactory
23+
final class SendgridTransportFactory extends AbstractTransportFactory
2424
{
2525
public function create(Dsn $dsn): TransportInterface
2626
{
@@ -32,7 +32,7 @@ public function create(Dsn $dsn): TransportInterface
3232
return new Sendgrid\Http\Api\SendgridTransport($dsn->getUser(), $this->client, $this->dispatcher, $this->logger);
3333
}
3434

35-
throw InvalidDsnException::unsupportedScheme($dsn);
35+
throw new UnsupportedSchemeException($dsn);
3636
}
3737

3838
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Exception/InvalidDsnException.php

-64
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
namespace Symfony\Component\Mailer\Exception;
4+
5+
use Symfony\Component\Mailer\Bridge;
6+
use Symfony\Component\Mailer\Transport\Dsn;
7+
8+
/**
9+
* @author Konstantin Myakshin <molodchick@gmail.com>
10+
*/
11+
class UnsupportedHostException extends LogicException
12+
{
13+
private const HOST_TO_PACKAGE_MAP = [
14+
'gmail' => [
15+
'class' => Bridge\Google\Factory\GmailTransportFactory::class,
16+
'package' => 'symfony/google-mailer',
17+
],
18+
'mailgun' => [
19+
'class' => Bridge\Mailgun\Factory\MailgunTransportFactory::class,
20+
'package' => 'symfony/mailgun-mailer',
21+
],
22+
'postmark' => [
23+
'class' => Bridge\Postmark\Factory\PostmarkTransportFactory::class,
24+
'package' => 'symfony/postmark-mailer',
25+
],
26+
'sendgrid' => [
27+
'class' => Bridge\Sendgrid\Factory\SendgridTransportFactory::class,
28+
'package' => 'symfony/sendgrid-mailer',
29+
],
30+
'ses' => [
31+
'class' => Bridge\Amazon\Factory\SesTransportFactory::class,
32+
'package' => 'symfony/amazon-mailer',
33+
],
34+
'mandrill' => [
35+
'class' => Bridge\Mailchimp\Factory\MandrillTransportFactory::class,
36+
'package' => 'symfony/mailchimp-mailer',
37+
],
38+
];
39+
40+
public function __construct(Dsn $dsn)
41+
{
42+
$host = $dsn->getHost();
43+
$package = self::HOST_TO_PACKAGE_MAP[$host] ?? null;
44+
if ($package && !class_exists($package['class'])) {
45+
parent::__construct(sprintf('Unable to send emails via "%s" as the bridge is not installed. Try running "composer require %s".', $host, $package['package']));
46+
47+
return;
48+
}
49+
50+
parent::__construct(sprintf('The "%s" mailer is not supported.', $host));
51+
}
52+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
3+
namespace Symfony\Component\Mailer\Exception;
4+
5+
use Symfony\Component\Mailer\Transport\Dsn;
6+
7+
class UnsupportedSchemeException extends LogicException
8+
{
9+
public function __construct(Dsn $dsn)
10+
{
11+
parent::__construct(sprintf('The "%s" scheme is not supported for mailer "%s".', $dsn->getScheme(), $dsn->getHost()));
12+
}
13+
}

src/Symfony/Component/Mailer/Transport/Dsn.php

+1-6
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,13 @@
1616
/**
1717
* @author Konstantin Myakshin <molodchick@gmail.com>
1818
*/
19-
class Dsn
19+
final class Dsn
2020
{
2121
private $scheme;
22-
2322
private $host;
24-
2523
private $port;
26-
2724
private $user;
28-
2925
private $pass;
30-
3126
private $options;
3227

3328
public function __construct(string $scheme, string $host, ?int $port, string $user, string $pass, array $options = [])

src/Symfony/Component/Mailer/Transport/NullTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@
1111

1212
namespace Symfony\Component\Mailer\Transport;
1313

14-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
14+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1515

1616
/**
1717
* @author Konstantin Myakshin <molodchick@gmail.com>
1818
*/
19-
class NullTransportFactory extends AbstractTransportFactory
19+
final class NullTransportFactory extends AbstractTransportFactory
2020
{
2121
public function create(Dsn $dsn): TransportInterface
2222
{
2323
if ('smtp' === $dsn->getScheme()) {
2424
return new NullTransport($this->dispatcher, $this->logger);
2525
}
2626

27-
throw InvalidDsnException::unsupportedScheme($dsn);
27+
throw new UnsupportedSchemeException($dsn);
2828
}
2929

3030
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Transport/SendmailTransportFactory.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@
1111

1212
namespace Symfony\Component\Mailer\Transport;
1313

14-
use Symfony\Component\Mailer\Exception\InvalidDsnException;
14+
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
1515

1616
/**
1717
* @author Konstantin Myakshin <molodchick@gmail.com>
1818
*/
19-
class SendmailTransportFactory extends AbstractTransportFactory
19+
final class SendmailTransportFactory extends AbstractTransportFactory
2020
{
2121
public function create(Dsn $dsn): TransportInterface
2222
{
2323
if ('smtp' === $dsn->getScheme()) {
2424
return new SendmailTransport(null, $this->dispatcher, $this->logger);
2525
}
2626

27-
throw InvalidDsnException::unsupportedScheme($dsn);
27+
throw new UnsupportedSchemeException($dsn);
2828
}
2929

3030
public function supports(Dsn $dsn): bool

src/Symfony/Component/Mailer/Transport/Smtp/EsmtpTransportFactory.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
/**
1919
* @author Konstantin Myakshin <molodchick@gmail.com>
2020
*/
21-
class EsmtpTransportFactory extends AbstractTransportFactory
21+
final class EsmtpTransportFactory extends AbstractTransportFactory
2222
{
2323
public function create(Dsn $dsn): TransportInterface
2424
{

0 commit comments

Comments
 (0)