mirror of
https://github.com/KnpLabs/KnpMarkdownBundle.git
synced 2024-05-03 22:23:16 +02:00
Removing MarkdownTwigExtension dependency to MarkdownHelper
This allows the Twig extension to be used without the templating component. This also introduces a new integration test as a sanity check that all the configuration / compiler pass was setup correctly.
This commit is contained in:
parent
27d6c8c866
commit
c5f5046c8e
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ phpunit.xml
|
|||
vendor/*
|
||||
!vendor/parser
|
||||
composer.lock
|
||||
Tests/fixtures/app/cache
|
||||
|
|
|
@ -10,7 +10,7 @@ class ParsersCompilerPass implements CompilerPassInterface
|
|||
{
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('templating.helper.markdown')) {
|
||||
if (!$container->hasDefinition('markdown.parser.parser_manager')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ class ParsersCompilerPass implements CompilerPassInterface
|
|||
$defaultAlias = isset($defaultAlias['alias']) ? $defaultAlias['alias'] : null;
|
||||
}
|
||||
|
||||
$definition = $container->getDefinition('templating.helper.markdown');
|
||||
$definition = $container->getDefinition('markdown.parser.parser_manager');
|
||||
if (empty($defaultAlias)) {
|
||||
$definition->addMethodCall('addParser', array(new Reference('markdown.parser'), 'default'));
|
||||
}
|
||||
|
|
|
@ -2,24 +2,17 @@
|
|||
|
||||
namespace Knp\Bundle\MarkdownBundle\Helper;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||
use Symfony\Component\Templating\Helper\HelperInterface;
|
||||
use Knp\Bundle\MarkdownBundle\MarkdownParserInterface;
|
||||
|
||||
class MarkdownHelper implements HelperInterface
|
||||
{
|
||||
/**
|
||||
* @var MarkdownParserInterface[]
|
||||
*/
|
||||
private $parsers = array();
|
||||
private $parserManager;
|
||||
private $charset = 'UTF-8';
|
||||
|
||||
/**
|
||||
* @param MarkdownParserInterface $parser
|
||||
* @param string $alias
|
||||
*/
|
||||
public function addParser(MarkdownParserInterface $parser, $alias)
|
||||
public function __construct(ParserManager $parserManager)
|
||||
{
|
||||
$this->parsers[$alias] = $parser;
|
||||
$this->parserManager = $parserManager;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -34,17 +27,7 @@ class MarkdownHelper implements HelperInterface
|
|||
*/
|
||||
public function transform($markdownText, $parserName = null)
|
||||
{
|
||||
if (null === $parserName) {
|
||||
$parserName = 'default';
|
||||
}
|
||||
|
||||
if (!isset($this->parsers[$parserName])) {
|
||||
throw new \RuntimeException(sprintf('Unknown parser selected ("%s"), available are: %s', $parserName, implode(', ', array_keys($this->parsers))));
|
||||
}
|
||||
|
||||
$parser = $this->parsers[$parserName];
|
||||
|
||||
return $parser->transformMarkdown($markdownText);
|
||||
return $this->parserManager->transform($markdownText, $parserName);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
47
Parser/ParserManager.php
Normal file
47
Parser/ParserManager.php
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
namespace Knp\Bundle\MarkdownBundle\Parser;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\MarkdownParserInterface;
|
||||
|
||||
class ParserManager
|
||||
{
|
||||
/**
|
||||
* @var MarkdownParserInterface[]
|
||||
*/
|
||||
private $parsers = array();
|
||||
|
||||
/**
|
||||
* @param MarkdownParserInterface $parser
|
||||
* @param string $alias
|
||||
*/
|
||||
public function addParser(MarkdownParserInterface $parser, $alias)
|
||||
{
|
||||
$this->parsers[$alias] = $parser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transforms markdown syntax to HTML
|
||||
*
|
||||
* @param string $markdownText The markdown syntax text
|
||||
* @param null|string $parserName
|
||||
*
|
||||
* @return string The HTML code
|
||||
*
|
||||
* @throws \RuntimeException
|
||||
*/
|
||||
public function transform($markdownText, $parserName = null)
|
||||
{
|
||||
if (null === $parserName) {
|
||||
$parserName = 'default';
|
||||
}
|
||||
|
||||
if (!isset($this->parsers[$parserName])) {
|
||||
throw new \RuntimeException(sprintf('Unknown parser selected ("%s"), available are: %s', $parserName, implode(', ', array_keys($this->parsers))));
|
||||
}
|
||||
|
||||
$parser = $this->parsers[$parserName];
|
||||
|
||||
return $parser->transformMarkdown($markdownText);
|
||||
}
|
||||
}
|
|
@ -19,5 +19,8 @@
|
|||
<service id="markdown.parser.flavored" class="Knp\Bundle\MarkdownBundle\Parser\Preset\Flavored" public="false">
|
||||
<tag name="markdown.parser" alias="flavored" />
|
||||
</service>
|
||||
|
||||
<!-- parsers will be injected with a compiler pass -->
|
||||
<service id="markdown.parser.parser_manager" class="Knp\Bundle\MarkdownBundle\Parser\ParserManager" />
|
||||
</services>
|
||||
</container>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<services>
|
||||
<service id="twig.extension.exercise.twig" class="Knp\Bundle\MarkdownBundle\Twig\Extension\MarkdownTwigExtension" public="false">
|
||||
<argument type="service" id="templating.helper.markdown" />
|
||||
<argument type="service" id="markdown.parser.parser_manager" />
|
||||
<tag name="twig.extension" />
|
||||
</service>
|
||||
</services>
|
||||
|
|
27
Tests/Parser/ParserManagerTest.php
Normal file
27
Tests/Parser/ParserManagerTest.php
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace Knp\Bundle\MarkdownBundle\Tests\Parser;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Tests\fixtures\app\TestKernel;
|
||||
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||
|
||||
class ParserManagerTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testIntegration()
|
||||
{
|
||||
require_once __DIR__.'/../fixtures/app/TestKernel.php';
|
||||
|
||||
$kernel = new TestKernel('dev', true);
|
||||
$kernel->boot();
|
||||
$container = $kernel->getContainer();
|
||||
|
||||
/** @var ParserManager $parserManager */
|
||||
$parserManager = $container->get('markdown.parser.parser_manager');
|
||||
|
||||
$actual = $parserManager->transform('*hi*');
|
||||
$this->assertEquals("<p><em>hi</em></p>\n", $actual, 'There is a default parser');
|
||||
|
||||
$actual = $parserManager->transform('*hi*', 'light');
|
||||
$this->assertEquals("<p><em>hi</em></p>\n", $actual, 'Specific parsers are registered');
|
||||
}
|
||||
}
|
30
Tests/fixtures/app/TestKernel.php
vendored
Normal file
30
Tests/fixtures/app/TestKernel.php
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
namespace Knp\Bundle\MarkdownBundle\Tests\fixtures\app;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\KnpMarkdownBundle;
|
||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
|
||||
class TestKernel extends Kernel
|
||||
{
|
||||
public function registerBundles()
|
||||
{
|
||||
return array(
|
||||
new FrameworkBundle(),
|
||||
new KnpMarkdownBundle(),
|
||||
);
|
||||
}
|
||||
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load(function(ContainerBuilder $c) {
|
||||
$c->loadFromExtension('framework', array(
|
||||
'secret' => 'MarkdownTesting'
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
namespace Knp\Bundle\MarkdownBundle\Twig\Extension;
|
||||
|
||||
use Knp\Bundle\MarkdownBundle\Helper\MarkdownHelper;
|
||||
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||
|
||||
class MarkdownTwigExtension extends \Twig_Extension
|
||||
{
|
||||
protected $helper;
|
||||
protected $parserManager;
|
||||
|
||||
public function __construct(MarkdownHelper $helper)
|
||||
public function __construct(ParserManager $parserManager)
|
||||
{
|
||||
$this->helper = $helper;
|
||||
$this->parserManager = $parserManager;
|
||||
}
|
||||
|
||||
public function getFilters()
|
||||
|
@ -22,7 +22,7 @@ class MarkdownTwigExtension extends \Twig_Extension
|
|||
|
||||
public function markdown($text, $parser = null)
|
||||
{
|
||||
return $this->helper->transform($text, $parser);
|
||||
return $this->parserManager->transform($text, $parser);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
|
|
Loading…
Reference in a new issue