sugared-rim/sami

View on GitHub
src/Config/FilterPreprocessor.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace SugaredRim\Sami\Config;

use stdClass;
use Schnittstabil\Get\Get;

/**
 * Config `filter` chain link.
 */
class FilterPreprocessor
{
    protected $next;

    public function __construct(callable $next)
    {
        $this->next = $next;
    }

    /**
     * @SuppressWarnings(PHPMD.StaticAccess)
     */
    public function __invoke(stdClass $config)
    {
        $next = $this->next;
        $filter = Get::value('filter', $config);
        unset($config->filter);

        if (empty($filter)) {
            return $next($config);
        }

        $sami = $next($config);
        $sami['filter'] = function () use ($filter) {
            return new $filter();
        };

        return $sami;
    }
}