Skip to content

Commit

Permalink
Add generate:plugin:rules:dataprocessor command (#3828)
Browse files Browse the repository at this point in the history
  • Loading branch information
LOBsTerr committed Apr 6, 2019
1 parent a626074 commit a0714c5
Show file tree
Hide file tree
Showing 5 changed files with 273 additions and 0 deletions.
5 changes: 5 additions & 0 deletions config/services/generate.yml
Expand Up @@ -129,6 +129,11 @@ services:
arguments: ['@console.extension_manager', '@console.plugin_rules_action_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
tags:
- { name: drupal.command }
console.generate_plugin_rules_dataprocessor:
class: Drupal\Console\Command\Generate\PluginRulesDataprocessorCommand
arguments: ['@console.extension_manager', '@console.plugin_rules_dataprocessor_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
tags:
- { name: drupal.command }
console.generate_plugin_skeleton:
class: Drupal\Console\Command\Generate\PluginSkeletonCommand
arguments: ['@console.extension_manager', '@console.plugin_skeleton_generator','@console.string_converter', '@console.validator', '@console.chain_queue']
Expand Down
5 changes: 5 additions & 0 deletions config/services/generator.yml
Expand Up @@ -126,6 +126,11 @@ services:
arguments: ['@console.extension_manager']
tags:
- { name: drupal.generator }
console.plugin_rules_dataprocessor_generator:
class: Drupal\Console\Generator\PluginRulesDataprocessorGenerator
arguments: ['@console.extension_manager']
tags:
- { name: drupal.generator }
console.plugin_skeleton_generator:
class: Drupal\Console\Generator\PluginSkeletonGenerator
arguments: ['@console.extension_manager']
Expand Down
184 changes: 184 additions & 0 deletions src/Command/Generate/PluginRulesDataprocessorCommand.php
@@ -0,0 +1,184 @@
<?php

/**
* @file
* Contains \Drupal\Console\Command\Generate\PluginRulesActionCommand.
*/

namespace Drupal\Console\Command\Generate;

use Drupal\Console\Command\Shared\ConfirmationTrait;
use Drupal\Console\Command\Shared\ModuleTrait;
use Drupal\Console\Command\Shared\ServicesTrait;
use Drupal\Console\Core\Command\Command;
use Drupal\Console\Core\Utils\StringConverter;
use Drupal\Console\Core\Utils\ChainQueue;
use Drupal\Console\Extension\Manager;
use Drupal\Console\Generator\PluginRulesDataprocessorGenerator;
use Drupal\Console\Utils\Validator;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

/**
* Class PluginRulesDataprocessorCommand
*
* @package Drupal\Console\Command\Generate
*/
class PluginRulesDataprocessorCommand extends Command
{

use ConfirmationTrait;
use ModuleTrait;
use ServicesTrait;

/**
* @var Manager
*/
protected $extensionManager;

/**
* @var PluginRulesDataprocessorGenerator
*/
protected $generator;

/**
* @var StringConverter
*/
protected $stringConverter;

/**
* @var Validator
*/
protected $validator;

/**
* @var ChainQueue
*/
protected $chainQueue;


/**
* PluginRulesDataprocessorCommand constructor.
*
* @param Manager $extensionManager
* @param PluginRulesDataprocessorGenerator $generator
* @param StringConverter $stringConverter
* @param Validator $validator
* @param ChainQueue $chainQueue
*/
public function __construct(
Manager $extensionManager,
PluginRulesDataprocessorGenerator $generator,
StringConverter $stringConverter,
Validator $validator,
ChainQueue $chainQueue
) {
$this->extensionManager = $extensionManager;
$this->generator = $generator;
$this->stringConverter = $stringConverter;
$this->validator = $validator;
$this->chainQueue = $chainQueue;
parent::__construct();
}

protected function configure()
{
$this
->setName('generate:plugin:rules:dataprocessor')
->setDescription($this->trans('commands.generate.plugin.rules.dataprocessor.description'))
->setHelp($this->trans('commands.generate.plugin.rules.dataprocessor.help'))
->addOption(
'module',
null,
InputOption::VALUE_REQUIRED,
$this->trans('commands.common.options.module')
)
->addOption(
'class',
null,
InputOption::VALUE_OPTIONAL,
$this->trans('commands.generate.plugin.rules.dataprocessor.options.class')
)
->addOption(
'label',
null,
InputOption::VALUE_OPTIONAL,
$this->trans('commands.generate.plugin.rules.dataprocessor.options.label')
)
->addOption(
'plugin-id',
null,
InputOption::VALUE_OPTIONAL,
$this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id')
)
->setAliases(['gprd']);
}

/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
// @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
if (!$this->confirmOperation()) {
return 1;
}

$module = $input->getOption('module');
$class_name = $this->validator->validateClassName($input->getOption('class'));
$label = $input->getOption('label');
$plugin_id = $input->getOption('plugin-id');

$this->generator->generate([
'module' => $module,
'class_name' => $class_name,
'label' => $label,
'plugin_id' => $plugin_id,
]);

$this->chainQueue->addCommand('cache:rebuild',
['cache' => 'discovery']);

return 0;
}

protected function interact(InputInterface $input, OutputInterface $output)
{
// --module option
$this->getModuleOption();

// --class option
$class_name = $input->getOption('class');
if (!$class_name) {
$class_name = $this->getIo()->ask(
$this->trans('commands.generate.plugin.rules.dataprocessor.options.class'),
'DefaultDataprocessor',
function ($class_name) {
return $this->validator->validateClassName($class_name);
}
);
$input->setOption('class', $class_name);
}

// --label option
$label = $input->getOption('label');
if (!$label) {
$label = $this->getIo()->ask(
$this->trans('commands.generate.plugin.rules.dataprocessor.options.label'),
$this->stringConverter->camelCaseToHuman($class_name)
);
$input->setOption('label', $label);
}

// --plugin-id option
$plugin_id = $input->getOption('plugin-id');
if (!$plugin_id) {
$plugin_id = $this->getIo()->ask(
$this->trans('commands.generate.plugin.rules.dataprocessor.options.plugin-id'),
$this->stringConverter->camelCaseToUnderscore($class_name)
);
$input->setOption('plugin-id', $plugin_id);
}
}
}
45 changes: 45 additions & 0 deletions src/Generator/PluginRulesDataprocessorGenerator.php
@@ -0,0 +1,45 @@
<?php

/**
* @file
* Contains \Drupal\Console\Generator\PluginBlockGenerator.
*/

namespace Drupal\Console\Generator;

use Drupal\Console\Core\Generator\Generator;
use Drupal\Console\Extension\Manager;

class PluginRulesDataprocessorGenerator extends Generator
{
/**
* @var Manager
*/
protected $extensionManager;

/**
* PluginRulesDataprocessorGenerator constructor.
*
* @param Manager $extensionManager
*/
public function __construct(
Manager $extensionManager
) {
$this->extensionManager = $extensionManager;
}

/**
* {@inheritdoc}
*/
public function generate(array $parameters)
{
$module = $parameters['module'];
$class_name = $parameters['class_name'];

$this->renderFile(
'module/src/Plugin/RulesDataProcessor/rulesdataprocessor.php.twig',
$this->extensionManager->getPluginPath($module, 'RulesDataProcessor') . '/' . $class_name . '.php',
$parameters
);
}
}
@@ -0,0 +1,34 @@
{% extends "base/class.php.twig" %}

{% block file_path %}
Drupal\{{module}}\Plugin\RulesDataProcessor\{{class_name}}.
{% endblock %}

{% block namespace_class %}
namespace Drupal\{{module}}\Plugin\RulesDataProcessor;
{% endblock %}

{% block use_class %}
use Drupal\Core\Plugin\PluginBase;
use Drupal\rules\Context\DataProcessorInterface;
use Drupal\rules\Engine\ExecutionStateInterface;
{% endblock %}

{% block class_declaration %}
/**
* Provides a '{{class_name}}' action.
*
* @RulesDataProcessor(
* id = "{{plugin_id}}",
* label = @Translation("{{label}}")
* )
*/
class {{class_name}} extends PluginBase implements DataProcessorInterface {% endblock %}
{% block class_methods %}
/**
* {@inheritdoc}
*/
public function process($value, ExecutionStateInterface $rules_state) {
// Insert code here.
}
{% endblock %}

0 comments on commit a0714c5

Please sign in to comment.