Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions demos/hello-world/bin/be.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\Hello;

require dirname(__DIR__) . '/vendor/autoload.php';

use Be\Framework\BecomingInterface;
use Be\Pattern\Hello\Final\Hello;
use Be\Pattern\Hello\Input\HelloInput;
use Be\Pattern\Hello\Module\DevModule;
use Ray\Di\Injector;

use function assert;
use function dirname;
use function escapeshellarg;
use function passthru;
use function printf;

$injector = new Injector(new DevModule());
$becoming = $injector->getInstance(BecomingInterface::class);

$final = $becoming(new HelloInput(name: 'World'));
assert($final instanceof Hello);
printf("greeting: %s\n", $final->greeting);

echo "\n--- stree ---\n";
passthru('vendor/bin/stree ' . escapeshellarg(dirname(__DIR__) . '/var/log/hello-world.json'));
47 changes: 47 additions & 0 deletions demos/hello-world/src/Becoming/DevBecoming.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\Hello\Becoming;

use Be\Framework\Becoming;
use Be\Framework\BecomingInterface;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Override;

use function dirname;
use function file_put_contents;
use function is_dir;
use function json_encode;
use function mkdir;

use const JSON_PRETTY_PRINT;
use const JSON_UNESCAPED_SLASHES;
use const JSON_UNESCAPED_UNICODE;

