From 645f5e9e48891e86c22740d702a14b661f9c85f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20N=C3=A9grier?= Date: Mon, 30 May 2016 16:32:26 +0200 Subject: [PATCH] Initial commit --- .gitignore | 5 + .travis.yml | 13 + README.md | 61 ++++ composer.json | 27 ++ phpunit.xml.dist | 28 ++ puli.json | 306 ++++++++++++++++++ src/DoctrineCacheBridgeServiceProvider.php | 27 ++ ...DoctrineCacheBridgeServiceProviderTest.php | 23 ++ 8 files changed, 490 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 README.md create mode 100644 composer.json create mode 100644 phpunit.xml.dist create mode 100644 puli.json create mode 100644 src/DoctrineCacheBridgeServiceProvider.php create mode 100644 tests/DoctrineCacheBridgeServiceProviderTest.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93a3fb5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.idea +vendor +.puli +composer.lock +build diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..23f4471 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,13 @@ +language: php + +php: + - 7.0 + +before_script: + - composer install --no-interaction + +script: + - phpunit + +after_script: + - php vendor/bin/coveralls -v diff --git a/README.md b/README.md new file mode 100644 index 0000000..c97f916 --- /dev/null +++ b/README.md @@ -0,0 +1,61 @@ +[![Build Status](https://travis-ci.org/thecodingmachine/psr-6-doctrine-bridge-universal-module.svg?branch=1.0)](https://travis-ci.org/thecodingmachine/psr-6-doctrine-bridge-universal-module) +[![Coverage Status](https://coveralls.io/repos/thecodingmachine/psr-6-doctrine-bridge-universal-module/badge.svg?branch=1.0&service=github)](https://coveralls.io/github/thecodingmachine/psr-6-doctrine-bridge-universal-module?branch=1.0) + + +# PSR6 to Doctrine cache universal module + +This package integrates [cache/psr-6-doctrine-bridge](https://github.com/php-cache/doctrine-bridge) (the bridge between Doctrine cache and PSR-6) in any [container-interop/service-provider](https://github.com/container-interop/service-provider) compatible framework/container. + +## Installation + +``` +composer require thecodingmachine/psr-6-doctrine-bridge-universal-module +``` + +Once installed, you need to register the [`TheCodingMachine\DoctrineCacheBridgeServiceProvider`](src/DoctrineCacheBridgeServiceProvider.php) into your container. + +If your container supports Puli integration, you have nothing to do. Otherwise, refer to your framework or container's documentation to learn how to register *service providers*. + +## Introduction + +This service provider will provide a default Doctrine cache implementation based on the already configured PSR-6 cache. + +It assumes there is already a configured service providing a PSR-6 cache pool. You can install a service provider providing this service using: + + +``` +composer require thecodingmachine/stash-universal-module +``` + +(this will install Stash and its related service-provider. Stash is a PSR-6 caching library) + +### Usage + +```php +use Doctrine\Common\Cache\CacheProvider; + +$cachePool = $container->get(CacheProvider::class); +echo $cachePool->get('my_cached_value'); +``` + +## Expected values / services + +This *service provider* expects the following configuration / services to be available: + +| Name | Compulsory | Description | +|-----------------|------------|----------------------------------------| +| `CacheItemPoolInterface::class` (or `CacheItemPoolInterface::class.[suffix]`) | A PSR-6 compatible cache pool. | + + +## Provided services + +This *service provider* provides the following services: + +| Service name | Description | +|-----------------------------|--------------------------------------| +| `Doctrine\Common\Cache\CacheProvider` | A Doctrine cache, this is actually a bridge to the PSR-6 pool. | +| `Doctrine\Common\Cache\Cache` | An alias to the `CacheProvider`. | + +## Extended services + +This *service provider* does not extend any service. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..6c629ad --- /dev/null +++ b/composer.json @@ -0,0 +1,27 @@ +{ + "name": "thecodingmachine/psr-6-doctrine-bridge-universal-module", + "description": "Cross-framework module for cache/psr-6-doctrine-bridge", + "license": "MIT", + "type": "library", + "autoload": { + "psr-4": { + "TheCodingMachine\\": "src/" + } + }, + "require": { + "php": ">=7.0", + "container-interop/service-provider": "~0.3.0", + "thecodingmachine/common-factories": "dev-master", + "cache/psr-6-doctrine-bridge": "^2.1" + }, + "require-dev": { + "puli/cli":"^1.0", + "puli/composer-plugin": "^1.0", + "mnapoli/simplex": "~0.2.0", + "phpunit/phpunit": "^5.0", + "satooshi/php-coveralls": "^1.0", + "thecodingmachine/stash-universal-module": "^1.0" + }, + "minimum-stability": "dev", + "prefer-stable": true +} \ No newline at end of file diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..c552f61 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,28 @@ + + + + + + ./tests/ + + + + + src + + + + + + + diff --git a/puli.json b/puli.json new file mode 100644 index 0000000..773ba91 --- /dev/null +++ b/puli.json @@ -0,0 +1,306 @@ +{ + "version": "1.0", + "name": "thecodingmachine/psr-6-doctrine-bridge-universal-module", + "bindings": { + "c08a65e9-2ac3-4431-8fc2-901261245004": { + "_class": "Puli\\Discovery\\Binding\\ClassBinding", + "class": "TheCodingMachine\\DoctrineCacheBridgeServiceProvider", + "type": "container-interop/service-provider" + } + }, + "config": { + "bootstrap-file": "vendor/autoload.php" + }, + "packages": { + "cache/psr-6-doctrine-bridge": { + "install-path": "vendor/cache/psr-6-doctrine-bridge", + "installer": "composer" + }, + "container-interop/container-interop": { + "install-path": "vendor/container-interop/container-interop", + "installer": "composer" + }, + "container-interop/service-provider": { + "install-path": "vendor/container-interop/service-provider", + "installer": "composer" + }, + "doctrine/cache": { + "install-path": "vendor/doctrine/cache", + "installer": "composer" + }, + "doctrine/instantiator": { + "install-path": "vendor/doctrine/instantiator", + "installer": "composer", + "env": "dev" + }, + "guzzle/guzzle": { + "install-path": "vendor/guzzle/guzzle", + "installer": "composer", + "env": "dev" + }, + "justinrainbow/json-schema": { + "install-path": "vendor/justinrainbow/json-schema", + "installer": "composer", + "env": "dev" + }, + "mnapoli/simplex": { + "install-path": "vendor/mnapoli/simplex", + "installer": "composer", + "env": "dev" + }, + "myclabs/deep-copy": { + "install-path": "vendor/myclabs/deep-copy", + "installer": "composer", + "env": "dev" + }, + "padraic/humbug_get_contents": { + "install-path": "vendor/padraic/humbug_get_contents", + "installer": "composer", + "env": "dev" + }, + "padraic/phar-updater": { + "install-path": "vendor/padraic/phar-updater", + "installer": "composer", + "env": "dev" + }, + "paragonie/random_compat": { + "install-path": "vendor/paragonie/random_compat", + "installer": "composer", + "env": "dev" + }, + "phpdocumentor/reflection-docblock": { + "install-path": "vendor/phpdocumentor/reflection-docblock", + "installer": "composer", + "env": "dev" + }, + "phpspec/prophecy": { + "install-path": "vendor/phpspec/prophecy", + "installer": "composer", + "env": "dev" + }, + "phpunit/php-code-coverage": { + "install-path": "vendor/phpunit/php-code-coverage", + "installer": "composer", + "env": "dev" + }, + "phpunit/php-file-iterator": { + "install-path": "vendor/phpunit/php-file-iterator", + "installer": "composer", + "env": "dev" + }, + "phpunit/php-text-template": { + "install-path": "vendor/phpunit/php-text-template", + "installer": "composer", + "env": "dev" + }, + "phpunit/php-timer": { + "install-path": "vendor/phpunit/php-timer", + "installer": "composer", + "env": "dev" + }, + "phpunit/php-token-stream": { + "install-path": "vendor/phpunit/php-token-stream", + "installer": "composer", + "env": "dev" + }, + "phpunit/phpunit": { + "install-path": "vendor/phpunit/phpunit", + "installer": "composer", + "env": "dev" + }, + "phpunit/phpunit-mock-objects": { + "install-path": "vendor/phpunit/phpunit-mock-objects", + "installer": "composer", + "env": "dev" + }, + "psr/cache": { + "install-path": "vendor/psr/cache", + "installer": "composer", + "env": "dev" + }, + "psr/log": { + "install-path": "vendor/psr/log", + "installer": "composer", + "env": "dev" + }, + "puli/cli": { + "install-path": "vendor/puli/cli", + "installer": "composer", + "env": "dev" + }, + "puli/composer-plugin": { + "install-path": "vendor/puli/composer-plugin", + "installer": "composer", + "env": "dev" + }, + "puli/discovery": { + "install-path": "vendor/puli/discovery", + "installer": "composer", + "env": "dev" + }, + "puli/manager": { + "install-path": "vendor/puli/manager", + "installer": "composer", + "env": "dev" + }, + "puli/repository": { + "install-path": "vendor/puli/repository", + "installer": "composer", + "env": "dev" + }, + "puli/url-generator": { + "install-path": "vendor/puli/url-generator", + "installer": "composer", + "env": "dev" + }, + "ramsey/uuid": { + "install-path": "vendor/ramsey/uuid", + "installer": "composer", + "env": "dev" + }, + "satooshi/php-coveralls": { + "install-path": "vendor/satooshi/php-coveralls", + "installer": "composer", + "env": "dev" + }, + "sebastian/code-unit-reverse-lookup": { + "install-path": "vendor/sebastian/code-unit-reverse-lookup", + "installer": "composer", + "env": "dev" + }, + "sebastian/comparator": { + "install-path": "vendor/sebastian/comparator", + "installer": "composer", + "env": "dev" + }, + "sebastian/diff": { + "install-path": "vendor/sebastian/diff", + "installer": "composer", + "env": "dev" + }, + "sebastian/environment": { + "install-path": "vendor/sebastian/environment", + "installer": "composer", + "env": "dev" + }, + "sebastian/exporter": { + "install-path": "vendor/sebastian/exporter", + "installer": "composer", + "env": "dev" + }, + "sebastian/global-state": { + "install-path": "vendor/sebastian/global-state", + "installer": "composer", + "env": "dev" + }, + "sebastian/object-enumerator": { + "install-path": "vendor/sebastian/object-enumerator", + "installer": "composer", + "env": "dev" + }, + "sebastian/recursion-context": { + "install-path": "vendor/sebastian/recursion-context", + "installer": "composer", + "env": "dev" + }, + "sebastian/resource-operations": { + "install-path": "vendor/sebastian/resource-operations", + "installer": "composer", + "env": "dev" + }, + "sebastian/version": { + "install-path": "vendor/sebastian/version", + "installer": "composer", + "env": "dev" + }, + "seld/jsonlint": { + "install-path": "vendor/seld/jsonlint", + "installer": "composer", + "env": "dev" + }, + "symfony/config": { + "install-path": "vendor/symfony/config", + "installer": "composer", + "env": "dev" + }, + "symfony/console": { + "install-path": "vendor/symfony/console", + "installer": "composer", + "env": "dev" + }, + "symfony/event-dispatcher": { + "install-path": "vendor/symfony/event-dispatcher", + "installer": "composer", + "env": "dev" + }, + "symfony/filesystem": { + "install-path": "vendor/symfony/filesystem", + "installer": "composer", + "env": "dev" + }, + "symfony/polyfill-mbstring": { + "install-path": "vendor/symfony/polyfill-mbstring", + "installer": "composer", + "env": "dev" + }, + "symfony/process": { + "install-path": "vendor/symfony/process", + "installer": "composer", + "env": "dev" + }, + "symfony/stopwatch": { + "install-path": "vendor/symfony/stopwatch", + "installer": "composer", + "env": "dev" + }, + "symfony/yaml": { + "install-path": "vendor/symfony/yaml", + "installer": "composer", + "env": "dev" + }, + "tedivm/stash": { + "install-path": "vendor/tedivm/stash", + "installer": "composer", + "env": "dev" + }, + "thecodingmachine/common-factories": { + "install-path": "vendor/thecodingmachine/common-factories", + "installer": "composer" + }, + "thecodingmachine/stash-universal-module": { + "install-path": "vendor/thecodingmachine/stash-universal-module", + "installer": "composer", + "env": "dev" + }, + "webmozart/assert": { + "install-path": "vendor/webmozart/assert", + "installer": "composer", + "env": "dev" + }, + "webmozart/console": { + "install-path": "vendor/webmozart/console", + "installer": "composer", + "env": "dev" + }, + "webmozart/expression": { + "install-path": "vendor/webmozart/expression", + "installer": "composer", + "env": "dev" + }, + "webmozart/glob": { + "install-path": "vendor/webmozart/glob", + "installer": "composer", + "env": "dev" + }, + "webmozart/json": { + "install-path": "vendor/webmozart/json", + "installer": "composer", + "env": "dev" + }, + "webmozart/path-util": { + "install-path": "vendor/webmozart/path-util", + "installer": "composer", + "env": "dev" + } + } +} diff --git a/src/DoctrineCacheBridgeServiceProvider.php b/src/DoctrineCacheBridgeServiceProvider.php new file mode 100644 index 0000000..e171935 --- /dev/null +++ b/src/DoctrineCacheBridgeServiceProvider.php @@ -0,0 +1,27 @@ + [self::class,'createCacheProvider'], + Cache::class => new Alias(CacheProvider::class), + ]; + } + + public static function createCacheProvider(ContainerInterface $container) : CacheProvider + { + return new DoctrineCacheBridge($container->get(CacheItemPoolInterface::class)); + } +} diff --git a/tests/DoctrineCacheBridgeServiceProviderTest.php b/tests/DoctrineCacheBridgeServiceProviderTest.php new file mode 100644 index 0000000..faba5fb --- /dev/null +++ b/tests/DoctrineCacheBridgeServiceProviderTest.php @@ -0,0 +1,23 @@ +register(new StashServiceProvider()); + $simplex->register(new DoctrineCacheBridgeServiceProvider()); + + $provider = $simplex->get(CacheProvider::class); + $this->assertInstanceOf(CacheProvider::class, $provider); + + $provider = $simplex->get(Cache::class); + $this->assertInstanceOf(CacheProvider::class, $provider); + } +}