lightster/named-sprintf

View on GitHub
src/Middleware/AbstractInvokable.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Lstr\Sprintf\Middleware;

abstract class AbstractInvokable
{
    /**
     * @var AbstractInvokable|null
     */
    private $invokable;

    /**
     * @param AbstractInvokable|null $invokable
     */
    public function __construct(AbstractInvokable $invokable = null)
    {
        $this->invokable = $invokable;
    }

    /**
     * @param string $name
     * @param callable $values
     * @param array $options
     * @return mixed
     */
    public function __invoke($name, callable $values, array $options)
    {
        $params = new InvokableParams($name, $values, $options);

        $this->invokeProcess($params);
        $values_callback = $params->getValuesCallback();

        return $values_callback($params->getName());
    }

    /**
     * @param InvokableParams $params
     */
    abstract protected function process(InvokableParams $params);

    /**
     * @param InvokableParams $params
     */
    protected function invokeProcess(InvokableParams $params)
    {
        if ($this->invokable) {
            call_user_func([$this->invokable, 'invokeProcess'], $params);
        }

        $this->process($params);
    }
}