Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8a8141a

Browse files
ArangoDB analyzer support
* Added analyzer endpoint support * Ensured correct functionality with php8.3 --------- Co-authored-by: LaravelFreelancerNL <LaravelFreelancerNL@users.noreply.github.com>
1 parent 17096e2 commit 8a8141a

File tree

3 files changed

+228
-0
lines changed

3 files changed

+228
-0
lines changed

‎src/Schema/ManagesAnalyzers.php‎

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace ArangoClient\Schema;
6+
7+
use ArangoClient\ArangoClient;
8+
use ArangoClient\Exceptions\ArangoException;
9+
use stdClass;
10+
11+
/*
12+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/
13+
*/
14+
trait ManagesAnalyzers
15+
{
16+
protected ArangoClient $arangoClient;
17+
18+
protected function getFullName(string $name): string
19+
{
20+
if (!str_contains($name, '::')) {
21+
$name = $this->arangoClient->getDatabase() . '::' . $name;
22+
}
23+
return $name;
24+
}
25+
26+
/**
27+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/#create-an-analyzer
28+
*
29+
* @param array<mixed> $analyzer
30+
* @return stdClass
31+
* @throws ArangoException
32+
*/
33+
public function createAnalyzer(array $analyzer): stdClass
34+
{
35+
$uri = '/_api/analyzer';
36+
37+
$options = [
38+
'body' => $analyzer,
39+
];
40+
41+
return $this->arangoClient->request('post', $uri, $options);
42+
}
43+
44+
/**
45+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/#remove-an-analyzer
46+
*
47+
* @throws ArangoException
48+
*/
49+
public function deleteAnalyzer(string $name): bool
50+
{
51+
$uri = '/_api/analyzer/' . $name;
52+
53+
return (bool) $this->arangoClient->request('delete', $uri);
54+
}
55+
56+
/**
57+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/#list-all-analyzers
58+
*
59+
* @return array<mixed>
60+
*
61+
* @throws ArangoException
62+
*/
63+
public function getAnalyzers(): array
64+
{
65+
$results = $this->arangoClient->request('get', '/_api/analyzer');
66+
67+
return (array) $results->result;
68+
}
69+
70+
/**
71+
* Check for analyzer existence
72+
*
73+
*
74+
* @throws ArangoException
75+
*/
76+
public function hasAnalyzer(string $name): bool
77+
{
78+
$name = $this->getFullName($name);
79+
80+
$analyzers = $this->getAnalyzers();
81+
82+
return in_array($name, array_column($analyzers, 'name'), true);
83+
}
84+
85+
/**
86+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/#get-an-analyzer-definition
87+
*
88+
* @throws ArangoException
89+
*/
90+
public function getAnalyzer(string $name): stdClass
91+
{
92+
$uri = '/_api/analyzer/' . $name;
93+
94+
return $this->arangoClient->request('get', $uri);
95+
}
96+
97+
/**
98+
* Replace an existing analyzer. Note that this is just a shorthand for delete(old)/create(new).
99+
*
100+
* @see https://docs.arangodb.com/stable/develop/http-api/analyzers/#create-an-analyzer
101+
*
102+
* @param string $name
103+
* @param array<mixed> $newAnalyzer
104+
* @return stdClass|false
105+
* @throws ArangoException
106+
*/
107+
public function replaceAnalyzer(string $name, array $newAnalyzer): stdClass|false
108+
{
109+
if (!$this->hasAnalyzer($name)) {
110+
return false;
111+
}
112+
$this->deleteAnalyzer($name);
113+
114+
// Enforce the analyzer name
115+
$newAnalyzer['name'] = $name;
116+
117+
return $this->createAnalyzer($newAnalyzer);
118+
}
119+
}

