Skip to content

Commit 8dd2143

Browse files
committed
Add ArrayArgument to set arguments as array.
1 parent 4206bec commit 8dd2143

File tree

4 files changed

+68
-15
lines changed

4 files changed

+68
-15
lines changed

src/Argument.php

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function __toString(): string
6161
break;
6262
case 'object':
6363
$value = Assert::validate(self::class, $this->value)
64-
? $this->buildStringFromArgument($this->value)
64+
? $this->buildStringFromArray([$this->value])
6565
: null;
6666
break;
6767
default:
@@ -74,21 +74,12 @@ public function __toString(): string
7474
* @param Argument[] $values
7575
* @return string|null
7676
*/
77-
private function buildStringFromArray(array $values): ?string
77+
protected function buildStringFromArray(array $values): ?string
7878
{
7979
$returnArray = [];
8080
foreach ($values as $value) {
81-
$returnArray[] = $this->buildStringFromArgument($value);
81+
$returnArray[] = (string) $value;
8282
}
83-
return '[' . implode(',', $returnArray) . ']';
84-
}
85-
86-
/**
87-
* @param Argument $argument
88-
* @return string|null
89-
*/
90-
private function buildStringFromArgument(Argument $argument): ?string
91-
{
92-
return '{' . $argument . '}';
83+
return '{' . implode(',', $returnArray) . '}';
9384
}
9485
}

src/ArrayArgument.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace GraphQL\RequestBuilder;
5+
6+
/**
7+
* @author david.pauli
8+
* @package GraphQLTest\RequestBuilder
9+
* @since 15.08.2018
10+
*/
11+
class ArrayArgument extends Argument
12+
{
13+
/**
14+
* @param Argument[] $values
15+
* @return string|null
16+
*/
17+
protected function buildStringFromArray(array $values): ?string
18+
{
19+
$returnArray = [];
20+
foreach ($values as $value) {
21+
$returnArray[] = '{' . (string) $value . '}';
22+
}
23+
return '[' . implode(',', $returnArray) . ']';
24+
}
25+
}

tests/ArgumentTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ public function testToStringArgumentArray(): void
5656
$argument = new Argument(self::ARGUMENT_NAME, [$innerArgument, $innerArgument2]);
5757

5858
static::assertEquals(
59-
self::ARGUMENT_NAME . ':[{' . self::ARGUMENT_NAME_INNER . ':"' . self::ARGUMENT_VALUE_STRING . '"},{'
60-
. self::ARGUMENT_NAME_INNER_2 . ':' . self::ARGUMENT_VALUE_INT_POSITIVE . '}]',
59+
self::ARGUMENT_NAME . ':{' . self::ARGUMENT_NAME_INNER . ':"' . self::ARGUMENT_VALUE_STRING . '",'
60+
. self::ARGUMENT_NAME_INNER_2 . ':' . self::ARGUMENT_VALUE_INT_POSITIVE . '}',
6161
(string) $argument,
6262
'Setting array of Arguments should return correct string.'
6363
);

tests/ArrayArgumentTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace GraphQLTest\RequestBuilder;
5+
6+
use GraphQL\RequestBuilder\Argument;
7+
use GraphQL\RequestBuilder\ArrayArgument;
8+
use PHPUnit\Framework\TestCase;
9+
10+
/**
11+
* @author david.pauli
12+
* @package GraphQLTest\RequestBuilder
13+
* @since 15.08.2018
14+
*/
15+
class ArrayArgumentTest extends TestCase
16+
{
17+
private const ARGUMENT_NAME = 'argumentName';
18+
private const ARGUMENT_NAME_INNER = 'argumentNameInner';
19+
private const ARGUMENT_NAME_INNER_2 = 'argumentNameInner2';
20+
private const ARGUMENT_VALUE_INT_POSITIVE = 2;
21+
private const ARGUMENT_VALUE_STRING = 'argumentValueString';
22+
23+
public function testToStringArgumentArray(): void
24+
{
25+
$innerArgument = new Argument(self::ARGUMENT_NAME_INNER, self::ARGUMENT_VALUE_STRING);
26+
$innerArgument2 = new ArrayArgument(self::ARGUMENT_NAME_INNER_2, self::ARGUMENT_VALUE_INT_POSITIVE);
27+
28+
$argument = new ArrayArgument(self::ARGUMENT_NAME, [$innerArgument, $innerArgument2]);
29+
30+
static::assertEquals(
31+
self::ARGUMENT_NAME . ':[{' . self::ARGUMENT_NAME_INNER . ':"' . self::ARGUMENT_VALUE_STRING . '"},{'
32+
. self::ARGUMENT_NAME_INNER_2 . ':' . self::ARGUMENT_VALUE_INT_POSITIVE . '}]',
33+
(string) $argument,
34+
'Setting array of Arguments should return correct string.'
35+
);
36+
}
37+
}

0 commit comments

Comments
 (0)