<?php
/*
* This file is part of the Alice package.
*
* (c) Nelmio <hello@nelm.io>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Nelmio\Alice\Bridge\Symfony\DependencyInjection;
use Nelmio\Alice\Throwable\Exception\InvalidArgumentExceptionFactory;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* @private
*/
final class Configuration implements ConfigurationInterface
{
/**
* @inheritdoc
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('nelmio_alice');
$rootNode
->children()
->scalarNode('locale')
->defaultValue('en_US')
->info('Default locale for the Faker Generator')
->validate()
->always($this->createStringValidatorClosure('nelmio_alice.locale'))
->end()
->end()
->scalarNode('seed')
->defaultValue(1)
->info('Value used make sure Faker generates data consistently across runs, set to null to disable.')
->validate()
->always(
function ($seed) {
if (null === $seed || (is_int($seed) && $seed > 0)) {
return $seed;
}
throw InvalidArgumentExceptionFactory::createForInvalidSeedConfigurationValue($seed);
}
)
->end()
->end()
->arrayNode('functions_blacklist')
->prototype('scalar')
->end()
->defaultValue(['current'])
->info(
'Some PHP native functions may conflict with Faker formatters. By default, PHP native '
.'functions are used over Faker formatters. If you want to change that, simply blacklist the '
.'PHP function.'
)
->validate()
->always(
function (array $value) {
foreach ($value as $item) {
if (false === is_string($item)) {
throw InvalidArgumentExceptionFactory::createForExpectedConfigurationArrayOfStringValue($item);
}
}
return $value;
}
)
->end()
->end()
->integerNode('loading_limit')
->defaultValue(5)
->info(
'Alice may do some recursion to resolve certain values. This parameter defines a limit which '
.'will stop the resolution once reached.'
)
->validate()
->always($this->createPositiveIntegerValidatorClosure())
->end()
->end()
->integerNode('max_unique_values_retry')
->defaultValue(150)
->info('Maximum number of time Alice can try to generate a unique value before stopping and failing.')
->validate()
->always($this->createPositiveIntegerValidatorClosure())
->end()
->end()
->end()
;
return $treeBuilder;
}
private function createStringValidatorClosure(): \Closure
{
return function ($value) {
if (is_string($value)) {
return $value;
}
throw InvalidArgumentExceptionFactory::createForExpectedConfigurationStringValue($value);
};
}
private function createPositiveIntegerValidatorClosure(): \Closure
{
return function ($value) {
if (is_int($value) && 0 < $value) {
return $value;
}
throw InvalidArgumentExceptionFactory::createForExpectedConfigurationPositiveIntegerValue($value);
};
}
}