‎src/Schema/SchemaManager.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
class SchemaManager extends Manager
1111
{
12+
use ManagesAnalyzers;
1213
use ManagesCollections;
1314
use ManagesDatabases;
1415
use ManagesGraphs;

‎tests/SchemaManagerAnalyzersTest.php‎

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
6+
class SchemaManagerAnalyzersTest extends \Tests\TestCase
7+
{
8+
protected array $analyzer = [
9+
'name' => 'testAnalyzerBasics',
10+
'type' => 'identity',
11+
];
12+
13+
protected function setUp(): void
14+
{
15+
\Tests\TestCase::setUp();
16+
17+
if (!$this->schemaManager->hasAnalyzer($this->analyzer['name'])) {
18+
$this->schemaManager->createAnalyzer($this->analyzer);
19+
}
20+
}
21+
22+
protected function tearDown(): void
23+
{
24+
\Tests\TestCase::tearDown();
25+
26+
if ($this->schemaManager->hasAnalyzer($this->analyzer['name'])) {
27+
$this->schemaManager->deleteAnalyzer($this->analyzer['name']);
28+
}
29+
}
30+
31+
public function testGetAnalyzers()
32+
{
33+
$analyzers = $this->schemaManager->getAnalyzers();
34+
35+
$customAnalyzer = end($analyzers);
36+
37+
$this->assertSame('arangodb_php_client__test::' . $this->analyzer['name'], $customAnalyzer->name);
38+
}
39+
40+
public function testGetAnalyzer()
41+
{
42+
$analyzer = $this->schemaManager->getAnalyzer($this->analyzer['name']);
43+
44+
$this->assertSame('arangodb_php_client__test::' . $this->analyzer['name'], $analyzer->name);
45+
$this->assertObjectHasProperty('type', $analyzer);
46+
}
47+
48+
public function testGetAnalyzerWithFullName()
49+
{
50+
$analyzer = $this->schemaManager->getAnalyzer('arangodb_php_client__test::' . $this->analyzer['name']);
51+
52+
$this->assertSame('arangodb_php_client__test::' . $this->analyzer['name'], $analyzer->name);
53+
$this->assertObjectHasProperty('type', $analyzer);
54+
}
55+
56+
57+
public function testHasAnalyzer()
58+
{
59+
$result = $this->schemaManager->hasAnalyzer($this->analyzer['name']);
60+
$this->assertTrue($result);
61+
62+
$result = $this->schemaManager->hasAnalyzer('someNoneExistingAnalyzer');
63+
$this->assertFalse($result);
64+
}
65+
66+
public function testReplaceAnalyzer()
67+
{
68+
$newAnalyzerProps = [
69+
'name' => 'newAnalyzer',
70+
'type' => 'identity',
71+
];
72+
;
73+
$newAnalyzer = $this->schemaManager->replaceAnalyzer($this->analyzer['name'], $newAnalyzerProps);
74+
75+
$this->assertSame('arangodb_php_client__test::' . $this->analyzer['name'], $newAnalyzer->name);
76+
}
77+
78+
public function testCreateAndDeleteAnalyzer()
79+
{
80+
$analyzer = [
81+
'name' => 'coolnewanalyzer',
82+
'type' => 'identity',
83+
];
84+
$created = $this->schemaManager->createAnalyzer($analyzer);
85+
$this->assertObjectHasProperty('name', $created);
86+
$this->assertSame('arangodb_php_client__test::' . $analyzer['name'], $created->name);
87+
88+
$deleted = $this->schemaManager->deleteAnalyzer($analyzer['name']);
89+
$this->assertTrue($deleted);
90+
}
91+
92+
public function testDeleteWithFullName()
93+
{
94+
$analyzer = [
95+
'name' => 'coolnewanalyzer',
96+
'type' => 'identity',
97+
];
98+
$created = $this->schemaManager->createAnalyzer($analyzer);
99+
100+
$fullName = 'arangodb_php_client__test::' . $analyzer['name'];
101+
102+
$deleted = $this->schemaManager->deleteAnalyzer($fullName);
103+
104+
$hasAnalyzer = $this->schemaManager->hasAnalyzer($fullName);
105+
$this->assertFalse($hasAnalyzer);
106+
}
107+
108+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /