darling / php-json-storage-utilities
This library provides classes for storing and retrieving data that was encoded as json by a \Darling\PHPJsonUtilities\classes\encoded\data\Json instance.
v1.0.2
2023-10-25 21:46 UTC
Requires
- php: ^8.1
- darling/php-darling-dev-tools: ^1.0
- darling/php-json-utilities: ^1.0
- darling/php-text-types: ^1.0
- darling/php-unit-test-utilities: ^1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-11-27 04:31:33 UTC
README
This library provides classes for storing and retrieving data that was encoded as Json by a \Darling\PHPJsonUtilities\classes\encoded\data\Json instance.
Installation
composer require darling/php-json-storage-utilities
This library is meant to be used in conjunction with the PHPJsonUtilities library.
Classes
\Darling\PHPJsonStorageUtilities\classes\collections\ContainerCollection
<?php
/**
* This file demonstrates the usage of a ContainerCollection.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\collections\ContainerCollection;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\ClassString;
$containerCollection = new ContainerCollection(
new Container(Type::Bool),
new Container(Type::String),
new Container(Type::Int),
new Container(Type::Float),
new Container(new ClassString(ContainerCollection::class)),
new Container(Type::Array),
);
foreach($containerCollection->collection() as $index => $container) {
echo PHP_EOL . 'Container[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$container->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\collections\JsonCollection
<?php
/**
* This file demonstrates the usage of a JsonCollection.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\collections\JsonCollection;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPJsonUtilities\classes\encoded\data\Json;
use \Darling\PHPTextTypes\classes\strings\Id;
$jsonCollection = new JsonCollection(
new Json(new Id()),
new Json([1, 2, 3]),
new Json(456.789),
new Json(10),
new Json(true),
new Json(false),
new Json(null),
new Json('string'),
new Json(json_encode('json string')),
);
foreach($jsonCollection->collection() as $index => $json) {
echo PHP_EOL . 'Json[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$json->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\collections\JsonFilePathCollection
<?php
/**
* This file demonstrates the usage of a JsonFilePathCollection.
*/
namespace Darling\PHPJsonFilePathStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\classes\collections\JsonFilePathCollection;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$jsonFilePathCollection = new JsonFilePathCollection(
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Array),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Bool),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Float),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Int),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Null),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Object),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Resource),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::ResourceClosed),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::String),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::UnknownType),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
),
);
foreach(
$jsonFilePathCollection->collection() as $index => $jsonFilePath
) {
echo PHP_EOL . 'JsonFilePath[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\collections\JsonStorageDirectoryPathCollection
<?php
/**
* This file demonstrates the usage of a JsonStorageDirectoryPathCollection.
*/
namespace Darling\PHPJsonStorageDirectoryPathStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\collections\JsonStorageDirectoryPathCollection;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
$jsonStorageDirectoryPathCollection = new JsonStorageDirectoryPathCollection(
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
new JsonStorageDirectoryPath(
new Name(new Text('Name' . strval(rand(1, 100))))
),
);
foreach(
$jsonStorageDirectoryPathCollection->collection()
as
$index => $jsonStorageDirectoryPath
) {
echo PHP_EOL . 'JsonStorageDirectoryPath[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$jsonStorageDirectoryPath->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\collections\LocationCollection
<?php
/**
* This file demonstrates the usage of a LocationCollection.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\collections\LocationCollection;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$locationCollection = new LocationCollection(
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
new Location(new Name(new Text('Location' . strval(rand(1, 100))))),
);
foreach($locationCollection->collection() as $index => $location) {
echo PHP_EOL . 'Location[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$location->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\collections\OwnerCollection
<?php
/**
* This file demonstrates the usage of a OwnerCollection.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\collections\OwnerCollection;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$ownerCollection = new OwnerCollection(
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
);
foreach($ownerCollection->collection() as $index => $owner) {
echo PHP_EOL . 'Owner[' . strval($index) . ']: ' .
IntegrationTestUtilities::applyANSIColor(
$owner->__toString(),
rand(1, 231)
);
}
\Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath
<?php
/**
* This file demonstrates the usage of a JsonFilePath.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$jsonFilePath = new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::UnknownType),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
);
echo PHP_EOL .
'JsonFilePath:' .
IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(), rand(1, 231)
);
\Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath
<?php
/**
* This file demonstrates the usage of a JsonStorageDirectoryPath.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$jsonStorageDirectoryPath = new JsonStorageDirectoryPath(
new Name(
new Text('JsonStorageDirectoryPath' . strval(rand(1, 100)))
)
);
echo PHP_EOL .
'JsonStorageDirectoryPath:' .
IntegrationTestUtilities::applyANSIColor(
$jsonStorageDirectoryPath->__toString(), rand(1, 231)
);
\Darling\PHPJsonStorageUtilities\classes\filesystem\storage\drivers\JsonFilesystemStorageDriver
<?php
/**
* This file demonstrates how to use a JsonFilesystemStorageDriver
* to write and read Json to and from storage.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\drivers\JsonFilesystemStorageDriver;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPJsonUtilities\classes\encoded\data\Json;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
use \stdClass;
/**
* Instantiate a new JsonFilesystemStorageDriver
*/
$jsonFilesystemStorageDriver = new JsonFilesystemStorageDriver();
/**
* Create an array of data.
*/
$data = [
new Id(),
'Foo' . strval(rand(1, 100)),
rand(PHP_INT_MIN, PHP_INT_MAX),
function () : void {},
new stdClass(),
new Json('Encoded Json Instance' . strval(rand(1, 100))),
json_encode('json string ' . strval(rand(1, 100))),
floatval(
strval(rand(0, 100)) .
'.' .
strval(rand(1, 100))
),
[
"Id" => new Id(),
"string" => 'Foo' . strval(rand(1, 100)),
"int" => rand(PHP_INT_MIN, PHP_INT_MAX),
"closure" => function () : void {},
"object" => new stdClass(),
"Json Instance" => new Json('Encoded Json Instance' . strval(rand(1, 100))),
"json string" => json_encode('json string ' . strval(rand(1, 100))),
"float" => floatval(
strval(rand(0, 100)) .
'.' .
strval(rand(1, 100))
),
],
];
/**
* Randomly select some data from the $data array and encode
* it as Json.
*/
$json = new Json($data[array_rand($data)]);
/**
* Instantiate a new JsonFilePath to emulate the path to the json file
* that the Json is expected to be written to. This will be used to
* query storage later.
*/
$expectedJsonFilePath = new JsonFilePath(
jsonStorageDirectoryPath: new JsonStorageDirectoryPath(
new Name(
new Text(
'JsonStorageDirectoryName' . strval(rand(1, 100))
)
)
),
location: new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
container: new Container(
/**
* In the future Container::determineType(Json $json) should
* be used to determine Type for Container.
*
* @see https://github.com/sevidmusic/PHPJsonStorageUtilities/issues/34
*
*/
IntegrationTestUtilities::determineType($json),
),
owner: new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
name: new Name(new Text('Name' . strval(rand(1, 100)))),
id: new Id(),
);
/**
* Write the json to storage
*/
$jsonFilesystemStorageDriver->write(
$json,
$expectedJsonFilePath->jsonStorageDirectoryPath(),
$expectedJsonFilePath->location(),
$expectedJsonFilePath->owner(),
$expectedJsonFilePath->name(),
$expectedJsonFilePath->id(),
);
/**
* Instantiate a JsonFilesystemStorageQuery that will be passed to
* the $jsonFilesystemStorageDriver->read() method to query the Json
* in storage.
*
* In this example the JsonFilesystemStorageQuery will only specify a
* single query parameter:
*
* @param JsonFilePath|null $jsonFilePath
*
* Though any combination of the following parameters is possible:
*
* @param JsonFilePath|null $jsonFilePath
* @param JsonStorageDirectoryPath|null $jsonStorageDirectoryPath
* @param Location|null $location
* @param Container|null $container
* @param Owner|null $owner
* @param Name|null $name
* @param Id|null $id
*
* If specified, the jsonFilePath parameter will always take
* precedence over the other parameters.
*
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
jsonFilePath: $expectedJsonFilePath
);
/**
* Call JsonFilesystemStorageDriver->read() to obtain a
* JsonCollection of the Json in storage that matches the
* specified JsonFilesystemStorageQuery.
*
* The JsonFilesystemStorageQuery in this example only specifies a
* jsonFilePath.
*
* If a json file exists at the path that matches the specified
* JsonFilePath, then it's Json will be the only Json included
* in the JsonCollection returned by read().
*
* If a json file does not exist at the path that matches the
* specified JsonFilePath then an empty JsonCollection will be
* returned by read().
*/
$jsonCollection = $jsonFilesystemStorageDriver->read(
$jsonFilesystemStorageQuery
);
/**
* Echo any stored Json that matched the JsonFilesystemStorageQuery
* that was passed to $jsonFilesystemStorageDriver->read()
*/
foreach($jsonCollection->collection() as $index => $json) {
echo PHP_EOL .
PHP_EOL .
IntegrationTestUtilities::applyANSIColor(
'Path to json file:', rand(1, 231)
) .
IntegrationTestUtilities::applyANSIColor(
(
$jsonFilesystemStorageQuery->jsonFilePath()?->__toString()
??
'path is unknown'
),
rand(1, 231)
) .
PHP_EOL .
PHP_EOL .
IntegrationTestUtilities::applyANSIColor(
'Json: ', rand(1, 231)
) .
IntegrationTestUtilities::applyANSIColor(
$json->__toString(),
rand(1, 231)
) .
PHP_EOL;
}
/**
* Instantiate a JsonFilesystemStorageQuery that will be used to
* delete the entire JsonStorageDirectory that was used in this
* example.
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
jsonStorageDirectoryPath: $expectedJsonFilePath->jsonStorageDirectoryPath()
);
/**
* Delete the JsonStorageDirectory that the Json in this example was
* written to.
*/
$jsonFilesystemStorageDriver->delete(
$jsonFilesystemStorageQuery
);
\Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery
<?php
/**
* This file demonstrates how to use the JsonFilesystemStorageQuery
* in conjunction with a JsonFilesystemStorageDriver to query Json
* that exists in storage.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\drivers\JsonFilesystemStorageDriver;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPJsonUtilities\classes\encoded\data\Json;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
use \Darling\PHPTextTypes\classes\strings\ClassString;
use \stdClass;
/**
* Instantiate a new JsonStorageDirectoryPath which will determine
* the path to the Json storage directory that all of the Json in
* this example will be written to.
*/
$jsonStorageDirectoryPath = new JsonStorageDirectoryPath(
new Name(
new Text('JsonStorageDirectoryName' . strval(rand(1, 100)))
)
);
/**
* Instantiate a JsonFilesystemStorageQuery that will be used to
* query the Json in storage.
*
* In this example the JsonFilesystemStorageQuery will only specify
* two query parameters:
*
* @param JsonStorageDirectoryPath|null $jsonStorageDirectoryPath
* @param Container|null $container
*
* Though any combination of the following parameters is possible:
*
* @param JsonFilePath|null $jsonFilePath
* @param JsonStorageDirectoryPath|null $jsonStorageDirectoryPath
* @param Location|null $location
* @param Container|null $container
* @param Owner|null $owner
* @param Name|null $name
* @param Id|null $id
*
* By specifying a JsonStorageDirectoryPath and a Container, this
* query will target all of the Json in storage that exists in
* the specified JsonStorageDirectoryPath whose Container
* matches the specified Container.
*
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
jsonStorageDirectoryPath: $jsonStorageDirectoryPath,
container: new Container(new ClassString(Id::class)),
);
/**
* Instantiate a new JsonFilesystemStorageDriver which will be used
* to write Json to storage.
*/
$jsonFilesystemStorageDriver = new JsonFilesystemStorageDriver();
/**
* Create an array of data.
*/
$data = [
new Id(),
'Foo' . strval(rand(1, 100)),
rand(PHP_INT_MIN, PHP_INT_MAX),
function () : void {},
new stdClass(),
new Json('Encoded Json Instance' . strval(rand(1, 100))),
json_encode('json string ' . strval(rand(1, 100))),
floatval(
strval(rand(0, 100)) .
'.' .
strval(rand(1, 100))
),
[
"Id" => new Id(),
"string" => 'Foo' . strval(rand(1, 100)),
"int" => rand(PHP_INT_MIN, PHP_INT_MAX),
"closure" => function () : void {},
"object" => new stdClass(),
"Json Instance" => new Json(
'Encoded Json Instance' . strval(rand(1, 100))
),
"json string" => json_encode(
'json string ' . strval(rand(1, 100))
),
"float" => floatval(
strval(rand(0, 100)) .
'.' .
strval(rand(1, 100))
),
],
];
/**
* Write a bunch of Json to storage.
*/
for($writes = 0; $writes <= rand(10, 20); $writes++) {
/**
* Randomly select some data from the $data array and encode
* it as Json.
*/
$json = new Json($data[array_rand($data)]);
/**
* Write the Json to storage
*/
$jsonFilesystemStorageDriver->write(
$json,
$jsonStorageDirectoryPath,
new Location(
new Name(new Text('Location' . strval($writes)))
),
new Owner(
new Name(new Text('Owner' . strval($writes)))
),
new Name(new Text('Name' . strval($writes))),
new Id(),
);
}
/**
* Call JsonFilesystemStorageDriver->storedJsonFilePaths() to obtain
* a JsonFilePathCollection of JsonFilePaths for the Json in storage
* that matches the specified JsonFilesystemStorageQuery.
*
* In this example the JsonFilesystemStorageQuery speicifes a
* JsonStorageDirectoryPath and a Container. This will target
* all of the Json in storage that exists in the specified
* JsonStorageDirectoryPath whose Container matches the
* specified Container.
*/
$jsonFilePathCollection = $jsonFilesystemStorageDriver->storedJsonFilePaths(
$jsonFilesystemStorageQuery
);
echo PHP_EOL .
IntegrationTestUtilities::applyANSIColor(
'The following query:', rand(1, 231)
) .
PHP_EOL;
echo PHP_EOL .
IntegrationTestUtilities::applyANSIColor(
$jsonFilesystemStorageQuery->__toString(), rand(1, 231)
) .
PHP_EOL;
echo PHP_EOL .
IntegrationTestUtilities::applyANSIColor(
'Produced the following matches:', rand(1, 231)
) .
PHP_EOL;
/**
* Echo the JsonFilePath and Json for any stored Json that
* matched the JsonFilesystemStorageQuery that was passed to
* the $jsonFilesystemStorageDriver->storedJsonFilePaths()
* method.
*/
foreach($jsonFilePathCollection->collection() as $jsonFilePath) {
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
jsonFilePath: $jsonFilePath
);
echo PHP_EOL . 'Json File Path: ' .
IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(),
rand(1, 231)
);
echo PHP_EOL .
'Json: ' .
IntegrationTestUtilities::applyANSIColor(
(
$jsonFilesystemStorageDriver->read(
jsonFilesystemStorageQuery: $jsonFilesystemStorageQuery
)->collection()[0] ?? ''
),
rand(1, 231)
) .
PHP_EOL .
PHP_EOL;
}
/**
* Delete the JsonStorageDirectory that the Json in this example was
* written to.
*/
$jsonFilesystemStorageDriver->delete(
$jsonFilesystemStorageQuery
);
\Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container
<?php
/**
* This file demonstrates the usage of a Container.
*
* A Container is used to identify Json in storage, and will
* typically be used in conjunction with a JsonFilePath or a
* JsonFilesystemStorageQuery.
*
* A Container's value is a hash of either the value returned by
* a ClassString instance's __toString() method, or a hash of
* one of the Type enumeration's cases.
*
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
/*
* Define an array of the possible cases defined by the
* Type enumeration.
*/
$types = Type::cases();
/**
* Instantiate a new Container using a randomly selected Type.
*/
$container = new Container($types[array_rand($types)]);
/**
* Use the Container as part of the definition of a JsonFilePath.
*/
$jsonFilePath = new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(new Name(new Text('Owner' . strval(rand(1, 100))))),
$container,
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
);
/**
* Use the Container as a JsonFilesystemStorageQuery parameter.
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
container: $container,
);
/**
* Echo the Container.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Container: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$container->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilePath that included the Container in it's definition.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Json File Path that uses specified $container: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilesystemStorageQuery that the Container was passed
* to as a query parameter.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'JsonFilesystemStorageQuery that uses specified $container: ',
rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilesystemStorageQuery->__toString(),
rand(1, 231),
);
\Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location
<?php
/**
* This file demonstrates the usage of a Location.
*
* A Location is used to identify Json in storage, and will
* typically be used in conjunction with a JsonFilePath or a
* JsonFilesystemStorageQuery.
*
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
/**
* Instantiate a new Location.
*/
$location = new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
);
/**
* Use the Location as part of the definition of a JsonFilePath.
*/
$jsonFilePath = new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
$location,
new Container(Type::Array),
new Owner(new Name(new Text('Owner' . strval(rand(1, 100))))),
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
);
/**
* Use the Location as a JsonFilesystemStorageQuery parameter.
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
location: $location,
);
/**
* Echo the Location.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Location: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$location->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilePath that included the Location in it's definition.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Json File Path that uses specified $location: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilesystemStorageQuery that the Location was passed
* to as a query parameter.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'JsonFilesystemStorageQuery that uses specified $location: ',
rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilesystemStorageQuery->__toString(),
rand(1, 231),
);
\Darling\PHPJsonStorageUtilities\classes\named\identifiers\NamedIdentifier
<?php
/**
* This file demonstrates the usage of a NamedIdentifier.
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\NamedIdentifier;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
$namedIdentifier = new NamedIdentifier(
new Name(new Text('NamedIdentifier' . strval(rand(1, 100))))
);
echo PHP_EOL .
'NamedIdentifier:' .
IntegrationTestUtilities::applyANSIColor(
$namedIdentifier->__toString(), rand(1, 231)
);
\Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner
<?php
/**
* This file demonstrates the usage of a Owner.
*
* A Owner is used to identify Json in storage, and will
* typically be used in conjunction with a JsonFilePath or a
* JsonFilesystemStorageQuery.
*
*/
namespace Darling\PHPJsonStorageUtilities\examples;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonFilePath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\paths\JsonStorageDirectoryPath;
use \Darling\PHPJsonStorageUtilities\classes\filesystem\storage\queries\JsonFilesystemStorageQuery;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Container;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Owner;
use \Darling\PHPJsonStorageUtilities\classes\named\identifiers\Location;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \Darling\PHPTextTypes\classes\strings\Name;
use \Darling\PHPTextTypes\classes\strings\Text;
/**
* Instantiate a new Owner.
*/
$owner = new Owner(
new Name(new Text('Owner' . strval(rand(1, 100))))
);
/**
* Use the Owner as part of the definition of a JsonFilePath.
*/
$jsonFilePath = new JsonFilePath(
new JsonStorageDirectoryPath(
new Name(
new Text(
'StorageDirectoryPathName' . strval(rand(1, 100))
)
)
),
new Location(
new Name(new Text('Location' . strval(rand(1, 100))))
),
new Container(Type::Array),
$owner,
new Name(new Text('Name' . strval(rand(1, 100)))),
new Id(),
);
/**
* Use the Owner as a JsonFilesystemStorageQuery parameter.
*/
$jsonFilesystemStorageQuery = new JsonFilesystemStorageQuery(
owner: $owner,
);
/**
* Echo the Owner.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Owner: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$owner->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilePath that included the Owner in it's definition.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'Json File Path that uses specified $owner: ', rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilePath->__toString(),
rand(1, 231),
);
/**
* Echo the JsonFilesystemStorageQuery that the Owner was passed
* to as a query parameter.
*/
echo PHP_EOL . IntegrationTestUtilities::applyANSIColor(
'JsonFilesystemStorageQuery that uses specified $owner: ',
rand(1, 231)
);
echo IntegrationTestUtilities::applyANSIColor(
$jsonFilesystemStorageQuery->__toString(),
rand(1, 231),
);
\Darling\enumerations\Type
<?php
/**
* This file demonstrates the usage the Type enum.
*
* The Type enum is typically used in conjunction with the
* gettype() function to match a values type.
*
*/
namespace Darling\PHPJsonStorageUtilities\examples;
use \Darling\PHPJsonStorageUtilities\enumerations\Type;
use \Darling\PHPJsonStorageUtilities\tests\IntegrationTestUtilities;
use \Darling\PHPTextTypes\classes\strings\Id;
use \stdClass;
include(
dirname(__DIR__, 1) .
DIRECTORY_SEPARATOR .
'vendor' .
DIRECTORY_SEPARATOR .
'autoload.php'
);
/** Open a resource */
$openResource = tmpfile();
/** Open and close a resource */
$closedResource = fopen(DIRECTORY_SEPARATOR . 'tmp', 'r');
if(is_resource($closedResource) && $closedResource !== false) {
fclose($closedResource);
}
/**
* Define an array of values of various types.
*/
$values = [
'foo',
1,
23.45,
true,
function (): void {},
[1, 2, ['3']],
null,
false,
new stdClass(),
$openResource,
$closedResource,
new Id(),
];
/**
* Pick a random value from the array of $values.
*
* @var mixed $value
*/
$value = $values[array_rand($values)];
/**
* Echo out the Type case that matches the $value's type.
*/
echo IntegrationTestUtilities::applyANSIColor('Type:', rand(1, 231));
echo IntegrationTestUtilities::applyANSIColor(
match(gettype($value)) {
Type::String->value => Type::String->value,
Type::Bool->value => Type::Bool->value,
Type::Int->value => Type::Int->value,
Type::Float->value => Type::Float->value,
Type::Array->value => Type::Array->value,
Type::Null->value => Type::Null->value,
Type::Object->value => Type::Object->value,
Type::Resource->value => Type::Resource->value,
Type::ResourceClosed->value => Type::ResourceClosed->value,
Type::UnknownType->value => Type::UnknownType->value,
},
rand(1, 231),
);