Skip to content

Commit

Permalink
Merge pull request #4 from flint/configuration-loader
Browse files Browse the repository at this point in the history
add loader that processes configuration as symfony does
  • Loading branch information
henrikbjorn committed Nov 18, 2014
2 parents 4263445 + 02333a3 commit 6aadb3a
Show file tree
Hide file tree
Showing 11 changed files with 112 additions and 8 deletions.
1 change: 0 additions & 1 deletion spec/Tacker/ConfiguratorSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace spec\Tacker;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class ConfiguratorSpec extends ObjectBehavior
{
Expand Down
1 change: 0 additions & 1 deletion spec/Tacker/Loader/CacheLoaderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ class CacheLoaderSpec extends \PhpSpec\ObjectBehavior
{
/**
* @param Symfony\Component\Config\Loader\LoaderInterface $loader
* @param Tacker\Normalizer $normalizer
* @param Tacker\ResourceCollection $resources
*/
function let($loader, $resources)
Expand Down
1 change: 0 additions & 1 deletion spec/Tacker/Loader/IniFileLoaderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace spec\Tacker\Loader;

use Prophecy\Argument;
use Symfony\Component\Config\FileLocator;

class IniFileLoaderSpec extends \PhpSpec\ObjectBehavior
Expand Down
1 change: 0 additions & 1 deletion spec/Tacker/Loader/JsonFileLoaderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace spec\Tacker\Loader;

use Prophecy\Argument;
use Symfony\Component\Config\FileLocator;

class JsonFileLoaderSpec extends \PhpSpec\ObjectBehavior
Expand Down
1 change: 0 additions & 1 deletion spec/Tacker/Loader/NormalizerLoaderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace spec\Tacker\Loader;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class NormalizerLoaderSpec extends ObjectBehavior
{
Expand Down
51 changes: 51 additions & 0 deletions spec/Tacker/Loader/ProcessorLoaderSpec.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

namespace spec\Tacker\Loader;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;

class ProcessorLoaderSpec extends \PhpSpec\ObjectBehavior
{
/**
* @param Symfony\Component\Config\Loader\LoaderInterface $loader
* @param Symfony\Component\Config\Definition\ConfigurationInterface $configuration
*/
function let($loader, $configuration)
{
$this->beConstructedWith($loader, $configuration);
}

function it_is_initializable()
{
$this->shouldHaveType('Tacker\Loader\ProcessorLoader');
}

function it_processes_configuration($loader, $configuration)
{
$builder = new TreeBuilder;
$root = $builder->root('');
$root
->children()
->booleanNode('auto_connect')
->defaultTrue()
->end()
->end()
;


$configuration->getConfigTreeBuilder()->willReturn($builder);

$loader->load('file', null)->willReturn([]);

$this->load('file')->shouldReturn(['auto_connect' => true]);
}

function it_delegates_supports_to_loader($loader)
{
$loader->supports('php', null)->willReturn(false)->shouldBeCalled();
$loader->supports('yml', null)->willReturn(true)->shouldBeCalled();

$this->supports('php')->shouldReturn(false);
$this->supports('yml')->shouldReturn(true);
}
}
1 change: 0 additions & 1 deletion spec/Tacker/Loader/YamlFileLoaderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace spec\Tacker\Loader;

use Prophecy\Argument;
use Symfony\Component\Config\FileLocator;

class YamlFileLoaderSpec extends \PhpSpec\ObjectBehavior
Expand Down
1 change: 0 additions & 1 deletion spec/Tacker/LoaderBuilderSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace spec\Tacker;

use PhpSpec\ObjectBehavior;
use Prophecy\Argument;

class LoaderBuilderSpec extends ObjectBehavior
{
Expand Down
3 changes: 3 additions & 0 deletions src/Loader/CacheLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ public function getCacheDir()
return $this->cacheDir;
}

/**
* @param boolean $debug
*/
public function setDebug($debug)
{
$this->debug = $debug;
Expand Down
38 changes: 38 additions & 0 deletions src/Loader/ProcessorLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

namespace Tacker\Loader;

use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\Loader\LoaderInterface;

class ProcessorLoader extends \Symfony\Component\Config\Loader\Loader
{
private $loader;
private $configuration;

public function __construct(LoaderInterface $loader, ConfigurationInterface $configuration)
{
$this->loader = $loader;
$this->configuration = $configuration;
}

public function load($resource, $type = null)
{
$parameters = $this->loader->load($resource, $type);

return $this->processConfiguration($parameters);
}

public function supports($resource, $type = null)
{
return $this->loader->supports($resource, $type);
}

private function processConfiguration(array $parameters)
{
$processor = new Processor;

return $processor->processConfiguration($this->configuration, [$parameters]);
}
}
21 changes: 20 additions & 1 deletion src/LoaderBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
namespace Tacker;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Loader\LoaderResolver;
use Symfony\Component\Config\Loader\DelegatingLoader;
use Tacker\Loader\CacheLoader;
use Tacker\Loader\IniFileLoader;
use Tacker\Loader\JsonFileLoader;
use Tacker\Loader\NormalizerLoader;
use Tacker\Loader\ProcessorLoader;
use Tacker\Loader\PhpFileLoader;
use Tacker\Loader\YamlFileLoader;
use Tacker\Normalizer\ChainNormalizer;
Expand All @@ -25,6 +27,7 @@ final class LoaderBuilder
private $normalizer;
private $resolver;
private $resources;
private $configuration;
private $locator;
private $debug;
private $cacheDir;
Expand Down Expand Up @@ -85,6 +88,11 @@ public function setDebug($debug)
return $this;
}

public function setConfiguration(ConfigurationInterface $configuration)
{
$this->configuration = $configuration;
}

public function build()
{
if (false == $this->resolverConfigured) {
Expand All @@ -95,7 +103,7 @@ public function build()
$this->addDefaultNormalizers();
}

$loader = new CacheLoader($this->createNormalizerLoader(), $this->resources);
$loader = new CacheLoader($this->createLoaderGraph(), $this->resources);
$loader->setCacheDir($this->cacheDir);
$loader->setDebug($this->debug);

Expand Down Expand Up @@ -127,6 +135,17 @@ public function addDefaultNormalizers()
return $this;
}

private function createLoaderGraph()
{
$loader = $this->createNormalizerLoader();

if ($this->configuration) {
return new ProcessorLoader($loader, $this->configuration);
}

return $loader;
}

private function createNormalizerLoader()
{
return new NormalizerLoader(new DelegatingLoader($this->resolver), $this->normalizer);
Expand Down

0 comments on commit 6aadb3a

Please sign in to comment.