Skip to content

Commit

Permalink
Closing API
Browse files Browse the repository at this point in the history
  • Loading branch information
core23 authored and greg0ire committed Dec 6, 2019
1 parent e6dac33 commit dd0ea1d
Show file tree
Hide file tree
Showing 35 changed files with 87 additions and 71 deletions.
28 changes: 28 additions & 0 deletions UPGRADE-3.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ UPGRADE FROM 2.X to 3.0
=======================

## SeoPage

If you have implemented a custom seo page, you must adapt the signature of the following new methods to match the one in `SeoPageInterface` again:
* `removeMeta`
* `removeHtmlAttributes`
Expand All @@ -10,3 +11,30 @@ If you have implemented a custom seo page, you must adapt the signature of the f
* `hasHeadAttribute`
* `removeLangAlternate`
* `hasLangAlternate`

## Closed API

Many classes have been made final, meaning you can no longer extend them.
Consider using decoration instead.

* `Sonata\BlockBundle\SonataSeoBundle`
* `Sonata\BlockBundle\Block\Breadcrumb\HomepageBreadcrumbBlockService`
* `Sonata\BlockBundle\Block\Social\EmailShareButtonBlockService`
* `Sonata\BlockBundle\Block\Social\FacebookLikeBoxBlockService`
* `Sonata\BlockBundle\Block\Social\FacebookLikeButtonBlockService`
* `Sonata\BlockBundle\Block\Social\FacebookSendButtonBlockService`
* `Sonata\BlockBundle\Block\Social\FacebookShareButtonBlockService`
* `Sonata\BlockBundle\Block\Social\PinterestPinButtonBlockService`
* `Sonata\BlockBundle\Block\Social\TwitterFollowButtonBlockService`
* `Sonata\BlockBundle\Block\Social\TwitterHashtagButtonBlockService`
* `Sonata\BlockBundle\Block\Social\TwitterMentionButtonBlockService`
* `Sonata\BlockBundle\Block\Social\TwitterShareButtonBlockService`
* `Sonata\BlockBundle\Command\SitemapGeneratorCommand`
* `Sonata\BlockBundle\DependencyInjection\Compiler\BreadcrumbBlockServicesCompilerPass`
* `Sonata\BlockBundle\DependencyInjection\Compiler\ServiceCompilerPass`
* `Sonata\BlockBundle\DependencyInjection\Configuration`
* `Sonata\BlockBundle\DependencyInjection\SonataSeoExtension`
* `Sonata\BlockBundle\Event\BreadcrumbListener`
* `Sonata\BlockBundle\Seo\SeoPage`
* `Sonata\BlockBundle\Sitemap\SourceManager`
* `Sonata\BlockBundle\Twig\Extension\SeoExtension`
2 changes: 1 addition & 1 deletion src/Block/Breadcrumb/HomepageBreadcrumbBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class HomepageBreadcrumbBlockService extends BaseBreadcrumbMenuBlockService
final class HomepageBreadcrumbBlockService extends BaseBreadcrumbMenuBlockService
{
public function getName()
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/EmailShareButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
*
* @author Vincent Composieux <vincent.composieux@gmail.com>
*/
class EmailShareButtonBlockService extends AbstractAdminBlockService
final class EmailShareButtonBlockService extends AbstractAdminBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/FacebookLikeBoxBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class FacebookLikeBoxBlockService extends BaseFacebookSocialPluginsBlockService
final class FacebookLikeBoxBlockService extends BaseFacebookSocialPluginsBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/FacebookLikeButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class FacebookLikeButtonBlockService extends BaseFacebookSocialPluginsBlockService
final class FacebookLikeButtonBlockService extends BaseFacebookSocialPluginsBlockService
{
/**
* @var string[]
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/FacebookSendButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class FacebookSendButtonBlockService extends BaseFacebookSocialPluginsBlockService
final class FacebookSendButtonBlockService extends BaseFacebookSocialPluginsBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/FacebookShareButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class FacebookShareButtonBlockService extends BaseFacebookSocialPluginsBlockService
final class FacebookShareButtonBlockService extends BaseFacebookSocialPluginsBlockService
{
/**
* @var string[]
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/PinterestPinButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
*
* @author Vincent Composieux <vincent.composieux@gmail.com>
*/
class PinterestPinButtonBlockService extends AbstractAdminBlockService
final class PinterestPinButtonBlockService extends AbstractAdminBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
10 changes: 6 additions & 4 deletions src/Block/Social/TwitterEmbedTweetBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@

namespace Sonata\SeoBundle\Block\Social;

use Guzzle\Http\Client;
use Guzzle\Http\Exception\CurlException;
use RuntimeException;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\BlockBundle\Block\BlockContextInterface;
use Sonata\BlockBundle\Model\BlockInterface;
Expand All @@ -37,8 +39,8 @@
class TwitterEmbedTweetBlockService extends BaseTwitterButtonBlockService
{
public const TWITTER_OEMBED_URI = 'https://api.twitter.com/1/statuses/oembed.json';
public const TWEET_URL_PATTERN = '%^(https://)(www.)?(twitter.com/)(.*)(/status)(es)?(/)([0-9]*)$%i';
public const TWEET_ID_PATTERN = '%^([0-9]*)$%';
private const TWEET_URL_PATTERN = '%^(https://)(www.)?(twitter.com/)(.*)(/status)(es)?(/)([0-9]*)$%i';
private const TWEET_ID_PATTERN = '%^([0-9]*)$%';

public function execute(BlockContextInterface $blockContext, Response $response = null)
{
Expand All @@ -48,11 +50,11 @@ public function execute(BlockContextInterface $blockContext, Response $response
|| preg_match(self::TWEET_ID_PATTERN, $tweet)) {
// We matched an URL or an ID, we'll need to ask the API
if (false === class_exists('Guzzle\Http\Client')) {
throw new \RuntimeException('The guzzle http client library is required to call the Twitter API. Make sure to add guzzle/guzzle to your composer.json.');
throw new RuntimeException('The guzzle http client library is required to call the Twitter API. Make sure to add guzzle/guzzle to your composer.json.');
}

// TODO cache API result
$client = new \Guzzle\Http\Client();
$client = new Client();
$client->setConfig(['curl.options' => [CURLOPT_CONNECTTIMEOUT_MS => 1000]]);

try {
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/TwitterFollowButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class TwitterFollowButtonBlockService extends BaseTwitterButtonBlockService
final class TwitterFollowButtonBlockService extends BaseTwitterButtonBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/TwitterHashtagButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class TwitterHashtagButtonBlockService extends BaseTwitterButtonBlockService
final class TwitterHashtagButtonBlockService extends BaseTwitterButtonBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/TwitterMentionButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class TwitterMentionButtonBlockService extends BaseTwitterButtonBlockService
final class TwitterMentionButtonBlockService extends BaseTwitterButtonBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Block/Social/TwitterShareButtonBlockService.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class TwitterShareButtonBlockService extends BaseTwitterButtonBlockService
final class TwitterShareButtonBlockService extends BaseTwitterButtonBlockService
{
public function configureSettings(OptionsResolver $resolver): void
{
Expand Down
5 changes: 3 additions & 2 deletions src/Command/SitemapGeneratorCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

namespace Sonata\SeoBundle\Command;

use Exception;
use Sonata\Exporter\Handler;
use Sonata\Exporter\Writer\SitemapWriter;
use Sonata\SeoBundle\Sitemap\SourceManager;
Expand All @@ -31,7 +32,7 @@
*
* @author Thomas Rabaix <thomas.rabaix@sonata-project.org>
*/
class SitemapGeneratorCommand extends Command
final class SitemapGeneratorCommand extends Command
{
/**
* @var RouterInterface
Expand Down Expand Up @@ -151,7 +152,7 @@ private function generateSitemap(string $dir, string $scheme, string $host, stri

try {
Handler::create($sitemap->sources, $write)->export();
} catch (\Exception $e) {
} catch (Exception $e) {
$this->filesystem->remove($dir);

throw $e;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class BreadcrumbBlockServicesCompilerPass implements CompilerPassInterface
final class BreadcrumbBlockServicesCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
/**
* This is the class that validates and merges configuration from your app/config files.
*/
class Configuration implements ConfigurationInterface
final class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
Expand Down
15 changes: 8 additions & 7 deletions src/DependencyInjection/SonataSeoExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,18 @@

namespace Sonata\SeoBundle\DependencyInjection;

use RuntimeException;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;

/**
* This is the class that loads and manages your bundle configuration.
*/
class SonataSeoExtension extends Extension
final class SonataSeoExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container): void
{
Expand All @@ -33,7 +34,7 @@ public function load(array $configs, ContainerBuilder $container): void

$bundles = $container->getParameter('kernel.bundles');

$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

if (isset($bundles['SonataBlockBundle'], $bundles['KnpMenuBundle'])) {
$loader->load('blocks.xml');
Expand Down Expand Up @@ -117,15 +118,15 @@ protected function fixConfiguration(array $config)
$sitemap['query'] = $sitemap['query'] ?? false;

if (false === $sitemap['route']) {
throw new \RuntimeException('Route cannot be empty, please review the sonata_seo.sitemap configuration');
throw new RuntimeException('Route cannot be empty, please review the sonata_seo.sitemap configuration');
}

if (false === $sitemap['query']) {
throw new \RuntimeException('Query cannot be empty, please review the sonata_seo.sitemap configuration');
throw new RuntimeException('Query cannot be empty, please review the sonata_seo.sitemap configuration');
}

if (false === $sitemap['parameters']) {
throw new \RuntimeException('Route\'s parameters cannot be empty, please review the sonata_seo.sitemap configuration');
throw new RuntimeException('Route\'s parameters cannot be empty, please review the sonata_seo.sitemap configuration');
}

$config['sitemap']['doctrine_orm'][$pos] = $sitemap;
Expand All @@ -143,7 +144,7 @@ protected function fixConfiguration(array $config)
$sitemap['types'] = $sitemap['types'] ?? [];

if (!isset($sitemap['id'])) {
throw new \RuntimeException('Service id must to be defined, please review the sonata_seo.sitemap configuration');
throw new RuntimeException('Service id must to be defined, please review the sonata_seo.sitemap configuration');
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Event/BreadcrumbListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
*
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class BreadcrumbListener
final class BreadcrumbListener
{
/**
* @var array
Expand Down
6 changes: 4 additions & 2 deletions src/Seo/SeoPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@

namespace Sonata\SeoBundle\Seo;

use RuntimeException;

/**
* http://en.wikipedia.org/wiki/Meta_element.
*/
class SeoPage implements SeoPageInterface
final class SeoPage implements SeoPageInterface
{
/**
* @var string
Expand Down Expand Up @@ -133,7 +135,7 @@ public function setMetas(array $metadatas)

foreach ($metadatas as $type => $metas) {
if (!\is_array($metas)) {
throw new \RuntimeException('$metas must be an array');
throw new RuntimeException('$metas must be an array');
}

foreach ($metas as $name => $meta) {
Expand Down
8 changes: 5 additions & 3 deletions src/Sitemap/SourceManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@

namespace Sonata\SeoBundle\Sitemap;

use ArrayIterator;
use Sonata\Exporter\Source\ChainSourceIterator;
use Sonata\Exporter\Source\SourceIteratorInterface;
use stdClass;

/**
* Manager several chain source iterator grouped.
*/
class SourceManager implements SourceIteratorInterface
final class SourceManager implements SourceIteratorInterface
{
/**
* @var \ArrayIterator
Expand All @@ -28,7 +30,7 @@ class SourceManager implements SourceIteratorInterface

public function __construct()
{
$this->sources = new \ArrayIterator();
$this->sources = new ArrayIterator();
}

/**
Expand All @@ -39,7 +41,7 @@ public function __construct()
public function addSource($group, SourceIteratorInterface $source, array $types = []): void
{
if (!isset($this->sources[$group])) {
$this->sources[$group] = new \stdClass();
$this->sources[$group] = new stdClass();

$this->sources[$group]->sources = new ChainSourceIterator();
$this->sources[$group]->types = [];
Expand Down
2 changes: 1 addition & 1 deletion src/SonataSeoBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class SonataSeoBundle extends Bundle
final class SonataSeoBundle extends Bundle
{
public function build(ContainerBuilder $container): void
{
Expand Down
2 changes: 1 addition & 1 deletion src/Twig/Extension/SeoExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class SeoExtension extends AbstractExtension
final class SeoExtension extends AbstractExtension
{
/**
* @var SeoPageInterface
Expand Down
4 changes: 2 additions & 2 deletions tests/Block/Breadcrumb/BreadcrumbTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
use Sonata\SeoBundle\Block\Breadcrumb\BaseBreadcrumbMenuBlockService;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;

class BreadcrumbMenuBlockService_Test extends BaseBreadcrumbMenuBlockService
final class BreadcrumbMenuBlockService_Test extends BaseBreadcrumbMenuBlockService
{
}

/**
* @author Sylvain Deloux <sylvain.deloux@ekino.com>
*/
class BreadcrumbTest extends AbstractBlockServiceTestCase
final class BreadcrumbTest extends AbstractBlockServiceTestCase
{
public function testBlockService(): void
{
Expand Down
2 changes: 1 addition & 1 deletion tests/Block/Social/FacebookLikeBoxBlockServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use Sonata\BlockBundle\Util\OptionsResolver;
use Sonata\SeoBundle\Block\Social\FacebookLikeBoxBlockService;

class FacebookLikeBoxBlockServiceTest extends AbstractBlockServiceTestCase
final class FacebookLikeBoxBlockServiceTest extends AbstractBlockServiceTestCase
{
public function testService(): void
{
Expand Down
2 changes: 1 addition & 1 deletion tests/Block/Social/FacebookLikeButtonBlockServiceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use Sonata\BlockBundle\Util\OptionsResolver;
use Sonata\SeoBundle\Block\Social\FacebookLikeButtonBlockService;

class FacebookLikeButtonBlockServiceTest extends AbstractBlockServiceTestCase
final class FacebookLikeButtonBlockServiceTest extends AbstractBlockServiceTestCase
{
public function testService(): void
{
Expand Down

0 comments on commit dd0ea1d

Please sign in to comment.