Skip to content

Commit 47e2824

Browse files
fix(client): elide null named parameters
1 parent d8b47a2 commit 47e2824

File tree

6 files changed

+66
-34
lines changed

6 files changed

+66
-34
lines changed

README.md

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,7 @@ use CasParser\Client;
4949

5050
$client = new Client(apiKey: getenv("CAS_PARSER_API_KEY") ?: "My API Key");
5151

52-
$unifiedResponse = $client->casParser->smartParse(
53-
password: "ABCDF", pdfURL: "https://your-cas-pdf-url-here.com"
54-
);
55-
52+
$unifiedResponse = $client->casParser->smartParse();
5653
var_dump($unifiedResponse->demat_accounts);
5754
```
5855

@@ -119,11 +116,7 @@ use CasParser\RequestOptions;
119116
$client = new Client(maxRetries: 0);
120117

121118
// Or, configure per-request:
122-
$result = $client->casParser->smartParse(
123-
password: "ABCDF",
124-
pdfURL: "https://you-cas-pdf-url-here.com",
125-
new RequestOptions(maxRetries: 5),
126-
);
119+
$result = $client->casParser->smartParse(new RequestOptions(maxRetries: 5));
127120
```
128121

129122
## Advanced concepts
@@ -142,8 +135,6 @@ Note: the `extra_` parameters of the same name overrides the documented paramete
142135
use CasParser\RequestOptions;
143136

