Compare commits

..

15 commits

16 changed files with 579 additions and 465 deletions

View file

@ -1,4 +1,4 @@
Copyright (c) 2023, flashwave <me@flash.moe> Copyright (c) 2023-2024, flashwave <me@flash.moe>
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without

View file

@ -1,5 +1,9 @@
# Sasae # Sasae
This library has been deprecated and its functionality is now implemented into [Index](https://patchii.net/flash/index).
## Original header
Sasae is a simple wrapper around some of Twig's functionality as well as making `Twig\Environment` a little bit more immutable. Sasae is a simple wrapper around some of Twig's functionality as well as making `Twig\Environment` a little bit more immutable.
While it's not a lot of extras, I often implement the added functionality across projects. While it's not a lot of extras, I often implement the added functionality across projects.
@ -8,7 +12,7 @@ The source file structure is meant to be similar to Twig's own.
## Requirements and Dependencies ## Requirements and Dependencies
Sasae currently targets **PHP 8.2**. Sasae currently targets **PHP 8.3**.
No additional requirements and/or dependencies at this time. No additional requirements and/or dependencies at this time.

View file

@ -1 +1 @@
1.0.2-dev 1.1.1

View file

@ -2,18 +2,17 @@
"name": "flashwave/sasae", "name": "flashwave/sasae",
"description": "A wrapper for Twig with added common functionality.", "description": "A wrapper for Twig with added common functionality.",
"type": "library", "type": "library",
"homepage": "https://railgun.sh/sasae",
"license": "bsd-3-clause-clear", "license": "bsd-3-clause-clear",
"minimum-stability": "dev",
"prefer-stable": true,
"require": { "require": {
"php": ">=8.2", "php": ">=8.3",
"twig/twig": "^3.7", "twig/twig": "^3.12",
"twig/html-extra": "^3.7", "twig/html-extra": "^3.12",
"flashwave/index": "dev-master" "flashwave/index": "^0.2408.40014"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^10.2", "phpunit/phpunit": "^11.2",
"phpstan/phpstan": "^1.10" "phpstan/phpstan": "^1.11"
}, },
"authors": [ "authors": [
{ {

818
composer.lock generated

File diff suppressed because it is too large Load diff

View file

@ -31,11 +31,5 @@
<ignore-tag>implements</ignore-tag> <ignore-tag>implements</ignore-tag>
</ignore-tags> </ignore-tags>
</api> </api>
<guide format="rst">
<source dsn=".">
<path>docs</path>
</source>
<output>guide</output>
</guide>
</version> </version>
</phpdocumentor> </phpdocumentor>

View file

@ -1,15 +1,18 @@
<?php <?php
// SasaeFilesystemCache.php
// Created: 2024-08-04
// Updated: 2024-08-04
namespace Sasae\Cache; namespace Sasae\Cache;
use Twig\Cache\FilesystemCache as TwigFilesystemCache; use Twig\Cache\FilesystemCache as TwigFilesystemCache;
/** /**
* Extends Twig's filesystem cache implementation with an alternate constructor. * Extends Twig's filesystem cache implementation with an alternate constructor.
*/ */
class SasaeFilesystemCache extends TwigFilesystemCache { class SasaeFilesystemCache extends TwigFilesystemCache {
/** /**
* string $path Directory path to store the cache in. * @param string $path Directory path to store the cache in.
* bool $autoReload Whether to refresh the cache if changes are detected. * @param bool $autoReload Whether to refresh the cache if changes are detected.
*/ */
public function __construct(string $path, bool $autoReload) { public function __construct(string $path, bool $autoReload) {
parent::__construct( parent::__construct(

View file

@ -1,11 +1,14 @@
<?php <?php
// SasaeExtension.php
// Created: 2024-08-04
// Updated: 2024-08-04
namespace Sasae\Extension; namespace Sasae\Extension;
use Index\ByteFormat; use Index\{ByteFormat,Index};
use Index\Environment as NdxEnvironment; use Sasae\{Sasae,SasaeEnvironment};
use Sasae\SasaeEnvironment; use Twig\{TwigFilter,TwigFunction};
use Twig\TwigFilter; use Twig\Environment as TwigEnvironment;
use Twig\TwigFunction;
use Twig\Extension\AbstractExtension as TwigAbstractExtension; use Twig\Extension\AbstractExtension as TwigAbstractExtension;
/** /**
@ -20,9 +23,9 @@ class SasaeExtension extends TwigAbstractExtension {
public function getFunctions() { public function getFunctions() {
return [ return [
new TwigFunction('ndx_version', NdxEnvironment::getIndexVersion(...)), new TwigFunction('ndx_version', Index::version(...)),
new TwigFunction('sasae_version', SasaeEnvironment::getSasaeVersion(...)), new TwigFunction('sasae_version', Sasae::version(...)),
new TwigFunction('twig_version', SasaeEnvironment::getTwigVersion(...)), new TwigFunction('twig_version', fn() => TwigEnvironment::VERSION),
]; ];
} }
} }

View file

@ -1,4 +1,8 @@
<?php <?php
// SasaeFilesystemLoader.php
// Created: 2024-08-04
// Updated: 2024-08-04
namespace Sasae\Loader; namespace Sasae\Loader;
use InvalidArgumentException; use InvalidArgumentException;

34
src/Sasae.php Normal file
View file

@ -0,0 +1,34 @@
<?php
// Sasae.php
// Created: 2024-08-04
// Updated: 2024-08-04
namespace Sasae;
/**
* Provides information about the Sasae library.
*/
final class Sasae {
public const PATH_SOURCE = __DIR__;
public const PATH_ROOT = self::PATH_SOURCE . DIRECTORY_SEPARATOR . '..';
public const PATH_VERSION = self::PATH_ROOT . DIRECTORY_SEPARATOR . 'VERSION';
/**
* Gets the current version of the Sasae library.
*
* Reads the VERSION file in the root of the Sasae directory.
* Returns 0.0.0 if reading the file failed for any reason.
*
* @return string Current version string.
*/
public static function version(): string {
if(!is_file(self::PATH_VERSION))
return '0.0.0';
$version = file_get_contents(self::PATH_VERSION);
if($version === false)
return '0.0.0';
return trim($version);
}
}

View file

@ -1,4 +1,8 @@
<?php <?php
// SasaeContext.php
// Created: 2024-08-04
// Updated: 2024-08-04
namespace Sasae; namespace Sasae;
use InvalidArgumentException; use InvalidArgumentException;
@ -70,7 +74,7 @@ class SasaeContext implements Stringable {
/** /**
* Renders the template to a string, taking additional variables that are not commit to local set. * Renders the template to a string, taking additional variables that are not commit to local set.
* *
* @param ?array<string, mixed> $vars Additional local variables, nullable to avoid additional function calls. * @param array<string, mixed>|null $vars Additional local variables, nullable to avoid additional function calls.
* @return string Rendered template. * @return string Rendered template.
*/ */
public function render(?array $vars = null): string { public function render(?array $vars = null): string {

View file

@ -1,20 +1,17 @@
<?php <?php
// SasaeEnvironment.php // SasaeEnvironment.php
// Created: 2023-08-24 // Created: 2023-08-24
// Updated: 2023-08-24 // Updated: 2024-08-04
namespace Sasae; namespace Sasae;
use InvalidArgumentException; use InvalidArgumentException;
use UnexpectedValueException; use UnexpectedValueException;
use Index\Version;
use Sasae\Cache\SasaeFilesystemCache; use Sasae\Cache\SasaeFilesystemCache;
use Sasae\Extension\SasaeExtension; use Sasae\Extension\SasaeExtension;
use Sasae\Loader\SasaeFilesystemLoader; use Sasae\Loader\SasaeFilesystemLoader;
use Twig\{TwigFilter,TwigFunction,TwigTest};
use Twig\Environment as TwigEnvironment; use Twig\Environment as TwigEnvironment;
use Twig\TwigFilter;
use Twig\TwigFunction;
use Twig\TwigTest;
use Twig\Cache\CacheInterface as TwigCacheInterface; use Twig\Cache\CacheInterface as TwigCacheInterface;
use Twig\Extension\ExtensionInterface as TwigExtensionInterface; use Twig\Extension\ExtensionInterface as TwigExtensionInterface;
use Twig\Extra\Html\HtmlExtension as TwigHtmlExtension; use Twig\Extra\Html\HtmlExtension as TwigHtmlExtension;
@ -26,10 +23,6 @@ use Twig\Loader\LoaderInterface as TwigLoaderInterface;
class SasaeEnvironment { class SasaeEnvironment {
private TwigEnvironment $env; private TwigEnvironment $env;
private static ?string $sasaeVersionString = null;
private static ?Version $sasaeVersion = null;
private static ?Version $twigVersion = null;
/** /**
* @param TwigLoaderInterface|string $loader A template loader instance or a path. * @param TwigLoaderInterface|string $loader A template loader instance or a path.
* @param TwigCacheInterface|array<string>|string|null $cache A caching driver. * @param TwigCacheInterface|array<string>|string|null $cache A caching driver.
@ -155,50 +148,4 @@ class SasaeEnvironment {
public function render(string $name, array $vars = []): string { public function render(string $name, array $vars = []): string {
return $this->env->render($name, $vars); return $this->env->render($name, $vars);
} }
/**
* Returns the current version of the Sasae library.
*
* @return Version
*/
public static function getSasaeVersion(): Version {
if(self::$sasaeVersion === null)
self::$sasaeVersion = Version::parse(self::getSasaeVersionString());
return self::$sasaeVersion;
}
/**
* Returns the current version of the Sasae library as a string.
*
* @return string
*/
public static function getSasaeVersionString(): string {
if(self::$sasaeVersionString === null) {
$body = file_get_contents(__DIR__ . '/../VERSION');
if($body === false)
throw new UnexpectedValueException('Was unable to read VERSION file.');
self::$sasaeVersionString = trim($body);
}
return self::$sasaeVersionString;
}
/**
* Returns the current version of the Twig library.
*
* @return Version
*/
public static function getTwigVersion(): Version {
if(self::$twigVersion === null)
self::$twigVersion = Version::parse(TwigEnvironment::VERSION);
return self::$twigVersion;
}
/**
* Returns the current version of the Twig library as a string.
*
* @return string
*/
public static function getTwigVersionString(): string {
return TwigEnvironment::VERSION;
}
} }

View file

@ -1,22 +1,25 @@
<?php <?php
// SasaeTest.php
// Created: 2024-08-04
// Updated: 2024-08-04
declare(strict_types=1); declare(strict_types=1);
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use Index\Environment; use PHPUnit\Framework\Attributes\CoversClass;
use Index\XString; use Index\{Index,XString};
use Sasae\SasaeContext; use Sasae\{Sasae,SasaeContext,SasaeEnvironment};
use Sasae\SasaeEnvironment;
use Sasae\Cache\SasaeFilesystemCache; use Sasae\Cache\SasaeFilesystemCache;
use Sasae\Extension\SasaeExtension; use Sasae\Extension\SasaeExtension;
use Sasae\Loader\SasaeFilesystemLoader; use Sasae\Loader\SasaeFilesystemLoader;
use Twig\Environment as TwigEnvironment;
/** #[CoversClass(Sasae::class)]
* @covers SasaeContext #[CoversClass(SasaeContext::class)]
* @covers SasaeEnvironment #[CoversClass(SasaeEnvironment::class)]
* @covers SasaeExtension #[CoversClass(SasaeFilesystemCache::class)]
* @covers SasaeFilesystemCache #[CoversClass(SasaeExtension::class)]
* @covers SasaeFilesystemLoader #[CoversClass(SasaeFilesystemLoader::class)]
*/
final class SasaeTest extends TestCase { final class SasaeTest extends TestCase {
public function testEverything(): void { public function testEverything(): void {
$env = new SasaeEnvironment( $env = new SasaeEnvironment(
@ -28,9 +31,9 @@ final class SasaeTest extends TestCase {
$env->addGlobal('global_var', 'Sasae global var'); $env->addGlobal('global_var', 'Sasae global var');
$env->addGlobal('expect', [ $env->addGlobal('expect', [
'ndx_version' => (string)Environment::getIndexVersion(), 'ndx_version' => Index::version(),
'sasae_version' => SasaeEnvironment::getSasaeVersionString(), 'sasae_version' => Sasae::version(),
'twig_version' => SasaeEnvironment::getTwigVersionString(), 'twig_version' => TwigEnvironment::VERSION,
]); ]);
$env->addFilter('test_filter', fn($text) => ('filter:' . $text)); $env->addFilter('test_filter', fn($text) => ('filter:' . $text));

30
tools/create-tag Executable file
View file

@ -0,0 +1,30 @@
#!/usr/bin/env php
<?php
$path = (function($path) {
if(!str_starts_with($path, '/'))
die('Cannot be bothered to support non-UNIX style paths, sorry!' . PHP_EOL);
while($path !== '/') {
$vPath = $path . DIRECTORY_SEPARATOR . 'VERSION';
if(is_file($vPath))
return $vPath;
$path = dirname($path);
}
})(__DIR__);
$version = file_get_contents($path);
if($version === false)
die('Failed to read VERSION file.' . PHP_EOL);
$version = trim($version);
$workingDir = getcwd();
try {
chdir(dirname($path));
echo shell_exec(sprintf('git tag v%s', $version));
echo shell_exec(sprintf('git push origin v%s', $version));
} finally {
chdir($workingDir);
}
echo $version . PHP_EOL;

View file

@ -1,8 +1,8 @@
#!/bin/bash #!/usr/bin/env bash
pushd . pushd .
cd $(dirname "$0") cd $(dirname "$0")
php update-headers.php ./update-headers
popd popd

1
tools/update-headers.php → tools/update-headers Normal file → Executable file
View file

@ -1,3 +1,4 @@
#!/usr/bin/env php
<?php <?php
// the point of index was so that i wouldn't have to copy things between projects // the point of index was so that i wouldn't have to copy things between projects
// here i am copying things from index // here i am copying things from index