Source of file ArgMerger.php

Size: 1,904 Bytes - Last Modified: 2019-08-09T18:27:54+00:00

/home/travis/build/zerospam/sdk-framework/src/Request/Arguments/Mergeable/Worker/ArgMerger.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
<?php
/**
 * Created by PhpStorm.
 * User: aaflalo
 * Date: 30/05/18
 * Time: 4:40 PM.
 */

namespace ZEROSPAM\Framework\SDK\Request\Arguments\Mergeable\Worker;

use ZEROSPAM\Framework\SDK\Request\Arguments\Mergeable\IMergeableArgument;
use ZEROSPAM\Framework\SDK\Utils\Contracts\PrimalValued;

/**
 * Class ArgMerger
 *
 * Takes care of merging the arguments into a single string
 *
 * @package ZEROSPAM\Framework\SDK\Request\Arguments\Mergeable\Worker
 */
class ArgMerger implements PrimalValued
{

    /**
     * @var string
     */
    private $glue;


    /**
     * @var IMergeableArgument[]
     */
    private $args = [];

    /**
     * ArgMerger constructor.
     *
     * @param string $glue
     */
    public function __construct(string $glue)
    {
        $this->glue = $glue;
    }

    /**
     * Add the argument.
     *
     * @param IMergeableArgument $argument
     *
     * @return $this
     */
    public function addArgument(IMergeableArgument $argument)
    {
        $this->args[$argument->toPrimitive()] = $argument;

        return $this;
    }

    /**
     * Remove the argument.
     *
     * @param IMergeableArgument $argument
     *
     * @return $this
     */
    public function removeArgument(IMergeableArgument $argument)
    {
        unset($this->args[$argument->toPrimitive()]);

        return $this;
    }

    /**
     * Return a primitive value for this object.
     *
     * @return int|float|string|float
     */
    public function toPrimitive()
    {
        if (empty($this->args)) {
            throw new \InvalidArgumentException("Args shouldn't be empty");
        }

        $values = array_keys($this->args);

        return implode($this->glue, $values);
    }

    /**
     * Is there arguments to be merged for request parameter.
     *
     * @return bool
     */
    public function isEmpty()
    {
        return empty($this->args);
    }
}