Skip to content

Commit c4d1ccf

Browse files
authored
feat(php): Add all config classes generation (#730)
1 parent 4b17b94 commit c4d1ccf

File tree

4 files changed

+97
-4
lines changed

4 files changed

+97
-4
lines changed

config/generation.config.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,5 @@ module.exports = {
3737
'!clients/algoliasearch-client-php/lib/RequestOptions/**',
3838
'!clients/algoliasearch-client-php/lib/RetryStrategy/**',
3939
'!clients/algoliasearch-client-php/lib/Support/**',
40-
'!clients/algoliasearch-client-php/lib/Configuration/**',
41-
'clients/algoliasearch-client-php/lib/Configuration/Configuration.php',
4240
],
4341
};

generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,29 @@ public String getName() {
1515
return "algolia-php";
1616
}
1717

18+
public String getClientName(String client) {
19+
return Utils.createClientName(client, "php");
20+
}
21+
1822
@Override
1923
public void processOpts() {
2024
// generator specific options
2125
String client = (String) additionalProperties.get("client");
2226
setApiNameSuffix(Utils.API_SUFFIX);
2327
setParameterNamingConvention("camelCase");
24-
additionalProperties.put("modelPackage", "Model\\" + Utils.createClientName(client, "php"));
28+
additionalProperties.put("modelPackage", "Model\\" + getClientName(client));
2529
additionalProperties.put("invokerPackage", "Algolia\\AlgoliaSearch");
30+
additionalProperties.put("clientName", getClientName(client));
2631

2732
super.processOpts();
2833

2934
// Remove base template as we want to change its path
3035
supportingFiles.removeIf(file -> file.getTemplateFile().equals("Configuration.mustache"));
3136

3237
supportingFiles.add(new SupportingFile("Configuration.mustache", "lib/Configuration", "Configuration.php"));
38+
supportingFiles.add(new SupportingFile("ConfigWithRegion.mustache", "lib/Configuration", "ConfigWithRegion.php"));
39+
40+
supportingFiles.add(new SupportingFile("client_config.mustache", "lib/Configuration", getClientName(client) + "Config.php"));
3341

3442
setDefaultGeneratorOptions(client);
3543
try {
@@ -52,7 +60,7 @@ public void setDefaultGeneratorOptions(String client) {
5260
additionalProperties.put("useCache", true);
5361
}
5462
additionalProperties.put("isSearchClient", client.equals("search"));
55-
additionalProperties.put("configClassname", Utils.createClientName(client, "php") + "Config");
63+
additionalProperties.put("configClassname", getClientName(client) + "Config");
5664
}
5765

5866
public String getComposerPackageName() {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace {{invokerPackage}}\Configuration;
4+
5+
use Algolia\AlgoliaSearch\Exceptions\AlgoliaException;
6+
7+
abstract class ConfigWithRegion extends Configuration
8+
{
9+
public static function create(
10+
$appId,
11+
$apiKey,
12+
$region = null,
13+
$allowedRegions = null
14+
) {
15+
if (
16+
$region !== null &&
17+
$allowedRegions !== null &&
18+
!in_array($region, $allowedRegions, true)
19+
) {
20+
throw new AlgoliaException(
21+
'`region` must be one of the following: ' .
22+
implode(', ', $allowedRegions)
23+
);
24+
}
25+
26+
$config = [
27+
'appId' => $appId,
28+
'apiKey' => $apiKey,
29+
'region' => $region,
30+
];
31+
32+
return new static($config);
33+
}
34+
35+
public function getRegion()
36+
{
37+
return $this->config['region'];
38+
}
39+
}

templates/php/client_config.mustache

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace {{invokerPackage}}\Configuration;
4+
5+
class {{configClassname}} extends {{#hasRegionalHost}}ConfigWithRegion{{/hasRegionalHost}}{{^hasRegionalHost}}Configuration{{/hasRegionalHost}}
6+
{
7+
protected $clientName = '{{clientName}}';
8+
{{#isSearchClient}}private $defaultWaitTaskTimeBeforeRetry = 5000; // 5 sec in milliseconds
9+
private $defaultMaxRetries = 50;
10+
11+
public static function create($appId, $apiKey)
12+
{
13+
$config = [
14+
'appId' => $appId,
15+
'apiKey' => $apiKey,
16+
];
17+
18+
return new static($config);
19+
}
20+
21+
public function getDefaultConfiguration()
22+
{
23+
return [
24+
'appId' => '',
25+
'apiKey' => '',
26+
'hosts' => null,
27+
'readTimeout' => $this->defaultReadTimeout,
28+
'writeTimeout' => $this->defaultWriteTimeout,
29+
'connectTimeout' => $this->defaultConnectTimeout,
30+
'waitTaskTimeBeforeRetry' => $this->defaultWaitTaskTimeBeforeRetry,
31+
'defaultMaxRetries' => $this->defaultMaxRetries,
32+
'defaultHeaders' => [],
33+
'defaultForwardToReplicas' => null,
34+
'batchSize' => 1000,
35+
];
36+
}
37+
38+
public function getWaitTaskTimeBeforeRetry()
39+
{
40+
return $this->config['waitTaskTimeBeforeRetry'];
41+
}
42+
43+
public function getDefaultMaxRetries()
44+
{
45+
return $this->config['defaultMaxRetries'];
46+
}
47+
{{/isSearchClient}}
48+
}

0 commit comments

Comments
 (0)