From bf66c521e8d7e2de64cdb349fa6ae92d9d1f137a Mon Sep 17 00:00:00 2001 From: Marc Morera Date: Thu, 25 Jan 2018 13:40:50 +0100 Subject: [PATCH] Added Symfony 2.8 as min compat. - Removed BaseBundle as compat to make sure Symfony min compat --- .php_cs.cache | 1 + ApisearchBundle.php | 46 +++----- .../ApisearchConfiguration.php | 17 ++- DependencyInjection/ApisearchExtension.php | 109 ++++++------------ .../CompilerPass/TagCompilerPass.php | 75 ++++++++++++ composer.json | 10 +- 6 files changed, 145 insertions(+), 113 deletions(-) create mode 100644 .php_cs.cache create mode 100644 DependencyInjection/CompilerPass/TagCompilerPass.php diff --git a/.php_cs.cache b/.php_cs.cache new file mode 100644 index 0000000..a09c927 --- /dev/null +++ b/.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}} \ No newline at end of file diff --git a/ApisearchBundle.php b/ApisearchBundle.php index ec0bd67..bf67f01 100644 --- a/ApisearchBundle.php +++ b/ApisearchBundle.php @@ -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(); } } diff --git a/DependencyInjection/ApisearchConfiguration.php b/DependencyInjection/ApisearchConfiguration.php index ab5b608..0ca5cb7 100644 --- a/DependencyInjection/ApisearchConfiguration.php +++ b/DependencyInjection/ApisearchConfiguration.php @@ -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. * diff --git a/DependencyInjection/ApisearchExtension.php b/DependencyInjection/ApisearchExtension.php index dcb9a61..145906f 100644 --- a/DependencyInjection/ApisearchExtension.php +++ b/DependencyInjection/ApisearchExtension.php @@ -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', @@ -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'], + ]); } } diff --git a/DependencyInjection/CompilerPass/TagCompilerPass.php b/DependencyInjection/CompilerPass/TagCompilerPass.php new file mode 100644 index 0000000..6dc864c --- /dev/null +++ b/DependencyInjection/CompilerPass/TagCompilerPass.php @@ -0,0 +1,75 @@ + + * @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; +} diff --git a/composer.json b/composer.json index c9e8092..4c6f758 100644 --- a/composer.json +++ b/composer.json @@ -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",