Skip to content

Commit

Permalink
[console] Add remove message feature. (#258)
Browse files Browse the repository at this point in the history
* [console] Add remove method.

* [console] Add removableBy argument.

* [console] Add RemoveMessagesListener class.

* [console] Register RemoveMessagesListener class.

* [console] Remove translator service from RemoveMessagesListener class.
  • Loading branch information
jmolivas committed Dec 8, 2017
1 parent 1fe275d commit 23383af
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 7 deletions.
7 changes: 7 additions & 0 deletions src/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Drupal\Console\Core;

use Drupal\Console\Core\EventSubscriber\RemoveMessagesListener;
use Drupal\Console\Core\EventSubscriber\ShowGenerateCountCodeLinesListener;
use Drupal\Console\Core\Utils\TranslatorManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
Expand Down Expand Up @@ -267,6 +268,12 @@ private function registerEvents()
)
);

$dispatcher->addSubscriber(
new RemoveMessagesListener(
$this->container->get('console.message_manager')
)
);

$this->setDispatcher($dispatcher);
$this->eventRegistered = true;
}
Expand Down
64 changes: 64 additions & 0 deletions src/EventSubscriber/RemoveMessagesListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

/**
* @file
* Contains \Drupal\Console\Core\EventSubscriber\RemoveMessagesListener.
*/

namespace Drupal\Console\Core\EventSubscriber;

use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\Console\Event\ConsoleTerminateEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Drupal\Console\Core\Command\Command;
use Drupal\Console\Core\Utils\TranslatorManagerInterface;
use Drupal\Console\Core\Utils\MessageManager;

/**
* Class RemoveMessagesListener
*
* @package Drupal\Console\Core\EventSubscriber
*/
class RemoveMessagesListener implements EventSubscriberInterface
{
/**
* @var MessageManager
*/
protected $messageManager;

/**
* ShowGenerateInlineListener constructor.
*
* @param MessageManager $messageManager
*/
public function __construct(
MessageManager $messageManager
) {
$this->messageManager = $messageManager;
}

/**
* @param ConsoleTerminateEvent $event
*/
public function removeMessages(ConsoleTerminateEvent $event)
{
if ($event->getExitCode() != 0) {
return;
}

/* @var Command $command */
$command = $event->getCommand();

$commandName = $command->getName();

$this->messageManager->remove($commandName);
}

/**
* @{@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [ConsoleEvents::TERMINATE => 'removeMessages'];
}
}
33 changes: 26 additions & 7 deletions src/Utils/MessageManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,41 +19,46 @@ class MessageManager
* @param $type
* @param $message
* @param $code
* @param $removableBy
*/
private function add($type, $message, $code)
private function add($type, $message, $code, $removableBy)
{
$this->messages[] = [
'type' =>$type,
'message' => $message,
'code' => $code,
'removableBy' => $removableBy
];
}

/**
* @param $message
* @param $code
* @param $removableBy
*/
public function error($message, $code = 0)
public function error($message, $code = 0, $removableBy = null)
{
$this->add('error', $message, $code);
$this->add('error', $message, $code, $removableBy);
}

/**
* @param $message
* @param $code
* @param $removableBy
*/
public function warning($message, $code = 0)
public function warning($message, $code = 0, $removableBy = null)
{
$this->add('warning', $message, $code);
$this->add('warning', $message, $code, $removableBy);
}

/**
* @param $message
* @param $code
* @param $removableBy
*/
public function info($message, $code = 0)
public function info($message, $code = 0, $removableBy = null)
{
$this->add('info', $message, $code);
$this->add('info', $message, $code, $removableBy);
}

/**
Expand All @@ -63,4 +68,18 @@ public function getMessages()
{
return $this->messages;
}

public function remove($removeBy = null) {
$this->messages = array_filter(
$this->messages,
function ($message) use ($removeBy) {
if (is_null($message['removableBy'])) {

return true;
}

return !($message['removableBy'] == $removeBy);
}
);
}
}

0 comments on commit 23383af

Please sign in to comment.