Skip to content

Commit

Permalink
Added Symfony 2.8 as min compat.
Browse files Browse the repository at this point in the history
- Removed BaseBundle as compat to make sure Symfony min compat
  • Loading branch information
mmoreram committed Jan 25, 2018
1 parent 7fc82b9 commit bf66c52
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 113 deletions.
1 change: 1 addition & 0 deletions .php_cs.cache
@@ -0,0 +1 @@
{"php":"7.1.12-1+ubuntu16.04.1+deb.sury.org+1","version":"2.10.0:v2.10.0#513a3765b56dd029175f9f32995566657ee89dda","rules":{"blank_line_after_namespace":true,"braces":{"allow_single_line_closure":true},"class_definition":{"singleLine":true},"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_constants":true,"lowercase_keywords":true,"method_argument_space":true,"no_break_comment":true,"no_closing_tag":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":true,"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"visibility_required":true,"encoding":true,"full_opening_tag":true,"binary_operator_spaces":true,"blank_line_after_opening_tag":true,"blank_line_before_statement":{"statements":["return"]},"cast_spaces":true,"class_attributes_separation":{"elements":["method"]},"concat_space":{"spacing":"none"},"declare_equal_normalize":true,"function_typehint_space":true,"include":true,"increment_style":true,"lowercase_cast":true,"magic_constant_casing":true,"native_function_casing":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_blank_lines_after_phpdoc":true,"no_empty_comment":true,"no_empty_phpdoc":true,"no_empty_statement":true,"no_extra_blank_lines":{"tokens":["curly_brace_block","extra","parenthesis_brace_block","square_brace_block","throw","use"]},"no_leading_import_slash":true,"no_leading_namespace_whitespace":true,"no_mixed_echo_print":{"use":"echo"},"no_multiline_whitespace_around_double_arrow":true,"no_short_bool_cast":true,"no_singleline_whitespace_before_semicolons":true,"no_spaces_around_offset":true,"no_trailing_comma_in_list_call":true,"no_trailing_comma_in_singleline_array":true,"no_unneeded_control_parentheses":true,"no_unneeded_curly_braces":true,"no_unneeded_final_method":true,"no_unused_imports":true,"no_whitespace_before_comma_in_array":true,"no_whitespace_in_blank_line":true,"normalize_index_brace":true,"object_operator_without_whitespace":true,"php_unit_fqcn_annotation":true,"phpdoc_align":{"tags":["method","param","property","return","throws","type","var"]},"phpdoc_annotation_without_dot":true,"phpdoc_indent":true,"phpdoc_inline_tag":true,"phpdoc_no_access":true,"phpdoc_no_alias_tag":true,"phpdoc_no_empty_return":true,"phpdoc_no_package":true,"phpdoc_no_useless_inheritdoc":true,"phpdoc_return_self_reference":true,"phpdoc_scalar":true,"phpdoc_separation":true,"phpdoc_single_line_var_spacing":true,"phpdoc_summary":true,"phpdoc_to_comment":true,"phpdoc_trim":true,"phpdoc_types":true,"phpdoc_var_without_name":true,"protected_to_private":true,"return_type_declaration":true,"self_accessor":true,"semicolon_after_instruction":true,"short_scalar_cast":true,"single_blank_line_before_namespace":true,"single_line_comment_style":{"comment_types":["hash"]},"single_quote":true,"space_after_semicolon":{"remove_in_empty_for_expressions":true},"standardize_not_equals":true,"ternary_operator_spaces":true,"trailing_comma_in_multiline_array":true,"trim_array_spaces":true,"unary_operator_spaces":true,"whitespace_after_comma_in_array":true,"yoda_style":true},"hashes":{"Translator\/AggregationTranslator.php":2950948888,"ApisearchBundle.php":452340142,"Twig\/MethodAccessorExtension.php":1937766330,"Twig\/AggregationTranslationExtension.php":1168064907,"Twig\/UrlBuilderExtension.php":1238295593,"Command\/ImportIndexCommand.php":327946495,"Command\/ResetIndexCommand.php":38662220,"Command\/ExportIndexCommand.php":3413220554,"DependencyInjection\/CompilerPass\/TagCompilerPass.php":1027465310,"DependencyInjection\/CompilerPass\/WriteTransformerCompilerPass.php":4262762390,"DependencyInjection\/CompilerPass\/ExporterCompilerPass.php":2367194309,"DependencyInjection\/CompilerPass\/RepositoryCompilerPass.php":2784131701,"DependencyInjection\/CompilerPass\/ReadTransformerCompilerPass.php":3000249833,"DependencyInjection\/ApisearchConfiguration.php":1832068593,"DependencyInjection\/ApisearchExtension.php":3526071962}}
46 changes: 15 additions & 31 deletions ApisearchBundle.php
Expand Up @@ -21,53 +21,37 @@
use Apisearch\DependencyInjection\CompilerPass\ReadTransformerCompilerPass;
use Apisearch\DependencyInjection\CompilerPass\RepositoryCompilerPass;
use Apisearch\DependencyInjection\CompilerPass\WriteTransformerCompilerPass;
use Mmoreram\BaseBundle\BaseBundle;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\HttpKernel\Bundle\Bundle;

/**
* Class ApisearchBundle.
*/
class ApisearchBundle extends BaseBundle
class ApisearchBundle extends Bundle
{
/**
* Returns the bundle's container extension.
* Builds bundle.
*
* @return ExtensionInterface|null The container extension
* @param ContainerBuilder $container Container
*/
public function getContainerExtension()
public function build(ContainerBuilder $container)
{
return new ApisearchExtension();
}
parent::build($container);

/**
* Return all bundle dependencies.
*
* Values can be a simple bundle namespace or its instance
*
* @return array
*/
public static function getBundleDependencies(KernelInterface $kernel): array
{
return [
FrameworkBundle::class,
];
$container->addCompilerPass(new RepositoryCompilerPass());
$container->addCompilerPass(new ReadTransformerCompilerPass());
$container->addCompilerPass(new WriteTransformerCompilerPass());
$container->addCompilerPass(new ExporterCompilerPass());
}

/**
* Return a CompilerPass instance array.
* Returns the bundle's container extension.
*
* @return CompilerPassInterface[]
* @return ExtensionInterface|null The container extension
*/
public function getCompilerPasses(): array
public function getContainerExtension()
{
return [
new RepositoryCompilerPass(),
new ReadTransformerCompilerPass(),
new WriteTransformerCompilerPass(),
new ExporterCompilerPass(),
];
return new ApisearchExtension();
}
}
17 changes: 15 additions & 2 deletions DependencyInjection/ApisearchConfiguration.php
Expand Up @@ -16,14 +16,27 @@

namespace Apisearch\DependencyInjection;

use Mmoreram\BaseBundle\DependencyInjection\BaseConfiguration;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

/**
* File header placeholder.
*/
class ApisearchConfiguration extends BaseConfiguration
class ApisearchConfiguration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('apisearch');
$this->setupTree($rootNode);

return $treeBuilder;
}

/**
* Configure the root node.
*
Expand Down
109 changes: 35 additions & 74 deletions DependencyInjection/ApisearchExtension.php
Expand Up @@ -16,60 +16,30 @@

namespace Apisearch\DependencyInjection;

use Mmoreram\BaseBundle\DependencyInjection\BaseExtension;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

/**
* Class ApisearchExtension.
*/
class ApisearchExtension extends BaseExtension
class ApisearchExtension extends Extension implements PrependExtensionInterface
{
/**
* Returns the recommended alias to use in XML.
* Loads a specific configuration.
*
* This alias is also the mandatory prefix to use when using YAML.
*
* @return string The alias
*/
public function getAlias()
{
return 'apisearch';
}

/**
* Get the Config file location.
*
* @return string
* @throws \InvalidArgumentException When provided tag is not defined in this extension
*/
protected function getConfigFilesLocation(): string
public function load(array $configs, ContainerBuilder $container)
{
return __DIR__.'/../Resources/config';
}
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);

/**
* Config files to load.
*
* Each array position can be a simple file name if must be loaded always,
* or an array, with the filename in the first position, and a boolean in
* the second one.
*
* As a parameter, this method receives all loaded configuration, to allow
* setting this boolean value from a configuration value.
*
* return array(
* 'file1.yml',
* 'file2.yml',
* ['file3.yml', $config['my_boolean'],
* ...
* );
*
* @param array $config Config definitions
*
* @return array Config files
*/
protected function getConfigFiles(array $config): array
{
return [
$confiFiles = [
'commands',
'repositories',
'url',
Expand All @@ -78,42 +48,33 @@ protected function getConfigFiles(array $config): array
'exporters',
'translator',
];
}

/**
* Load Parametrization definition.
*
* return array(
* 'parameter1' => $config['parameter1'],
* 'parameter2' => $config['parameter2'],
* ...
* );
*
* @param array $config Bundles config values
*
* @return array
*/
protected function getParametrizationValues(array $config): array
{
return [
'apisearch.repository_configuration' => $config['repositories'],
];
foreach ($confiFiles as $configFile) {
$loader->load("$configFile.yml");
}
}

/**
* Return a new Configuration instance.
* Allow an extension to prepend the extension configurations.
*
* If object returned by this method is an instance of
* ConfigurationInterface, extension will use the Configuration to read all
* bundle config definitions.
*
* Also will call getParametrizationValues method to load some config values
* to internal parameters.
*
* @return ConfigurationInterface|null
* @param ContainerBuilder $container
*/
protected function getConfigurationInstance(): ? ConfigurationInterface
public function prepend(ContainerBuilder $container)
{
return new ApisearchConfiguration($this->getAlias());
$configurationInstance = new ApisearchConfiguration();
$configuration = $container->getExtensionConfig('apisearch');
$configuration = $this->processConfiguration(
$configurationInstance,
$configuration
);
$configuration = $container
->getParameterBag()
->resolveValue($configuration);

$container
->getParameterBag()
->add([
'apisearch.repository_configuration' => $configuration['repositories'],
]);
}
}
75 changes: 75 additions & 0 deletions DependencyInjection/CompilerPass/TagCompilerPass.php
@@ -0,0 +1,75 @@
<?php

/*
* This file is part of the Search PHP Bundle.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* Feel free to edit as you please, and have fun.
*
* @author Marc Morera <yuhu@mmoreram.com>
* @author PuntMig Technologies
*/

declare(strict_types=1);

namespace Apisearch\DependencyInjection\CompilerPass;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
* Class TagCompilerPass.
*/
abstract class TagCompilerPass implements CompilerPassInterface
{
/**
* You can modify the container here before it is dumped to PHP code.
*
* @param ContainerBuilder $container
*/
public function process(ContainerBuilder $container)
{
if (!$container->has($this->getCollectorServiceName())) {
return;
}

$definition = $container->findDefinition(
$this->getCollectorServiceName()
);

$taggedServices = $container->findTaggedServiceIds($this->getTagName());

/*
* Per each service, add a new method call reference
*/
foreach ($taggedServices as $service => $tags) {
$definition->addMethodCall(
$this->getCollectorMethodName(),
[$service]
);
}
}

/**
* Get collector service name.
*
* @return string Collector service name
*/
abstract public function getCollectorServiceName(): string;

/**
* Get collector method name.
*
* @return string Collector method name
*/
abstract public function getCollectorMethodName(): string;

/**
* Get tag name.
*
* @return string Tag name
*/
abstract public function getTagName(): string;
}
10 changes: 4 additions & 6 deletions composer.json
Expand Up @@ -14,15 +14,13 @@
],
"require": {
"php": ">=7.1",
"symfony/framework-bundle": "^3.0|^4.0",
"symfony/http-kernel": "^3.0|^4.0",
"mmoreram/base-bundle": "^1.0.7",
"mmoreram/symfony-bundle-dependencies": "^2.0.0",
"apisearch-io/php-client": "^0.1.5"
"symfony/framework-bundle": "^2.8|^3.0|^4.0",
"symfony/http-kernel": "^2.8|^3.0|^4.0",
"apisearch-io/php-client": "^0.1.6"
},
"suggested": {
"twig/twig": "In case you use Twig engine",
"symfony/translator": "^3.0|^4.0 in case you use Macros translations"
"symfony/translator": "^2.8|^3.0|^4.0 in case you use Macros translations"
},
"require-dev": {
"phpunit/phpunit": "^5.6.4",
Expand Down

0 comments on commit bf66c52

Please sign in to comment.