Skip to content

Commit

Permalink
feature #32609 [Mailer][DX][RFC] Rename mailer bridge transport class…
Browse files Browse the repository at this point in the history
…es (Koc)

This PR was squashed before being merged into the 4.4 branch (closes #32609).

Discussion
----------

[Mailer][DX][RFC] Rename mailer bridge transport classes

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yno
| New feature?  | no
| BC breaks?    | yes
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

During working on #31946 I realized how painful to work with multiple classes which has same name. [Nice article](https://www.tomasvotruba.cz/blog/2019/05/02/alias-as-a-code-smell/) by @TomasVotruba with explanation of problems  with such approach.
~Built on top of #32608 , so only [2nd commit](bbf7e99) is actual.~

Also I've changed namespaces to make bridge structure much simpler and be linear. All classes located on same level now. See how [bridge](https://github.com/symfony/symfony/tree/bbf7e99e89c70fab372929827ae509b41280ce40/src/Symfony/Component/Mailer/Bridge/Amazon) looks like now.

Now in RFC state to get approve for such king of changes and update all other bridges.

Commits
-------

eda4f01 [Mailer][DX][RFC] Rename mailer bridge transport classes
  • Loading branch information
fabpot committed Jul 25, 2019
2 parents 9a5003e + eda4f01 commit fc14cb7
Show file tree
Hide file tree
Showing 40 changed files with 185 additions and 136 deletions.
Expand Up @@ -77,12 +77,12 @@
use Symfony\Component\Lock\Store\FlockStore;
use Symfony\Component\Lock\Store\StoreFactory;
use Symfony\Component\Lock\StoreInterface;
use Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory;
use Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailgun\Factory\MailgunTransportFactory;
use Symfony\Component\Mailer\Bridge\Postmark\Factory\PostmarkTransportFactory;
use Symfony\Component\Mailer\Bridge\Sendgrid\Factory\SendgridTransportFactory;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory;
use Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory;
use Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory;
use Symfony\Component\Mailer\Mailer;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
use Symfony\Component\Messenger\MessageBus;
Expand Down
Expand Up @@ -11,27 +11,27 @@
<argument type="service" id="logger" on-invalid="ignore" />
</service>

<service id="mailer.transport_factory.amazon" class="Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.amazon" class="Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

<service id="mailer.transport_factory.gmail" class="Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.gmail" class="Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

<service id="mailer.transport_factory.mailchimp" class="Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.mailchimp" class="Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

<service id="mailer.transport_factory.mailgun" class="Symfony\Component\Mailer\Bridge\Mailgun\Factory\MailgunTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.mailgun" class="Symfony\Component\Mailer\Bridge\Mailgun\Transport\MailgunTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

<service id="mailer.transport_factory.postmark" class="Symfony\Component\Mailer\Bridge\Postmark\Factory\PostmarkTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.postmark" class="Symfony\Component\Mailer\Bridge\Postmark\Transport\PostmarkTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

<service id="mailer.transport_factory.sendgrid" class="Symfony\Component\Mailer\Bridge\Sendgrid\Factory\SendgridTransportFactory" parent="mailer.transport_factory.abstract">
<service id="mailer.transport_factory.sendgrid" class="Symfony\Component\Mailer\Bridge\Sendgrid\Transport\SendgridTransportFactory" parent="mailer.transport_factory.abstract">
<tag name="mailer.transport_factory" />
</service>

Expand Down
10 changes: 9 additions & 1 deletion src/Symfony/Component/Mailer/Bridge/Amazon/CHANGELOG.md
@@ -1,7 +1,15 @@
CHANGELOG
=========

4.4.0
-----

* [BC BREAK] Renamed and moved `Symfony\Component\Mailer\Bridge\Amazon\Http\Api\SesTransport`
to `Symfony\Component\Mailer\Bridge\Amazon\Transpor\SesApiTransport`, `Symfony\Component\Mailer\Bridge\Amazon\Http\SesTransport`
to `Symfony\Component\Mailer\Bridge\Amazon\Transport\SesHttpTransport`, `Symfony\Component\Mailer\Bridge\Amazon\Smtp\SesTransport`
to `Symfony\Component\Mailer\Bridge\Amazon\Transport\SesSmtpTransport`.

4.3.0
-----

* added the bridge
* Added the bridge
Expand Up @@ -9,10 +9,12 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Amazon\Tests\Factory;
namespace Symfony\Component\Mailer\Bridge\Amazon\Tests\Transport;

use Symfony\Component\Mailer\Bridge\Amazon;
use Symfony\Component\Mailer\Bridge\Amazon\Factory\SesTransportFactory;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesApiTransport;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesHttpTransport;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesSmtpTransport;
use Symfony\Component\Mailer\Bridge\Amazon\Transport\SesTransportFactory;
use Symfony\Component\Mailer\Tests\TransportFactoryTestCase;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\TransportFactoryInterface;
Expand Down Expand Up @@ -55,32 +57,32 @@ public function createProvider(): iterable

yield [
new Dsn('api', 'ses', self::USER, self::PASSWORD),
new Amazon\Http\Api\SesTransport(self::USER, self::PASSWORD, null, $client, $dispatcher, $logger),
new SesApiTransport(self::USER, self::PASSWORD, null, $client, $dispatcher, $logger),
];

yield [
new Dsn('api', 'ses', self::USER, self::PASSWORD, null, ['region' => 'eu-west-1']),
new Amazon\Http\Api\SesTransport(self::USER, self::PASSWORD, 'eu-west-1', $client, $dispatcher, $logger),
new SesApiTransport(self::USER, self::PASSWORD, 'eu-west-1', $client, $dispatcher, $logger),
];

yield [
new Dsn('http', 'ses', self::USER, self::PASSWORD),
new Amazon\Http\SesTransport(self::USER, self::PASSWORD, null, $client, $dispatcher, $logger),
new SesHttpTransport(self::USER, self::PASSWORD, null, $client, $dispatcher, $logger),
];

yield [
new Dsn('http', 'ses', self::USER, self::PASSWORD, null, ['region' => 'eu-west-1']),
new Amazon\Http\SesTransport(self::USER, self::PASSWORD, 'eu-west-1', $client, $dispatcher, $logger),
new SesHttpTransport(self::USER, self::PASSWORD, 'eu-west-1', $client, $dispatcher, $logger),
];

yield [
new Dsn('smtp', 'ses', self::USER, self::PASSWORD),
new Amazon\Smtp\SesTransport(self::USER, self::PASSWORD, null, $dispatcher, $logger),
new SesSmtpTransport(self::USER, self::PASSWORD, null, $dispatcher, $logger),
];

yield [
new Dsn('smtp', 'ses', self::USER, self::PASSWORD, null, ['region' => 'eu-west-1']),
new Amazon\Smtp\SesTransport(self::USER, self::PASSWORD, 'eu-west-1', $dispatcher, $logger),
new SesSmtpTransport(self::USER, self::PASSWORD, 'eu-west-1', $dispatcher, $logger),
];
}