144137
$unifiedResponse = $client->casParser->smartParse(
145-
password: "ABCDF",
146-
pdfURL: "https://you-cas-pdf-url-here.com",
147138
new RequestOptions(
148139
extraQueryParams: ["my_query_parameter" => "value"],
149140
extraBodyParams: ["my_body_parameter" => "value"],

src/Client.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
namespace CasParser;
66

7-
use CasParser\CasGenerator\CasGeneratorService;
8-
use CasParser\CasParser\CasParserService;
97
use CasParser\Core\BaseClient;
8+
use CasParser\Services\CasGeneratorService;
9+
use CasParser\Services\CasParserService;
1010

1111
class Client extends BaseClient
1212
{

src/Core/Util.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,23 @@ public static function decodeContent(MessageInterface $rsp): mixed
349349
return self::streamIterator($body);
350350
}
351351

352+
/**
353+
* @param array<string, mixed> $arr
354+
* @param list<string> $keys
355+
*
356+
* @return array<string, mixed>
357+
*/
358+
public static function array_filter_null(array $arr, array $keys): array
359+
{
360+
foreach ($keys as $key) {
361+
if (array_key_exists($key, $arr) && is_null($arr[$key])) {
362+
unset($arr[$key]);
363+
}
364+
}
365+
366+
return $arr;
367+
}
368+
352369
/**
353370
* @param list<callable> $closing
354371
*
Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
declare(strict_types=1);
44

5-
namespace CasParser\CasGenerator;
5+
namespace CasParser\Services;
66

7+
use CasParser\CasGenerator\CasGeneratorGenerateCasParams;
78
use CasParser\CasGenerator\CasGeneratorGenerateCasParams\CasAuthority;
89
use CasParser\Client;
910
use CasParser\Contracts\CasGeneratorContract;
1011
use CasParser\Core\Conversion;
12+
use CasParser\Core\Util;
1113
use CasParser\RequestOptions;
1214
use CasParser\Responses\CasGenerator\CasGeneratorGenerateCasResponse;
1315

@@ -35,16 +37,18 @@ public function generateCas(
3537
$panNo = null,
3638
?RequestOptions $requestOptions = null,
3739
): CasGeneratorGenerateCasResponse {
40+
$args = [
41+
'email' => $email,
42+
'fromDate' => $fromDate,
43+
'password' => $password,
44+
'toDate' => $toDate,
45+
'casAuthority' => $casAuthority,
46+
'panNo' => $panNo,
47+
];
48+
$args = Util::array_filter_null($args, ['casAuthority', 'panNo']);
3849
[$parsed, $options] = CasGeneratorGenerateCasParams::parseRequest(
39-
[
40-
'email' => $email,
41-
'fromDate' => $fromDate,
42-
'password' => $password,
43-
'toDate' => $toDate,
44-
'casAuthority' => $casAuthority,
45-
'panNo' => $panNo,
46-
],
47-
$requestOptions,
50+
$args,
51+
$requestOptions
4852
);
4953
$resp = $this->client->request(
5054
method: 'post',
Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
declare(strict_types=1);
44

5-
namespace CasParser\CasParser;
5+
namespace CasParser\Services;
66

7+
use CasParser\CasParser\CasParserCamsKfintechParams;
8+
use CasParser\CasParser\CasParserCdslParams;
9+
use CasParser\CasParser\CasParserNsdlParams;
10+
use CasParser\CasParser\CasParserSmartParseParams;
11+
use CasParser\CasParser\UnifiedResponse;
712
use CasParser\Client;
813
use CasParser\Contracts\CasParserContract;
914
use CasParser\Core\Conversion;
15+
use CasParser\Core\Util;
1016
use CasParser\RequestOptions;
1117

1218
final class CasParserService implements CasParserContract
@@ -27,9 +33,13 @@ public function camsKfintech(
2733
$pdfURL = null,
2834
?RequestOptions $requestOptions = null,
2935
): UnifiedResponse {
36+
$args = [
37+
'password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL,
38+
];
39+
$args = Util::array_filter_null($args, ['password', 'pdfFile', 'pdfURL']);
3040
[$parsed, $options] = CasParserCamsKfintechParams::parseRequest(
31-
['password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL],
32-
$requestOptions,
41+
$args,
42+
$requestOptions
3343
);
3444
$resp = $this->client->request(
3545
method: 'post',
@@ -56,9 +66,13 @@ public function cdsl(
5666
$pdfURL = null,
5767
?RequestOptions $requestOptions = null,
5868
): UnifiedResponse {
69+
$args = [
70+
'password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL,
71+
];
72+
$args = Util::array_filter_null($args, ['password', 'pdfFile', 'pdfURL']);
5973
[$parsed, $options] = CasParserCdslParams::parseRequest(
60-
['password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL],
61-
$requestOptions,
74+
$args,
75+
$requestOptions
6276
);
6377
$resp = $this->client->request(
6478
method: 'post',
@@ -85,9 +99,13 @@ public function nsdl(
8599
$pdfURL = null,
86100
?RequestOptions $requestOptions = null,
87101
): UnifiedResponse {
102+
$args = [
103+
'password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL,
104+
];
105+
$args = Util::array_filter_null($args, ['password', 'pdfFile', 'pdfURL']);
88106
[$parsed, $options] = CasParserNsdlParams::parseRequest(
89-
['password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL],
90-
$requestOptions,
107+
$args,
108+
$requestOptions
91109
);
92110
$resp = $this->client->request(
93111
method: 'post',
@@ -114,9 +132,13 @@ public function smartParse(
114132
$pdfURL = null,
115133
?RequestOptions $requestOptions = null,
116134
): UnifiedResponse {
135+
$args = [
136+
'password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL,
137+
];
138+
$args = Util::array_filter_null($args, ['password', 'pdfFile', 'pdfURL']);
117139
[$parsed, $options] = CasParserSmartParseParams::parseRequest(
118-
['password' => $password, 'pdfFile' => $pdfFile, 'pdfURL' => $pdfURL],
119-
$requestOptions,
140+
$args,
141+
$requestOptions
120142
);
121143
$resp = $this->client->request(
122144
method: 'post',

tests/Resources/CasGeneratorTest.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ public function testGenerateCasWithOptionalParams(): void
5555
fromDate: '2023-01-01',
5656
password: 'Abcdefghi12$',
5757
toDate: '2023-12-31',
58-
casAuthority: 'kfintech',
59-
panNo: 'ABCDE1234F',
6058
);
6159

6260
$this->assertTrue(true); // @phpstan-ignore-line

0 commit comments

Comments
 (0)