final class DevBecoming implements BecomingInterface
{
public function __construct(
private readonly Becoming $becoming,
private readonly SemanticLoggerInterface $logger,
) {
}

#[Override]
public function __invoke(object $input): object
{
try {
return ($this->becoming)($input);
} finally {
$dir = dirname(__DIR__, 2) . '/var/log';
if (! is_dir($dir)) {
mkdir($dir, 0755, true);
}

file_put_contents(
$dir . '/hello-world.json',
json_encode($this->logger->flush(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . PHP_EOL,
);
}
}
}
3 changes: 1 addition & 2 deletions demos/hello-world/src/Module/AppModule.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@

namespace Be\Pattern\Hello\Module;

use Be\Pattern\Hello\Reason\Greeting;
use Be\Framework\Module\BeModule;
use Be\Pattern\Hello\Reason\Greeting;
use Ray\Di\AbstractModule;

final class AppModule extends AbstractModule
{
protected function configure(): void
{
// Install BeModule with demo's semantic namespace
$this->install(new BeModule('Be\Pattern\Hello\Semantic'));

$this->bind(Greeting::class);
Expand Down
26 changes: 26 additions & 0 deletions demos/hello-world/src/Module/DevModule.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\Hello\Module;

use Be\Framework\Becoming;
use Be\Framework\BecomingInterface;
use Be\Pattern\Hello\Becoming\DevBecoming;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Ray\Di\AbstractModule;
use Ray\Di\Scope;

final class DevModule extends AbstractModule
{
protected function configure(): void
{
$this->install(new AppModule());

$this->bind(Becoming::class);
$this->bind(BecomingInterface::class)->to(DevBecoming::class);
$this->bind(SemanticLoggerInterface::class)
->toProvider(DevSemanticLoggerProvider::class)
->in(Scope::SINGLETON);
}
}
21 changes: 21 additions & 0 deletions demos/hello-world/src/Module/DevSemanticLoggerProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\Hello\Module;

use Koriym\SemanticLogger\DevSemanticLogger;
use Koriym\SemanticLogger\SemanticLogger;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Override;
use Ray\Di\ProviderInterface;

/** @implements ProviderInterface<SemanticLoggerInterface> */
final class DevSemanticLoggerProvider implements ProviderInterface
{
#[Override]
public function get(): SemanticLoggerInterface
{
return new DevSemanticLogger(new SemanticLogger());
}
}
35 changes: 35 additions & 0 deletions demos/hello-world/var/log/hello-world.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"$schema": "https://koriym.github.io/Koriym.SemanticLogger/schemas/combined.json",
"open": {
"id": "becoming_open_1",
"type": "becoming_open",
"schemaUrl": "https://be-framework.org/schemas/becoming-open.json",
"context": {
"from": "Be\\Pattern\\Hello\\Input\\HelloInput",
"be": "Be\\Pattern\\Hello\\Final\\Hello",
"input": {
"name": "Be\\Pattern\\Hello\\Input\\HelloInput::name"
},
"inject": {
"greeting": "Be\\Pattern\\Hello\\Reason\\Greeting"
}
}
},
"close": {
"id": "becoming_final_1",
"type": "becoming_final",
"schemaUrl": "https://be-framework.org/schemas/becoming-final.json",
"context": {
"final": "Be\\Pattern\\Hello\\Final\\Hello",
"prop": {
"greeting": "Hello World"
}
},
"openId": "becoming_open_1",
"profile": {
"wallTime": 0.0008828639984130859,
"xdebug": [],
"xhprof": []
}
}
}
30 changes: 30 additions & 0 deletions demos/medical-triage/bin/be.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\MedicalTriage;

require dirname(__DIR__) . '/vendor/autoload.php';

use Be\Framework\BecomingInterface;
use Be\Pattern\MedicalTriage\Input\PatientInput;
use Be\Pattern\MedicalTriage\Module\DevModule;
use Ray\Di\Injector;

use function dirname;
use function escapeshellarg;
use function passthru;
use function printf;

$injector = new Injector(new DevModule());
$becoming = $injector->getInstance(BecomingInterface::class);

$final = $becoming(new PatientInput(
patientId: 'PT-10001',
chiefComplaint: 'severe chest pain',
consciousnessLevel: 0,
));
printf("triage: %s\n", $final::class);

echo "\n--- stree ---\n";
passthru('vendor/bin/stree ' . escapeshellarg(dirname(__DIR__) . '/var/log/medical-triage.json'));
47 changes: 47 additions & 0 deletions demos/medical-triage/src/Becoming/DevBecoming.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\MedicalTriage\Becoming;

use Be\Framework\Becoming;
use Be\Framework\BecomingInterface;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Override;

use function dirname;
use function file_put_contents;
use function is_dir;
use function json_encode;
use function mkdir;

use const JSON_PRETTY_PRINT;
use const JSON_UNESCAPED_SLASHES;
use const JSON_UNESCAPED_UNICODE;

final class DevBecoming implements BecomingInterface
{
public function __construct(
private readonly Becoming $becoming,
private readonly SemanticLoggerInterface $logger,
) {
}

#[Override]
public function __invoke(object $input): object
{
try {
return ($this->becoming)($input);
} finally {
$dir = dirname(__DIR__, 2) . '/var/log';
if (! is_dir($dir)) {
mkdir($dir, 0755, true);
}

file_put_contents(
$dir . '/medical-triage.json',
json_encode($this->logger->flush(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE) . PHP_EOL,
);
}
}
}
26 changes: 26 additions & 0 deletions demos/medical-triage/src/Module/DevModule.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\MedicalTriage\Module;

use Be\Framework\Becoming;
use Be\Framework\BecomingInterface;
use Be\Pattern\MedicalTriage\Becoming\DevBecoming;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Ray\Di\AbstractModule;
use Ray\Di\Scope;

final class DevModule extends AbstractModule
{
protected function configure(): void
{
$this->install(new AppModule());

$this->bind(Becoming::class);
$this->bind(BecomingInterface::class)->to(DevBecoming::class);
$this->bind(SemanticLoggerInterface::class)
->toProvider(DevSemanticLoggerProvider::class)
->in(Scope::SINGLETON);
}
}
21 changes: 21 additions & 0 deletions demos/medical-triage/src/Module/DevSemanticLoggerProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

declare(strict_types=1);

namespace Be\Pattern\MedicalTriage\Module;

use Koriym\SemanticLogger\DevSemanticLogger;
use Koriym\SemanticLogger\SemanticLogger;
use Koriym\SemanticLogger\SemanticLoggerInterface;
use Override;
use Ray\Di\ProviderInterface;

/** @implements ProviderInterface<SemanticLoggerInterface> */
final class DevSemanticLoggerProvider implements ProviderInterface
{
#[Override]
public function get(): SemanticLoggerInterface
{
return new DevSemanticLogger(new SemanticLogger());
}
}
79 changes: 79 additions & 0 deletions demos/medical-triage/var/log/medical-triage.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
{
"$schema": "https://koriym.github.io/Koriym.SemanticLogger/schemas/combined.json",
"open": {
"id": "becoming_open_2",
"type": "becoming_open",
"schemaUrl": "https://be-framework.org/schemas/becoming-open.json",
"context": {
"from": "Be\\Pattern\\MedicalTriage\\Being\\TriageLevelDetermined",
"be": "Be\\Pattern\\MedicalTriage\\Final\\EmergencyAdmitted",
"input": {
"being": "Be\\Pattern\\MedicalTriage\\Being\\TriageLevelDetermined::being",
"patientId": "Be\\Pattern\\MedicalTriage\\Being\\TriageLevelDetermined::patientId"
},
"inject": {}
},
"open": {
"id": "becoming_open_1",
"type": "becoming_open",
"schemaUrl": "https://be-framework.org/schemas/becoming-open.json",
"context": {
"from": "Be\\Pattern\\MedicalTriage\\Input\\PatientInput",
"be": "Be\\Pattern\\MedicalTriage\\Being\\TriageLevelDetermined",
"input": {
"patientId": "Be\\Pattern\\MedicalTriage\\Input\\PatientInput::patientId",
"chiefComplaint": "Be\\Pattern\\MedicalTriage\\Input\\PatientInput::chiefComplaint",
"consciousnessLevel": "Be\\Pattern\\MedicalTriage\\Input\\PatientInput::consciousnessLevel"
},
"inject": {
"protocol": "Be\\Pattern\\MedicalTriage\\Reason\\JTASProtocol"
}
}
}
},
"close": {
"id": "becoming_final_1",
"type": "becoming_final",
"schemaUrl": "https://be-framework.org/schemas/becoming-final.json",
"context": {
"final": "Be\\Pattern\\MedicalTriage\\Final\\EmergencyAdmitted",
"prop": {
"admissionId": "ADM-20260420-9b8b8250",
"status": "admitted",
"triageCode": "RED",
"being": {
"triageCode": "RED"
},
"patientId": "PT-10001"
}
},
"openId": "becoming_open_2",
"profile": {
"wallTime": 0.0006999969482421875,
"xdebug": [],
"xhprof": []
},
"close": {
"id": "becoming_being_1",
"type": "becoming_being",
"schemaUrl": "https://be-framework.org/schemas/becoming-being.json",
"context": {
"being": "Be\\Pattern\\MedicalTriage\\Being\\TriageLevelDetermined",
"prop": {
"being": {
"triageCode": "RED"
},
"patientId": "PT-10001",
"chiefComplaint": "severe chest pain",
"consciousnessLevel": 0
}
},
"openId": "becoming_open_1",
"profile": {
"wallTime": 0.001873016357421875,
"xdebug": [],
"xhprof": []
}
}
}
}
Loading
Loading