Initial commit
This commit is contained in:
commit
8f3a2ba826
0
.drone.yml
Normal file
0
.drone.yml
Normal file
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
.gitattributes export-ignore
|
||||||
|
.gitignore export-ignore
|
||||||
|
.drone.yml export-ignore
|
||||||
|
test/ export-ignore
|
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
composer.lock
|
||||||
|
composer.phar
|
||||||
|
.idea/
|
||||||
|
build/
|
||||||
|
test/temp/
|
||||||
|
vendor/
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2013-2020 i15
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
28
composer.json
Normal file
28
composer.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "fuzeworks/objectstorage",
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"license": ["MIT"],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Abel Hoogeveen",
|
||||||
|
"email": "abel@i15.nl"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.4.0",
|
||||||
|
"fuzeworks/core": "~1.2",
|
||||||
|
"psr/cache": "~1.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-redis": "1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9",
|
||||||
|
"fuzeworks/tracycomponent": "~1.2"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"FuzeWorks\\ObjectStorage\\": "src/FuzeWorks/ObjectStorage/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
config.storage.php
Normal file
36
config.storage.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [];
|
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FuzeWorks\ObjectStorage\Exception;
|
||||||
|
|
||||||
|
class ObjectStorageException extends \FuzeWorks\Exception\CoreException
|
||||||
|
{
|
||||||
|
}
|
69
src/FuzeWorks/ObjectStorage/ObjectStorageComponent.php
Normal file
69
src/FuzeWorks/ObjectStorage/ObjectStorageComponent.php
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FuzeWorks\ObjectStorage;
|
||||||
|
use FuzeWorks\Configurator;
|
||||||
|
use FuzeWorks\Factory;
|
||||||
|
use FuzeWorks\iComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ObjectStorageComponent Class.
|
||||||
|
*
|
||||||
|
* This class doesn't do very much, except show the FuzeWorks\Configurator that this dependency has been loaded.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
*/
|
||||||
|
class ObjectStorageComponent implements iComponent
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getName(): string
|
||||||
|
{
|
||||||
|
return 'ObjectStorageComponent';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getClasses(): array
|
||||||
|
{
|
||||||
|
return ['storage' => $this];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onAddComponent(Configurator $configurator)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onCreateContainer(Factory $container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
268
src/FuzeWorks/ObjectStorage/Provider/FileProvider.php
Normal file
268
src/FuzeWorks/ObjectStorage/Provider/FileProvider.php
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FuzeWorks\ObjectStorage\Provider;
|
||||||
|
use FuzeWorks\ObjectStorage\Exception\ObjectStorageException;
|
||||||
|
use FuzeWorks\ObjectStorage\iObjectStorageProvider;
|
||||||
|
use FuzeWorks\Core;
|
||||||
|
use Traversable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FileProvider
|
||||||
|
*
|
||||||
|
* An ObjectStorage provider which saves objects in files using the serialize() and unserialize() functions.
|
||||||
|
* The easiest to use StorageProvider, though with its caveats. It's nimble and works on nearly everything, but
|
||||||
|
* not particularly fast, and has some risks when multiple processes use the data at the same time.
|
||||||
|
*
|
||||||
|
* @todo Figure out a way to prevent indexes from clashing in multiple threads
|
||||||
|
* @todo Find a better way to sanitize key names other than hashing them using crc32
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
*/
|
||||||
|
class FileProvider implements iObjectStorageProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The directory where all objects are saved
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected string $directory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The file where the index for this provider is saved
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected string $indexFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The index of all objects stored
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected array $index;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $providerConfig
|
||||||
|
* @return bool
|
||||||
|
* @throws ObjectStorageException
|
||||||
|
*/
|
||||||
|
public function init(array $providerConfig): bool
|
||||||
|
{
|
||||||
|
// First load the directory from the providerConfig
|
||||||
|
$directory = isset($providerConfig['storageDirectory']) ? $providerConfig['storageDirectory'] : null;
|
||||||
|
|
||||||
|
// Check if the directory exists
|
||||||
|
if (!file_exists($directory) || !is_dir($directory))
|
||||||
|
throw new ObjectStorageException("Could not load FileProvider ObjectStorage. Provided storageDirectory is not a directory.");
|
||||||
|
|
||||||
|
// Check if that directory also is writeable
|
||||||
|
if (!Core::isReallyWritable($directory))
|
||||||
|
throw new ObjectStorageException("Could not load FileProvider ObjectStorage. Provided storageDirectory is not writeable.");
|
||||||
|
|
||||||
|
// Save the directory and indexFile, and load or initialize the indexFile
|
||||||
|
$this->directory = rtrim($directory);
|
||||||
|
$this->indexFile = $this->directory . DS . 'index.fwstorage';
|
||||||
|
|
||||||
|
// If the index does not exist yet, load it
|
||||||
|
if (!file_exists($this->indexFile))
|
||||||
|
{
|
||||||
|
if (!$this->write_file($this->indexFile, serialize(['index' => []])))
|
||||||
|
throw new ObjectStorageException("Could not load FileProvider ObjectStorage. Could not write index.");
|
||||||
|
|
||||||
|
chmod($this->indexFile, 0640);
|
||||||
|
}
|
||||||
|
|
||||||
|
// And finally, load the index
|
||||||
|
$this->index = unserialize(file_get_contents($this->indexFile))['index'];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIndex(): array
|
||||||
|
{
|
||||||
|
return $this->index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItem(string $key): ?array
|
||||||
|
{
|
||||||
|
// Convert the key
|
||||||
|
$file = $this->directory . DS . crc32($key) . '.fwstorage';
|
||||||
|
|
||||||
|
// If the key could not be found in the index, return null
|
||||||
|
if (!isset($this->index[$key]))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Check if the file exists. If not, delete the indexed value
|
||||||
|
if (!file_exists($file))
|
||||||
|
{
|
||||||
|
$this->deleteItem($key);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise try and load the metaData and contents
|
||||||
|
$meta = $this->index[$key]['meta'];
|
||||||
|
$data = unserialize(file_get_contents($file));
|
||||||
|
|
||||||
|
// Return the combined data
|
||||||
|
return ['meta' => $meta, 'data' => $data];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItemMeta(string $key): ?array
|
||||||
|
{
|
||||||
|
// If the key could not be found in the index, return null
|
||||||
|
if (!isset($this->index[$key]))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// Otherwise return the meta data
|
||||||
|
return $this->index[$key]['meta'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getItems(array $keys = []): array
|
||||||
|
{
|
||||||
|
$output = [];
|
||||||
|
foreach ($keys as $key)
|
||||||
|
$output[$key] = $this->getItem($key);
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function hasItem(string $key): bool
|
||||||
|
{
|
||||||
|
return isset($this->index[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clear(): bool
|
||||||
|
{
|
||||||
|
$keys = array_keys($this->index);
|
||||||
|
return $this->deleteItems($keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteItem(string $key): bool
|
||||||
|
{
|
||||||
|
// Convert the key
|
||||||
|
$file = $this->directory . DS . crc32($key) . '.fwstorage';
|
||||||
|
|
||||||
|
// Remove the file first
|
||||||
|
if (file_exists($file))
|
||||||
|
unlink($file);
|
||||||
|
|
||||||
|
// And remove it from the index
|
||||||
|
if (isset($this->index[$key]))
|
||||||
|
unset($this->index[$key]);
|
||||||
|
|
||||||
|
// And commit the index
|
||||||
|
return $this->commitIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteItems(array $keys): bool
|
||||||
|
{
|
||||||
|
foreach ($keys as $key)
|
||||||
|
$this->deleteItem($key);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save(string $key, $value, array $metaData = []): bool
|
||||||
|
{
|
||||||
|
// Convert the key
|
||||||
|
$file = $this->directory . DS . crc32($key) . '.fwstorage';
|
||||||
|
|
||||||
|
// Remove the file if it already exists
|
||||||
|
if (file_exists($file))
|
||||||
|
unlink($file);
|
||||||
|
|
||||||
|
// Write everything to the index
|
||||||
|
$this->index[$key] = ['meta' => $metaData];
|
||||||
|
$this->commitIndex();
|
||||||
|
|
||||||
|
// And write the contents
|
||||||
|
if ($this->write_file($file, serialize($value))) {
|
||||||
|
chmod($file, 0640);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function commit(): bool
|
||||||
|
{
|
||||||
|
// TODO: Implement commit() method.
|
||||||
|
}
|
||||||
|
|
||||||
|
public function revert(): bool
|
||||||
|
{
|
||||||
|
// TODO: Implement revert() method.
|
||||||
|
}
|
||||||
|
|
||||||
|
private function commitIndex(): bool
|
||||||
|
{
|
||||||
|
if ($this->write_file($this->indexFile, serialize(['index' => $this->index]))) {
|
||||||
|
chmod($this->indexFile, 0640);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write File
|
||||||
|
*
|
||||||
|
* Writes data to the file specified in the path.
|
||||||
|
* Creates a new file if non-existent.
|
||||||
|
*
|
||||||
|
* @param string $path File path
|
||||||
|
* @param string $data Data to write
|
||||||
|
* @param string $mode fopen() mode (default: 'wb')
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
private function write_file(string $path, string $data, string $mode = 'wb'): bool
|
||||||
|
{
|
||||||
|
if ( ! $fp = @fopen($path, $mode))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
flock($fp, LOCK_EX);
|
||||||
|
|
||||||
|
for ($result = $written = 0, $length = strlen($data); $written < $length; $written += $result)
|
||||||
|
if (($result = fwrite($fp, substr($data, $written))) === false)
|
||||||
|
break;
|
||||||
|
|
||||||
|
flock($fp, LOCK_UN);
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
return is_int($result);
|
||||||
|
}
|
||||||
|
}
|
56
src/FuzeWorks/ObjectStorage/iObjectStorageProvider.php
Normal file
56
src/FuzeWorks/ObjectStorage/iObjectStorageProvider.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FuzeWorks\ObjectStorage;
|
||||||
|
use Traversable;
|
||||||
|
|
||||||
|
interface iObjectStorageProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public function init(array $providerConfig): bool;
|
||||||
|
public function getIndex(): array;
|
||||||
|
public function getItem(string $key): ?array;
|
||||||
|
public function getItemMeta(string $key): ?array;
|
||||||
|
public function getItems(array $keys = []): array;
|
||||||
|
public function hasItem(string $key): bool;
|
||||||
|
public function clear(): bool;
|
||||||
|
public function deleteItem(string $key): bool;
|
||||||
|
public function deleteItems(array $keys): bool;
|
||||||
|
public function save(string $key, $value, array $metaData = []): bool;
|
||||||
|
public function commit(): bool;
|
||||||
|
public function revert(): bool;
|
||||||
|
|
||||||
|
}
|
57
test/bootstrap.php
Normal file
57
test/bootstrap.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* FuzeWorks ObjectStorage Component.
|
||||||
|
*
|
||||||
|
* The FuzeWorks PHP FrameWork
|
||||||
|
*
|
||||||
|
* Copyright (C) 2013-2020 i15
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* @author i15
|
||||||
|
* @copyright Copyright (c) 2013 - 2020, i15. (https://i15.nl)
|
||||||
|
* @license https://opensource.org/licenses/MIT MIT License
|
||||||
|
*
|
||||||
|
* @since Version 1.3.0
|
||||||
|
*
|
||||||
|
* @version Version 1.3.0
|
||||||
|
*/
|
||||||
|
require_once(dirname(__DIR__) . '/vendor/autoload.php');
|
||||||
|
|
||||||
|
$configurator = new \FuzeWorks\Configurator();
|
||||||
|
|
||||||
|
// Set directories
|
||||||
|
$configurator->setTempDirectory(__DIR__ . '/temp');
|
||||||
|
$configurator->setLogDirectory(__DIR__ . '/temp');
|
||||||
|
|
||||||
|
// Other values
|
||||||
|
$configurator->setTimeZone('Europe/Amsterdam');
|
||||||
|
|
||||||
|
// Add TracyComponent
|
||||||
|
\FuzeWorks\TracyComponent::enableTracy();
|
||||||
|
$configurator->addComponent(new \FuzeWorks\TracyComponent());
|
||||||
|
|
||||||
|
// And the star of the show: ObjectStorageComponent
|
||||||
|
$configurator->addComponent(new \FuzeWorks\ObjectStorage\ObjectStorageComponent());
|
||||||
|
|
||||||
|
// Debug related
|
||||||
|
$configurator->enableDebugMode();
|
||||||
|
$configurator->setDebugAddress('ALL');
|
||||||
|
|
||||||
|
return $configurator->createContainer();
|
0
test/temp/placeholder
Normal file
0
test/temp/placeholder
Normal file
Loading…
Reference in New Issue
Block a user