1
0
mirror of https://github.com/flextype/flextype.git synced 2025-08-08 06:06:45 +02:00

feat(fields): Add new field registry.get for Registry API #494

This commit is contained in:
Awilum
2020-12-15 18:30:55 +03:00
parent f53b2f1384
commit edae178fb7
6 changed files with 109 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
/**
* Flextype (https://flextype.org)
* Founded by Sergey Romanenko and maintained by Flextype Community.
*/
if (flextype('registry')->get('flextype.settings.entries.fields.registry.get.enabled')) {
flextype('emitter')->addListener('onEntriesFetchSingleHasResult', static function (): void {
if (flextype('entries')->hasStorage('fetch.data.registry.get')) {
// Get fetch.
$original = flextype('entries')->getStorage('fetch');
$data = [];
// Modify fetch.
foreach (flextype('entries')->getStorage('fetch.data.registry.get') as $field => $body) {
$data = arrays($data)->merge(arrays($data)->set($field, flextype('registry')->get($body['key'],
isset($body['default']) ?
$body['default'] :
[]))->toArray())->toArray();
}
// Save fetch.
flextype('entries')->setStorage('fetch.data', arrays($original['data'])->merge($data)->toArray());
}
});
}

View File

@@ -59,6 +59,9 @@ errors:
entries:
extension: md
fields:
registry:
get:
enabled: true
entries:
fetchCollection:
enabled: true

View File

@@ -0,0 +1,32 @@
<?php
use Flextype\Component\Filesystem\Filesystem;
beforeEach(function() {
filesystem()->directory(PATH['project'] . '/entries')->create();
});
afterEach(function (): void {
filesystem()->directory(PATH['project'] . '/entries')->delete();
});
test('test registry field', function () {
flextype('entries')->create('registry-root', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/entry.md')->get()));
flextype('entries')->create('registry-root/level-1', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/level-1/entry.md')->get()));
flextype('entries')->create('registry-root/level-1/level-2', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/level-1/level-2/entry.md')->get()));
$data = flextype('entries')->fetchSingle('registry-root');
print_r($data);
print_r($data->toJson());
$this->assertEquals('Flextype', $data['flextype']);
$this->assertEquals('Sergey Romanenko', $data['author']['name']);
$this->assertEquals('MIT', $data['license']);
$this->assertEquals('Flextype', $data['level1']['flextype']);
$this->assertEquals('Sergey Romanenko', $data['level1']['author']['name']);
$this->assertEquals('MIT', $data['level1']['license']);
$this->assertEquals('Flextype', $data['level1']['level2']['flextype']);
$this->assertEquals('Sergey Romanenko', $data['level1']['level2']['author']['name']);
$this->assertEquals('MIT', $data['level1']['level2']['license']);
});

View File

@@ -0,0 +1,16 @@
---
title: Root
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license
entries:
fetchSingle:
level1:
id: registry-root/level-1
result: toArray
---

View File

@@ -0,0 +1,16 @@
---
title: Level 1
entries:
fetchSingle:
level2:
id: registry-root/level-1/level-2
result: toArray
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license
---

View File

@@ -0,0 +1,11 @@
---
title: Level 2
registry:
get:
flextype:
key: flextype.manifest.name
author.name:
key: flextype.manifest.author.name
license:
key: flextype.manifest.license
---