ArgumentFactory.php 1.91 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\Framework\GraphQl\Config\Element;

use Magento\Framework\ObjectManagerInterface;

/**
 * {@inheritdoc}
 */
class ArgumentFactory
{
    /**
     * @var ObjectManagerInterface
     */
    private $objectManager;

    /**
     * @param ObjectManagerInterface $objectManager
     */
    public function __construct(
        ObjectManagerInterface $objectManager
    ) {
        $this->objectManager = $objectManager;
    }

    /**
     * Create an argument object based off a configured Output/InputInterface's data.
     *
     * Argument data must contain name and type. Other values are optional and include baseType, itemType, description,
     * required, and itemsRequired.
     *
     * @param array $argumentData
     * @return Argument
     */
    public function createFromConfigData(
        array $argumentData
    ) : Argument {
        return $this->objectManager->create(
            Argument::class,
            [
                'name' => $argumentData['name'],
                'type' => isset($argumentData['itemType']) ? $argumentData['itemType'] : $argumentData['type'],
                'baseType' => isset($argumentData['baseType']) ? $argumentData['baseType'] : '',
                'description' => isset($argumentData['description']) ? $argumentData['description'] : '',
                'required' => isset($argumentData['required']) ? $argumentData['required'] : false,
                'isList' => isset($argumentData['itemType']),
                'itemType' => isset($argumentData['itemType']) ? $argumentData['itemType'] : '',
                'itemsRequired' => isset($argumentData['itemsRequired']) ? $argumentData['itemsRequired'] : false,
                'defaultValue' => isset($argumentData['defaultValue']) ? $argumentData['defaultValue'] : null
            ]
        );
    }
}