Expand Down
Expand Up @@ -9,12 +9,12 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Amazon\Http\Api;
namespace Symfony\Component\Mailer\Bridge\Amazon\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SmtpEnvelope;
use Symfony\Component\Mailer\Transport\Http\Api\AbstractApiTransport;
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
use Symfony\Component\Mime\Email;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
Expand All @@ -23,7 +23,7 @@
/**
* @author Kevin Verschaeve
*/
class SesTransport extends AbstractApiTransport
class SesApiTransport extends AbstractApiTransport
{
private const ENDPOINT = 'https://email.%region%.amazonaws.com';

Expand Down
Expand Up @@ -9,20 +9,20 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Amazon\Http;
namespace Symfony\Component\Mailer\Bridge\Amazon\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Mailer\Transport\Http\AbstractHttpTransport;
use Symfony\Component\Mailer\Transport\AbstractHttpTransport;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;

/**
* @author Kevin Verschaeve
*/
class SesTransport extends AbstractHttpTransport
class SesHttpTransport extends AbstractHttpTransport
{
private const ENDPOINT = 'https://email.%region%.amazonaws.com';

Expand Down
Expand Up @@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Amazon\Smtp;
namespace Symfony\Component\Mailer\Bridge\Amazon\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
Expand All @@ -18,7 +18,7 @@
/**
* @author Kevin Verschaeve
*/
class SesTransport extends EsmtpTransport
class SesSmtpTransport extends EsmtpTransport
{
/**
* @param string $region Amazon SES region (currently one of us-east-1, us-west-2, or eu-west-1)
Expand Down
Expand Up @@ -9,9 +9,8 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Amazon\Factory;
namespace Symfony\Component\Mailer\Bridge\Amazon\Transport;

use Symfony\Component\Mailer\Bridge\Amazon;
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;
Expand All @@ -30,15 +29,15 @@ public function create(Dsn $dsn): TransportInterface
$region = $dsn->getOption('region');

if ('api' === $scheme) {
return new Amazon\Http\Api\SesTransport($user, $password, $region, $this->client, $this->dispatcher, $this->logger);
return new SesApiTransport($user, $password, $region, $this->client, $this->dispatcher, $this->logger);
}

if ('http' === $scheme) {
return new Amazon\Http\SesTransport($user, $password, $region, $this->client, $this->dispatcher, $this->logger);
return new SesHttpTransport($user, $password, $region, $this->client, $this->dispatcher, $this->logger);
}

if ('smtp' === $scheme) {
return new Amazon\Smtp\SesTransport($user, $password, $region, $this->dispatcher, $this->logger);
return new SesSmtpTransport($user, $password, $region, $this->dispatcher, $this->logger);
}

throw new UnsupportedSchemeException($dsn, ['api', 'http', 'smtp']);
Expand Down
8 changes: 7 additions & 1 deletion src/Symfony/Component/Mailer/Bridge/Google/CHANGELOG.md
@@ -1,7 +1,13 @@
CHANGELOG
=========

4.4.0
-----

* [BC BREAK] Renamed and moved `Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport`
to `Symfony\Component\Mailer\Bridge\Google\Transport\GmailSmtpTransport`.

4.3.0
-----

* added the bridge
* Added the bridge
@@ -1,9 +1,9 @@
<?php

namespace Symfony\Component\Mailer\Bridge\Google\Tests\Factory;
namespace Symfony\Component\Mailer\Bridge\Google\Tests\Transport;

use Symfony\Component\Mailer\Bridge\Google\Factory\GmailTransportFactory;
use Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport;
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailSmtpTransport;
use Symfony\Component\Mailer\Bridge\Google\Transport\GmailTransportFactory;
use Symfony\Component\Mailer\Tests\TransportFactoryTestCase;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\TransportFactoryInterface;
Expand Down Expand Up @@ -32,7 +32,7 @@ public function createProvider(): iterable
{
yield [
new Dsn('smtp', 'gmail', self::USER, self::PASSWORD),
new GmailTransport(self::USER, self::PASSWORD, $this->getDispatcher(), $this->getLogger()),
new GmailSmtpTransport(self::USER, self::PASSWORD, $this->getDispatcher(), $this->getLogger()),
];
}

Expand Down
Expand Up @@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Google\Smtp;
namespace Symfony\Component\Mailer\Bridge\Google\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport;
Expand All @@ -18,7 +18,7 @@
/**
* @author Kevin Verschaeve
*/
class GmailTransport extends EsmtpTransport
class GmailSmtpTransport extends EsmtpTransport
{
public function __construct(string $username, string $password, EventDispatcherInterface $dispatcher = null, LoggerInterface $logger = null)
{
Expand Down
Expand Up @@ -9,9 +9,8 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Google\Factory;
namespace Symfony\Component\Mailer\Bridge\Google\Transport;

use Symfony\Component\Mailer\Bridge\Google\Smtp\GmailTransport;
use Symfony\Component\Mailer\Exception\UnsupportedSchemeException;
use Symfony\Component\Mailer\Transport\AbstractTransportFactory;
use Symfony\Component\Mailer\Transport\Dsn;
Expand All @@ -25,7 +24,7 @@ final class GmailTransportFactory extends AbstractTransportFactory
public function create(Dsn $dsn): TransportInterface
{
if ('smtp' === $dsn->getScheme()) {
return new GmailTransport($this->getUser($dsn), $this->getPassword($dsn), $this->dispatcher, $this->logger);
return new GmailSmtpTransport($this->getUser($dsn), $this->getPassword($dsn), $this->dispatcher, $this->logger);
}

throw new UnsupportedSchemeException($dsn, ['smtp']);
Expand Down
10 changes: 9 additions & 1 deletion src/Symfony/Component/Mailer/Bridge/Mailchimp/CHANGELOG.md
@@ -1,7 +1,15 @@
CHANGELOG
=========

4.4.0
-----

* [BC BREAK] Renamed and moved `Symfony\Component\Mailer\Bridge\Mailchimp\Http\Api\MandrillTransport`
to `Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport`, `Symfony\Component\Mailer\Bridge\Mailchimp\Http\MandrillTransport`
to `Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillHttpTransport`, `Symfony\Component\Mailer\Bridge\Mailchimp\Smtp\MandrillTransport`
to `Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillSmtpTransport`.

4.3.0
-----

* added the bridge
* Added the bridge
Expand Up @@ -9,10 +9,12 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Mailchimp\Tests\Factory;
namespace Symfony\Component\Mailer\Bridge\Mailchimp\Tests\Transport;

use Symfony\Component\Mailer\Bridge\Mailchimp;
use Symfony\Component\Mailer\Bridge\Mailchimp\Factory\MandrillTransportFactory;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillApiTransport;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillHttpTransport;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillSmtpTransport;
use Symfony\Component\Mailer\Bridge\Mailchimp\Transport\MandrillTransportFactory;
use Symfony\Component\Mailer\Tests\TransportFactoryTestCase;
use Symfony\Component\Mailer\Transport\Dsn;
use Symfony\Component\Mailer\Transport\TransportFactoryInterface;
Expand Down Expand Up @@ -55,17 +57,17 @@ public function createProvider(): iterable

yield [
new Dsn('api', 'mandrill', self::USER),
new Mailchimp\Http\Api\MandrillTransport(self::USER, $client, $dispatcher, $logger),
new MandrillApiTransport(self::USER, $client, $dispatcher, $logger),
];

yield [
new Dsn('http', 'mandrill', self::USER),
new Mailchimp\Http\MandrillTransport(self::USER, $client, $dispatcher, $logger),
new MandrillHttpTransport(self::USER, $client, $dispatcher, $logger),
];

yield [
new Dsn('smtp', 'mandrill', self::USER, self::PASSWORD),
new Mailchimp\Smtp\MandrillTransport(self::USER, self::PASSWORD, $dispatcher, $logger),
new MandrillSmtpTransport(self::USER, self::PASSWORD, $dispatcher, $logger),
];
}

Expand Down
Expand Up @@ -9,12 +9,12 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Mailchimp\Http\Api;
namespace Symfony\Component\Mailer\Bridge\Mailchimp\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SmtpEnvelope;
use Symfony\Component\Mailer\Transport\Http\Api\AbstractApiTransport;
use Symfony\Component\Mailer\Transport\AbstractApiTransport;
use Symfony\Component\Mime\Email;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
Expand All @@ -23,7 +23,7 @@
/**
* @author Kevin Verschaeve
*/
class MandrillTransport extends AbstractApiTransport
class MandrillApiTransport extends AbstractApiTransport
{
private const ENDPOINT = 'https://mandrillapp.com/api/1.0/messages/send.json';

Expand Down
Expand Up @@ -9,20 +9,20 @@
* file that was distributed with this source code.
*/

namespace Symfony\Component\Mailer\Bridge\Mailchimp\Http;
namespace Symfony\Component\Mailer\Bridge\Mailchimp\Transport;

use Psr\Log\LoggerInterface;
use Symfony\Component\Mailer\Exception\HttpTransportException;
use Symfony\Component\Mailer\SentMessage;
use Symfony\Component\Mailer\Transport\Http\AbstractHttpTransport;
use Symfony\Component\Mailer\Transport\AbstractHttpTransport;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;

/**
* @author Kevin Verschaeve
*/
class MandrillTransport extends AbstractHttpTransport
class MandrillHttpTransport extends AbstractHttpTransport
{
private const ENDPOINT = 'https://mandrillapp.com/api/1.0/messages/send-raw.json';
private $key;
Expand Down

0 comments on commit fc14cb7

Please sign in to comment.