diff --git a/composer.json b/composer.json index cce2a54..5bb93c1 100644 --- a/composer.json +++ b/composer.json @@ -17,8 +17,10 @@ "rss": "https://git.bitbadger.solutions/bit-badger/pdo-document.rss", "docs": "https://bitbadger.solutions/open-source/pdo-document/" }, + "minimum-stability": "beta", "require": { "php": ">=8.2", + "bit-badger/inspired-by-fsharp": "^1", "netresearch/jsonmapper": "^4", "ext-pdo": "*", "phpoption/phpoption": "^1.9" diff --git a/composer.lock b/composer.lock index 4ae6774..efe8e2a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,53 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dc897c0ab21d662a65b3818331edd2f2", + "content-hash": "223a16e330809798fc103d89c35faaa7", "packages": [ + { + "name": "bit-badger/inspired-by-fsharp", + "version": "v1.0.0-beta1", + "source": { + "type": "git", + "url": "https://git.bitbadger.solutions/bit-badger/inspired-by-fsharp", + "reference": "efb3a4461edcb23e0dd82068adeb0591240870b0" + }, + "require": { + "php": "^8.2" + }, + "require-dev": { + "phpoption/phpoption": "^1", + "phpunit/phpunit": "^11" + }, + "type": "library", + "autoload": { + "psr-4": { + "BitBadger\\InspiredByFSharp\\": "./src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel J. Summers", + "email": "daniel@bitbadger.solutions", + "homepage": "https://bitbadger.solutions", + "role": "Developer" + } + ], + "description": "PHP utility classes whose functionality is inspired by their F# counterparts", + "keywords": [ + "option", + "result" + ], + "support": { + "email": "daniel@bitbadger.solutions", + "rss": "https://git.bitbadger.solutions/bit-badger/inspired-by-fsharp.rss", + "source": "https://git.bitbadger.solutions/bit-badger/inspired-by-fsharp" + }, + "time": "2024-07-28T21:35:11+00:00" + }, { "name": "netresearch/jsonmapper", "version": "v4.4.1", @@ -1816,7 +1861,7 @@ } ], "aliases": [], - "minimum-stability": "stable", + "minimum-stability": "beta", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, diff --git a/src/Configuration.php b/src/Configuration.php index 74ad318..a2b51db 100644 --- a/src/Configuration.php +++ b/src/Configuration.php @@ -8,9 +8,9 @@ declare(strict_types=1); namespace BitBadger\PDODocument; +use BitBadger\InspiredByFSharp\Option; use Exception; use PDO; -use PhpOption\{None, Option, Some}; /** * Common configuration for the document library @@ -55,10 +55,10 @@ class Configuration public static function useDSN(string $dsn): void { if (empty($dsn)) { - self::$mode = self::$pdoDSN = None::create(); + self::$mode = self::$pdoDSN = Option::None(); } else { - self::$mode = Some::create(Mode::deriveFromDSN($dsn)); - self::$pdoDSN = Some::create($dsn); + self::$mode = Option::Some(Mode::deriveFromDSN($dsn)); + self::$pdoDSN = Option::Some($dsn); } } @@ -66,14 +66,15 @@ class Configuration * Retrieve a new connection to the database * * @return PDO A new connection to the SQLite database with foreign key support enabled - * @throws Exception If this is called before a connection string is set + * @throws DocumentException If this is called before a connection string is set */ public static function dbConn(): PDO { if (is_null(self::$pdo)) { - $dsn = (self::$pdoDSN ?? None::create())->getOrThrow( - new DocumentException('Please provide a data source name (DSN) before attempting data access')); - self::$pdo = new PDO($dsn, $_ENV['PDO_DOC_USERNAME'] ?? self::$username, + if (self::$pdoDSN->isNone()) { + throw new DocumentException('Please provide a data source name (DSN) before attempting data access'); + } + self::$pdo = new PDO(self::$pdoDSN->get(), $_ENV['PDO_DOC_USERNAME'] ?? self::$username, $_ENV['PDO_DOC_PASSWORD'] ?? self::$password, self::$options); } @@ -88,8 +89,10 @@ class Configuration */ public static function mode(?string $process = null): Mode { - return self::$mode->getOrThrow( - new DocumentException('Database mode not set' . (is_null($process) ? '' : "; cannot $process"))); + if (self::$mode->isNone()) { + throw new DocumentException('Database mode not set' . (is_null($process) ? '' : "; cannot $process")); + } + return self::$mode->get(); } /** @@ -99,7 +102,7 @@ class Configuration */ public static function overrideMode(?Mode $mode): void { - self::$mode = Option::fromValue($mode); + self::$mode = Option::of($mode); } /** diff --git a/src/Custom.php b/src/Custom.php index 572fcb0..e01147c 100644 --- a/src/Custom.php +++ b/src/Custom.php @@ -8,11 +8,11 @@ declare(strict_types=1); namespace BitBadger\PDODocument; +use BitBadger\InspiredByFSharp\Option; use BitBadger\PDODocument\Mapper\Mapper; use PDO; use PDOException; use PDOStatement; -use PhpOption\{None, Option, Some}; /** * Functions to execute custom queries @@ -106,7 +106,7 @@ class Custom { try { $stmt = &self::runQuery("$query LIMIT 1", $parameters); - return ($first = $stmt->fetch(PDO::FETCH_ASSOC)) ? Some::create($mapper->map($first)) : None::create(); + return ($first = $stmt->fetch(PDO::FETCH_ASSOC)) ? Option::Some($mapper->map($first)) : Option::None(); } finally { $stmt = null; }