From e0a9b4b9456c18e88ae37d4b6e9ab36aff49ca5c Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 3 Mar 2018 11:29:15 +0000 Subject: [PATCH 1/2] pre-api doc change - not all passing --- .web-server-pid | 1 + Makefile | 6 + app/AppKernel.php | 3 +- app/config/config.yml | 26 +- app/config/config_acceptance.yml | 15 +- app/config/config_dev.yml | 8 +- behat.yml | 2 +- composer.json | 53 +- composer.lock | 2063 ++++++++++------- docker-compose.yml | 13 + .../Controller/AccountsController.php | 10 +- src/AppBundle/Controller/FilesController.php | 8 +- src/AppBundle/Controller/UsersController.php | 9 +- .../Features/Context/RestApiContext.php | 306 ++- src/AppBundle/Features/account.feature | 2 +- .../Features/developer_experience.feature | 2 +- src/AppBundle/Features/file.feature | 2 +- src/AppBundle/Features/user.feature | 6 +- .../Authorization/Voter/AccountVoter.php | 13 +- .../Authorization/Voter/FileVoter.php | 13 +- .../Authorization/Voter/UserVoter.php | 11 +- var/SymfonyRequirements.php | 6 - web/app.php | 1 - web/app_acceptance.php | 1 - web/app_dev.php | 1 - web/config.php | 2 +- 26 files changed, 1569 insertions(+), 1014 deletions(-) create mode 100644 .web-server-pid create mode 100644 Makefile create mode 100644 docker-compose.yml diff --git a/.web-server-pid b/.web-server-pid new file mode 100644 index 0000000..03dbf99 --- /dev/null +++ b/.web-server-pid @@ -0,0 +1 @@ +127.0.0.1:8000 \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3f0a582 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +dev: + @docker-compose down && \ + docker-compose build --pull --no-cache && \ + docker-compose \ + -f docker-compose.yml \ + up -d --remove-orphans \ No newline at end of file diff --git a/app/AppKernel.php b/app/AppKernel.php index dfa28a0..30e3abc 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -21,7 +21,7 @@ public function registerBundles() new Nelmio\ApiDocBundle\NelmioApiDocBundle(), new JMS\SerializerBundle\JMSSerializerBundle(), new FOS\UserBundle\FOSUserBundle(), - new Csa\Bundle\GuzzleBundle\CsaGuzzleBundle(), + new EightPoints\Bundle\GuzzleBundle\EightPointsGuzzleBundle(), new Oneup\FlysystemBundle\OneupFlysystemBundle(), new Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle(), @@ -31,6 +31,7 @@ public function registerBundles() if (in_array($this->getEnvironment(), ['dev', 'test', 'acceptance'], true)) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); + $bundles[] = new Symfony\Bundle\WebServerBundle\WebServerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); } diff --git a/app/config/config.yml b/app/config/config.yml index 5b6f994..af126c6 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -33,6 +33,10 @@ framework: http_method_override: true assets: ~ +sensio_framework_extra: + view: + annotations: true + # Twig Configuration twig: debug: "%kernel.debug%" @@ -104,11 +108,9 @@ fos_user: # FOS REST Bundle fos_rest: body_listener: true - format_listener: true param_fetcher_listener: true view: view_response_listener: 'force' - exception_wrapper_handler: null formats: jsonp: true json: true @@ -116,17 +118,21 @@ fos_rest: rss: false mime_types: json: ['application/json', 'application/x-json'] - jpg: 'image/jpeg' - png: 'image/png' + jpg: ['image/jpeg'] + png: ['image/png'] jsonp_handler: ~ routing_loader: default_format: json include_format: false format_listener: rules: - - { path: ^/, priorities: [ json, jsonp ], fallback_format: ~, prefer_extension: true } - exception: - enabled: true + - { path: ^/, fallback_format: json, attributes: { _controller: 'fos_rest.exception.twig_controller:showAction' } } + - { path: ^/, fallback_format: html } + access_denied_listener: true + exception: true + serializer: + serialize_null: true + # Lexik JWT Auth @@ -137,9 +143,9 @@ lexik_jwt_authentication: token_ttl: %jwt_token_ttl% -# CSA Guzzle -csa_guzzle: - profiler: %kernel.debug% +# Guzzle +eight_points_guzzle: + logging: %kernel.debug% # JMS Serializer diff --git a/app/config/config_acceptance.yml b/app/config/config_acceptance.yml index fc51426..2c3b74b 100644 --- a/app/config/config_acceptance.yml +++ b/app/config/config_acceptance.yml @@ -9,20 +9,17 @@ framework: web_profiler: toolbar: true -doctrine: - dbal: - dbname: "%database_name%_acceptance" - -csa_guzzle: - logger: true +eight_points_guzzle: + logging: true clients: local_test_api: - config: - base_url: http://symfony-rest-example.dev/app_acceptance.php/ + base_url: http://127.0.0.1:8000/app_dev.php/ # Oneup Flysystem oneup_flysystem: adapters: local_adapter: local: - directory: %kernel.root_dir%/../features/uploadTemp \ No newline at end of file + directory: %kernel.root_dir%/../features/uploadTemp + + diff --git a/app/config/config_dev.yml b/app/config/config_dev.yml index e6fb76d..3532f0b 100644 --- a/app/config/config_dev.yml +++ b/app/config/config_dev.yml @@ -35,9 +35,9 @@ monolog: # delivery_address: me@example.com -csa_guzzle: - logger: true +eight_points_guzzle: + logging: true clients: local_test_api: - config: - base_url: http://symfony-rest-example.dev/app_dev.php/ + base_url: http://127.0.0.1:8000/app_dev.php/ +# base_url: http://symfony-rest-example.dev/app_dev.php/ diff --git a/behat.yml b/behat.yml index a4f4eaf..542232f 100644 --- a/behat.yml +++ b/behat.yml @@ -8,7 +8,7 @@ default: - FeatureContext: doctrine: "@doctrine" - AppBundle\Features\Context\RestApiContext: - client: "@csa_guzzle.client.local_test_api" + client: "@eight_points_guzzle.client.local_test_api" dummyDataPath: "%paths.base%/features/Dummy/" - AppBundle\Features\Context\AccountSetupContext: userManager: "@fos_user.user_manager" diff --git a/composer.json b/composer.json index 8b5b67a..d8d292e 100644 --- a/composer.json +++ b/composer.json @@ -4,53 +4,50 @@ "type": "project", "autoload": { "psr-4": { - "": "src/" + "AppBundle\\": "src/AppBundle" }, - "classmap": [ - "app/AppKernel.php", - "app/AppCache.php" - ] + "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } + "psr-4": { "Tests\\": "tests/" }, + "files": [ "vendor/symfony/symfony/src/Symfony/Component/VarDumper/Resources/functions/dump.php" ] }, "require": { "php": ">=5.5.9", - "symfony/symfony": "3.0.*", - "doctrine/orm": "^2.5", "doctrine/doctrine-bundle": "^1.6", - "doctrine/doctrine-cache-bundle": "^1.2", - "symfony/swiftmailer-bundle": "^2.3", - "symfony/monolog-bundle": "^2.8", - "sensio/distribution-bundle": "^5.0", - "sensio/framework-extra-bundle": "^3.0.2", + "doctrine/orm": "^2.5", "incenteev/composer-parameter-handler": "^2.0", + "sensio/distribution-bundle": "^5.0.19", + "sensio/framework-extra-bundle": "^3.0.2", + "symfony/monolog-bundle": "^3.1.0", + "symfony/polyfill-apcu": "^1.0", + "symfony/swiftmailer-bundle": "^2.3.10", + "symfony/symfony": "3.3.*", + "twig/twig": "2.4.4", - "nelmio/cors-bundle": "^1.4", + "nelmio/cors-bundle": "^1.5", "nelmio/api-doc-bundle": "^2.11", - "friendsofsymfony/rest-bundle": "^1.7", - "csa/guzzle-bundle": "^1.3", + "friendsofsymfony/rest-bundle": "^2.3.1", "jms/serializer-bundle": "^1.1", "oneup/flysystem-bundle": "^1.2", "friendsofsymfony/user-bundle": "dev-master", - "lexik/jwt-authentication-bundle": "dev-master" - + "lexik/jwt-authentication-bundle": "dev-master", + "eightpoints/guzzle-bundle": "^7.3" }, "require-dev": { "sensio/generator-bundle": "^3.0", - "symfony/phpunit-bridge": "^2.7", + "symfony/phpunit-bridge": "^3.0", "phpspec/phpspec": "^2.4", "behat/behat": "dev-master", "behat/symfony2-extension": "^2.1", - "phpunit/phpunit": "^5.1" + "phpunit/phpunit": "^5.1", + "symfony/web-server-bundle": "3.3.16" }, "minimum-stability": "stable", "scripts": { - "post-install-cmd": [ + "symfony-scripts": [ "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", @@ -58,13 +55,11 @@ "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" ], + "post-install-cmd": [ + "@symfony-scripts" + ], "post-update-cmd": [ - "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", - "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" + "@symfony-scripts" ] }, "extra": { diff --git a/composer.lock b/composer.lock index 6e9ecd3..f7a25cb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,50 +4,41 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "21205c3218e6e16743247467e86a17e5", + "content-hash": "ce7953768d5240e5f657ff61b2c731ec", "packages": [ { - "name": "csa/guzzle-bundle", - "version": "v1.3.11", + "name": "composer/ca-bundle", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/csarrazi/CsaGuzzleBundle.git", - "reference": "0294a55b241504bca179d4db5f82ce62d8bb28ad" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/csarrazi/CsaGuzzleBundle/zipball/0294a55b241504bca179d4db5f82ce62d8bb28ad", - "reference": "0294a55b241504bca179d4db5f82ce62d8bb28ad", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~4.0|~5.0", - "guzzlehttp/log-subscriber": "~1.0", - "php": ">=5.4.0", - "symfony/expression-language": "~2.4|~3.0", - "symfony/framework-bundle": "~2.3|~3.0", - "twig/twig": "~1.12" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" }, "require-dev": { - "doctrine/cache": "~1.1", - "guzzlehttp/guzzle-services": "~0.3", - "phpunit/phpunit": "~4.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/web-profiler-bundle": "~2.3" + "phpunit/phpunit": "^4.8.35", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" }, - "suggest": { - "doctrine/cache": "Allows caching of responses", - "guzzlehttp/guzzle-services": "Allow web service description" - }, - "type": "symfony-bundle", + "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Csa\\Bundle\\GuzzleBundle\\": "src" + "Composer\\CaBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -56,39 +47,47 @@ ], "authors": [ { - "name": "Charles Sarrazin", - "email": "charles@sarraz.in" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "A bundle integrating GuzzleHttp >= 4.0", - "time": "2015-11-17T00:02:55+00:00" + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2017-11-29T09:37:33+00:00" }, { "name": "doctrine/annotations", - "version": "v1.3.1", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558" + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/bd4461328621bde0ae6b1b2675fbc6aca4ceb558", - "reference": "bd4461328621bde0ae6b1b2675fbc6aca4ceb558", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.6.1" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -129,37 +128,41 @@ "docblock", "parser" ], - "time": "2016-12-30T15:59:45+00:00" + "time": "2017-12-06T07:11:42+00:00" }, { "name": "doctrine/cache", - "version": "v1.6.1", + "version": "v1.7.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", - "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b3217d58609e9c8e661cd41357a54d926c4a2a1a", + "reference": "b3217d58609e9c8e661cd41357a54d926c4a2a1a", "shasum": "" }, "require": { - "php": "~5.5|~7.0" + "php": "~7.1" }, "conflict": { "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpunit/phpunit": "~4.8|~5.0", - "predis/predis": "~1.0", - "satooshi/php-coveralls": "~0.6" + "alcaeus/mongo-php-adapter": "^1.1", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^5.7", + "predis/predis": "~1.0" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -199,24 +202,24 @@ "cache", "caching" ], - "time": "2016-10-29T11:16:17+00:00" + "time": "2017-08-25T07:02:50+00:00" }, { "name": "doctrine/collections", - "version": "v1.4.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", - "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", + "reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1" }, "require-dev": { "doctrine/coding-standard": "~0.1@dev", @@ -266,20 +269,20 @@ "collections", "iterator" ], - "time": "2017-01-03T10:49:41+00:00" + "time": "2017-07-22T10:37:32+00:00" }, { "name": "doctrine/common", - "version": "v2.7.2", + "version": "v2.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "930297026c8009a567ac051fd545bf6124150347" + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/930297026c8009a567ac051fd545bf6124150347", - "reference": "930297026c8009a567ac051fd545bf6124150347", + "url": "https://api.github.com/repos/doctrine/common/zipball/f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", + "reference": "f68c297ce6455e8fd794aa8ffaf9fa458f6ade66", "shasum": "" }, "require": { @@ -288,15 +291,15 @@ "doctrine/collections": "1.*", "doctrine/inflector": "1.*", "doctrine/lexer": "1.*", - "php": "~5.6|~7.0" + "php": "~7.1" }, "require-dev": { - "phpunit/phpunit": "^5.4.6" + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.7.x-dev" + "dev-master": "2.8.x-dev" } }, "autoload": { @@ -339,28 +342,30 @@ "persistence", "spl" ], - "time": "2017-01-13T14:02:13+00:00" + "time": "2017-08-31T08:43:38+00:00" }, { "name": "doctrine/dbal", - "version": "v2.5.12", + "version": "v2.6.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44" + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/7b9e911f9d8b30d43b96853dab26898c710d8f44", - "reference": "7b9e911f9d8b30d43b96853dab26898c710d8f44", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/e3eed9b1facbb0ced3a0995244843a189e7d1b13", + "reference": "e3eed9b1facbb0ced3a0995244843a189e7d1b13", "shasum": "" }, "require": { - "doctrine/common": ">=2.4,<2.8-dev", - "php": ">=5.3.2" + "doctrine/common": "^2.7.1", + "ext-pdo": "*", + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*", + "phpunit/phpunit": "^5.4.6", + "phpunit/phpunit-mock-objects": "!=3.2.4,!=3.2.5", "symfony/console": "2.*||^3.0" }, "suggest": { @@ -372,7 +377,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -410,41 +415,45 @@ "persistence", "queryobject" ], - "time": "2017-02-08T12:53:47+00:00" + "time": "2017-11-19T13:38:54+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "1.6.7", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "a01d99bc6c9a6c8a8ace0012690099dd957ce9b9" + "reference": "eb6e4fb904a459be28872765ab6e2d246aac7c87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/a01d99bc6c9a6c8a8ace0012690099dd957ce9b9", - "reference": "a01d99bc6c9a6c8a8ace0012690099dd957ce9b9", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/eb6e4fb904a459be28872765ab6e2d246aac7c87", + "reference": "eb6e4fb904a459be28872765ab6e2d246aac7c87", "shasum": "" }, "require": { - "doctrine/dbal": "~2.3", - "doctrine/doctrine-cache-bundle": "~1.0", - "jdorn/sql-formatter": "~1.1", - "php": ">=5.5.9", - "symfony/console": "~2.7|~3.0", - "symfony/dependency-injection": "~2.7|~3.0", - "symfony/doctrine-bridge": "~2.7|~3.0", - "symfony/framework-bundle": "~2.7|~3.0" + "doctrine/dbal": "^2.5.12", + "doctrine/doctrine-cache-bundle": "~1.2", + "jdorn/sql-formatter": "^1.2.16", + "php": "^5.5.9|^7.0", + "symfony/console": "~2.7|~3.0|~4.0", + "symfony/dependency-injection": "~2.7|~3.0|~4.0", + "symfony/doctrine-bridge": "~2.7|~3.0|~4.0", + "symfony/framework-bundle": "~2.7|~3.0|~4.0" + }, + "conflict": { + "symfony/http-foundation": "<2.6" }, "require-dev": { "doctrine/orm": "~2.3", - "phpunit/phpunit": "~4", + "phpunit/phpunit": "^4.8.36|^5.7|^6.4", "satooshi/php-coveralls": "^1.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/property-info": "~2.8|~3.0", - "symfony/validator": "~2.7|~3.0", - "symfony/yaml": "~2.7|~3.0", - "twig/twig": "~1.10|~2.0" + "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", + "symfony/property-info": "~2.8|~3.0|~4.0", + "symfony/validator": "~2.7|~3.0|~4.0", + "symfony/web-profiler-bundle": "~2.7|~3.0|~4.0", + "symfony/yaml": "~2.7|~3.0|~4.0", + "twig/twig": "~1.26|~2.0" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -453,7 +462,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -491,27 +500,27 @@ "orm", "persistence" ], - "time": "2017-01-16T12:01:26+00:00" + "time": "2017-11-24T13:09:19+00:00" }, { "name": "doctrine/doctrine-cache-bundle", - "version": "1.3.0", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504" + "reference": "9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504", - "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504", + "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1", + "reference": "9baecbd6bfdd1123b0cf8c1b88fee0170a84ddd1", "shasum": "" }, "require": { "doctrine/cache": "^1.4.2", "doctrine/inflector": "~1.0", "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.2|~3.0" + "symfony/doctrine-bridge": "~2.2|~3.0|~4.0" }, "require-dev": { "instaclick/coding-standard": "~1.1", @@ -519,15 +528,15 @@ "instaclick/symfony2-coding-standard": "dev-remaster", "phpunit/phpunit": "~4", "predis/predis": "~0.8", - "satooshi/php-coveralls": "~0.6.1", + "satooshi/php-coveralls": "^1.0", "squizlabs/php_codesniffer": "~1.5", - "symfony/console": "~2.2|~3.0", - "symfony/finder": "~2.2|~3.0", - "symfony/framework-bundle": "~2.2|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/console": "~2.2|~3.0|~4.0", + "symfony/finder": "~2.2|~3.0|~4.0", + "symfony/framework-bundle": "~2.2|~3.0|~4.0", + "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", "symfony/security-acl": "~2.3|~3.0", - "symfony/validator": "~2.2|~3.0", - "symfony/yaml": "~2.2|~3.0" + "symfony/validator": "~2.2|~3.0|~4.0", + "symfony/yaml": "~2.2|~3.0|~4.0" }, "suggest": { "symfony/security-acl": "For using this bundle to cache ACLs" @@ -535,7 +544,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -579,37 +588,37 @@ "cache", "caching" ], - "time": "2016-01-26T17:28:51+00:00" + "time": "2017-10-12T17:23:29+00:00" }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "5527a48b7313d15261292c149e55e26eae771b0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a", + "reference": "5527a48b7313d15261292c149e55e26eae771b0a", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -646,36 +655,36 @@ "singularize", "string" ], - "time": "2015-11-06T14:35:42+00:00" + "time": "2018-01-09T20:05:19+00:00" }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -700,7 +709,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" }, { "name": "doctrine/lexer", @@ -758,38 +767,40 @@ }, { "name": "doctrine/orm", - "version": "v2.5.6", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b" + "reference": "87ee409783a4a322b5597ebaae558661404055a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/e6c434196c8ef058239aaa0724b4aadb0107940b", - "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/87ee409783a4a322b5597ebaae558661404055a7", + "reference": "87ee409783a4a322b5597ebaae558661404055a7", "shasum": "" }, "require": { - "doctrine/cache": "~1.4", - "doctrine/collections": "~1.2", - "doctrine/common": ">=2.5-dev,<2.8-dev", - "doctrine/dbal": ">=2.5-dev,<2.6-dev", - "doctrine/instantiator": "~1.0.1", + "doctrine/annotations": "~1.5", + "doctrine/cache": "~1.6", + "doctrine/collections": "^1.4", + "doctrine/common": "^2.7.1", + "doctrine/dbal": "^2.6", + "doctrine/instantiator": "~1.1", "ext-pdo": "*", - "php": ">=5.4", - "symfony/console": "~2.5|~3.0" + "php": "^7.1", + "symfony/console": "~3.0|~4.0" }, "require-dev": { - "phpunit/phpunit": "~4.0", - "symfony/yaml": "~2.3|~3.0" + "doctrine/coding-standard": "^1.0", + "phpunit/phpunit": "^6.5", + "squizlabs/php_codesniffer": "^3.2", + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" }, "bin": [ - "bin/doctrine", - "bin/doctrine.php" + "bin/doctrine" ], "type": "library", "extra": { @@ -798,8 +809,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" + "psr-4": { + "Doctrine\\ORM\\": "lib/Doctrine/ORM" } }, "notification-url": "https://packagist.org/downloads/", @@ -822,6 +833,10 @@ { "name": "Jonathan Wage", "email": "jonwage@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" } ], "description": "Object-Relational-Mapper for PHP", @@ -830,68 +845,199 @@ "database", "orm" ], - "time": "2016-12-18T15:42:34+00:00" + "time": "2018-02-27T07:30:56+00:00" + }, + { + "name": "eightpoints/guzzle-bundle", + "version": "7.3.0", + "source": { + "type": "git", + "url": "https://github.com/8p/EightPointsGuzzleBundle.git", + "reference": "1b663153f860214f18a18d8df6bf5f0592689550" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/8p/EightPointsGuzzleBundle/zipball/1b663153f860214f18a18d8df6bf5f0592689550", + "reference": "1b663153f860214f18a18d8df6bf5f0592689550", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "~6.0", + "php": ">=7.0", + "psr/log": "~1.0", + "symfony/expression-language": "~2.7|~3.0|~4.0", + "symfony/framework-bundle": "~2.7|~3.0|~4.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.1", + "symfony/var-dumper": "~2.7|~3.0|~4.0", + "twig/twig": "~1.5|~2.0" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "EightPoints\\Bundle\\GuzzleBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Community", + "homepage": "https://github.com/8p/GuzzleBundle/contributors" + }, + { + "name": "Florian Preusner", + "email": "florian.preusner@8points.de", + "homepage": "https://github.com/florianpreusner" + } + ], + "description": "Integrates Guzzle 6.x, a PHP HTTP Client, into Symfony 2/3/4. Comes with easy and powerful configuration options and optional plugins.", + "homepage": "https://github.com/8p/GuzzleBundle", + "keywords": [ + "Guzzle", + "bundle", + "client", + "curl", + "http client", + "rest", + "symfony", + "web service" + ], + "time": "2018-01-14T20:52:44+00:00" + }, + { + "name": "fig/link-util", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link-util.git", + "reference": "1a07821801a148be4add11ab0603e4af55a72fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link-util/zipball/1a07821801a148be4add11ab0603e4af55a72fac", + "reference": "1a07821801a148be4add11ab0603e4af55a72fac", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/link": "~1.0@dev" + }, + "require-dev": { + "phpunit/phpunit": "^5.1", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fig\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common utility implementations for HTTP links", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "time": "2016-10-17T18:31:11+00:00" }, { "name": "friendsofsymfony/rest-bundle", - "version": "1.7.7", - "target-dir": "FOS/RestBundle", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", - "reference": "c79b7e5df96e5581591ceb6a026bd4e5f9346de0" + "reference": "1abdf3d82502ac67b93c7f84c844fa147f0ec70e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/c79b7e5df96e5581591ceb6a026bd4e5f9346de0", - "reference": "c79b7e5df96e5581591ceb6a026bd4e5f9346de0", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/1abdf3d82502ac67b93c7f84c844fa147f0ec70e", + "reference": "1abdf3d82502ac67b93c7f84c844fa147f0ec70e", "shasum": "" }, "require": { - "doctrine/inflector": "~1.0", - "php": "^5.3.9|~7.0", - "psr/log": "~1.0", - "symfony/framework-bundle": "~2.3|~3.0", - "symfony/http-kernel": "^2.3.24|~3.0", - "willdurand/jsonp-callback-validator": "~1.0", - "willdurand/negotiation": "~1.2" + "doctrine/inflector": "^1.0", + "php": "^5.5.9|~7.0", + "psr/log": "^1.0", + "symfony/config": "^2.7|^3.0|^4.0", + "symfony/debug": "^2.7|^3.0|^4.0", + "symfony/dependency-injection": "^2.7|^3.0|^4.0", + "symfony/event-dispatcher": "^2.7|^3.0|^4.0", + "symfony/finder": "^2.7|^3.0|^4.0", + "symfony/framework-bundle": "^2.7|^3.0|^4.0", + "symfony/http-foundation": "^2.7|^3.0|^4.0", + "symfony/http-kernel": "^2.7|^3.0|^4.0", + "symfony/routing": "^2.7|^3.0|^4.0", + "symfony/security-core": "^2.7|^3.0|^4.0", + "symfony/templating": "^2.7|^3.0|^4.0", + "willdurand/jsonp-callback-validator": "^1.0", + "willdurand/negotiation": "^2.0" }, "conflict": { - "jms/serializer": "<0.12", - "jms/serializer-bundle": "<0.11", - "symfony/validator": ">=2.5.0,<2.5.5" + "jms/serializer": "1.3.0", + "jms/serializer-bundle": "<1.2.0", + "sensio/framework-extra-bundle": "<3.0.13" }, "require-dev": { - "jms/serializer": "~0.13|~1.0", - "jms/serializer-bundle": "~0.12|~1.0", - "phpoption/phpoption": "~1.1.0", - "sensio/framework-extra-bundle": "~2.0|~3.0", - "sllh/php-cs-fixer-styleci-bridge": "^1.3", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/form": "~2.3|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/security": "~2.3|~3.0", - "symfony/serializer": "~2.3|~3.0", - "symfony/validator": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "jms/serializer-bundle": "^1.2|^2.0", + "phpoption/phpoption": "^1.1", + "psr/http-message": "^1.0", + "sensio/framework-extra-bundle": "^3.0.13|^4.0|^5.0", + "symfony/asset": "^2.7|^3.0|^4.0", + "symfony/browser-kit": "^2.7|^3.0|^4.0", + "symfony/css-selector": "^2.7|^3.0|^4.0", + "symfony/dependency-injection": "^2.7|^3.0|^4.0", + "symfony/expression-language": "~2.7|^3.0|^4.0", + "symfony/form": "^2.7|^3.0|^4.0", + "symfony/phpunit-bridge": "^3.2|^4.0", + "symfony/security-bundle": "^2.7|^3.0|^4.0", + "symfony/serializer": "^2.7.11|^3.0.4|^4.0", + "symfony/twig-bundle": "^2.7|^3.0|^4.0", + "symfony/validator": "^2.7|^3.0|^4.0", + "symfony/web-profiler-bundle": "^2.7|^3.0|^4.0", + "symfony/yaml": "^2.7|^3.0|^4.0" }, "suggest": { - "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ~0.12||~1.0", - "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener, requires ~3.0", - "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ~2.3", - "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ~2.3" + "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ^1.0", + "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener, requires ^3.0", + "symfony/expression-language": "Add support for using the expression language in the routing, requires ^2.7|^3.0", + "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0", + "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.3-dev" } }, "autoload": { - "psr-0": { - "FOS\\RestBundle": "" - } + "psr-4": { + "FOS\\RestBundle\\": "" + }, + "exclude-from-classmap": [ + "Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -916,7 +1062,7 @@ "keywords": [ "rest" ], - "time": "2015-12-29T16:02:50+00:00" + "time": "2018-02-28T13:57:04+00:00" }, { "name": "friendsofsymfony/user-bundle", @@ -924,22 +1070,23 @@ "source": { "type": "git", "url": "https://github.com/FriendsOfSymfony/FOSUserBundle.git", - "reference": "6a12083d0f6b53ca312021b15277d92be571cbe6" + "reference": "742f22f7d18fd2edb617243b92fed3f1b2bbd87f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/6a12083d0f6b53ca312021b15277d92be571cbe6", - "reference": "6a12083d0f6b53ca312021b15277d92be571cbe6", + "url": "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/742f22f7d18fd2edb617243b92fed3f1b2bbd87f", + "reference": "742f22f7d18fd2edb617243b92fed3f1b2bbd87f", "shasum": "" }, "require": { "paragonie/random_compat": "^1 || ^2", "php": "^5.5.9 || ^7.0", - "symfony/form": "^2.7 || ^3.0", - "symfony/framework-bundle": "^2.7 || ^3.0", - "symfony/security-bundle": "^2.7 || ^3.0", - "symfony/templating": "^2.7 || ^3.0", - "symfony/twig-bundle": "^2.7 || ^3.0", + "symfony/form": "^2.8 || ^3.0 || ^4.0", + "symfony/framework-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/security-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/templating": "^2.8 || ^3.0 || ^4.0", + "symfony/twig-bundle": "^2.8 || ^3.0 || ^4.0", + "symfony/validator": "^2.8 || ^3.0 || ^4.0", "twig/twig": "^1.28 || ^2.0" }, "conflict": { @@ -948,18 +1095,17 @@ }, "require-dev": { "doctrine/doctrine-bundle": "^1.3", - "friendsofphp/php-cs-fixer": "^1.11", - "phpunit/phpunit": "~4.8|~5.0", - "swiftmailer/swiftmailer": "^4.3 || ^5.0", - "symfony/console": "^2.7 || ^3.0", - "symfony/phpunit-bridge": "^2.7 || ^3.0", - "symfony/validator": "^2.7 || ^3.0", - "symfony/yaml": "^2.7 || ^3.0" + "friendsofphp/php-cs-fixer": "^2.2", + "phpunit/phpunit": "^4.8.35|^5.7.11|^6.5", + "swiftmailer/swiftmailer": "^4.3 || ^5.0 || ^6.0", + "symfony/console": "^2.8 || ^3.0 || ^4.0", + "symfony/phpunit-bridge": "^2.8 || ^3.0 || ^4.0", + "symfony/yaml": "^2.8 || ^3.0 || ^4.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -984,8 +1130,7 @@ "homepage": "https://github.com/friendsofsymfony/FOSUserBundle/contributors" }, { - "name": "Thibault Duplessis", - "email": "thibault.duplessis@gmail.com" + "name": "Thibault Duplessis" } ], "description": "Symfony FOSUserBundle", @@ -993,32 +1138,45 @@ "keywords": [ "User management" ], - "time": "2017-02-08 16:08:46" + "time": "2018-03-01 12:39:08" }, { "name": "guzzlehttp/guzzle", - "version": "5.3.1", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8" + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/70f1fa53b71c4647bf2762c09068a95f77e12fb8", - "reference": "70f1fa53b71c4647bf2762c09068a95f77e12fb8", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { - "guzzlehttp/ringphp": "^1.1", - "php": ">=5.4.0" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { "ext-curl": "*", - "phpunit/phpunit": "^4.0" + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { "GuzzleHttp\\": "src/" } @@ -1034,7 +1192,7 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -1045,40 +1203,41 @@ "rest", "web service" ], - "time": "2016-07-15T19:28:39+00:00" + "time": "2017-06-22T18:50:49+00:00" }, { - "name": "guzzlehttp/log-subscriber", - "version": "1.0.1", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/guzzle/log-subscriber.git", - "reference": "99c3c0004165db721d8ef7bbef60c996210e538a" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/log-subscriber/zipball/99c3c0004165db721d8ef7bbef60c996210e538a", - "reference": "99c3c0004165db721d8ef7bbef60c996210e538a", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "guzzlehttp/guzzle": "~4.0 | ~5.0", - "php": ">=5.4.0", - "psr/log": "~1.0" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Subscriber\\Log\\": "src/" - } + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1091,82 +1250,32 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "Logs HTTP requests and responses as they are sent over the wire (Guzzle 4+)", - "homepage": "http://guzzlephp.org/", + "description": "Guzzle promises library", "keywords": [ - "Guzzle", - "log", - "plugin" + "promise" ], - "time": "2014-10-13T03:31:43+00:00" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "guzzlehttp/ringphp", - "version": "1.1.0", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/guzzle/RingPHP.git", - "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", - "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "guzzlehttp/streams": "~3.0", "php": ">=5.4.0", - "react/promise": "~2.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "ext-curl": "Guzzle will use specific adapters if cURL is present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Ring\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", - "time": "2015-05-20T03:37:09+00:00" - }, - { - "name": "guzzlehttp/streams", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/streams.git", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", - "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", - "shasum": "" + "psr/http-message": "~1.0" }, - "require": { - "php": ">=5.4.0" + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { "phpunit/phpunit": "~4.0" @@ -1174,13 +1283,16 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "GuzzleHttp\\Stream\\": "src/" - } + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1191,38 +1303,46 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Provides a simple abstraction over streams of data", - "homepage": "http://guzzlephp.org/", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "Guzzle", - "stream" - ], - "time": "2014-10-12T19:18:40+00:00" + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.1.2", + "version": "v2.1.3", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" + "reference": "933c45a34814f27f2345c11c37d46b3ca7303550" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", - "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/933c45a34814f27f2345c11c37d46b3ca7303550", + "reference": "933c45a34814f27f2345c11c37d46b3ca7303550", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/yaml": "~2.3|~3.0" + "symfony/yaml": "^2.3 || ^3.0 || ^4.0" }, "require-dev": { - "composer/composer": "1.0.*@dev", - "phpspec/prophecy-phpunit": "~1.0", - "symfony/filesystem": "~2.2" + "composer/composer": "^1.0@dev", + "symfony/filesystem": "^2.3 || ^3 || ^4", + "symfony/phpunit-bridge": "^4.0" }, "type": "library", "extra": { @@ -1250,7 +1370,7 @@ "keywords": [ "parameters management" ], - "time": "2015-11-10T17:04:01+00:00" + "time": "2018-02-13T18:05:56+00:00" }, { "name": "jdorn/sql-formatter", @@ -1390,16 +1510,16 @@ }, { "name": "jms/serializer", - "version": "1.4.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "f39d8b4660d5cef43b0c3265ce642173d9b2c58b" + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/f39d8b4660d5cef43b0c3265ce642173d9b2c58b", - "reference": "f39d8b4660d5cef43b0c3265ce642173d9b2c58b", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e7c53477ff55c21d1b1db7d062edc050a24f465f", + "reference": "e7c53477ff55c21d1b1db7d062edc050a24f465f", "shasum": "" }, "require": { @@ -1407,7 +1527,7 @@ "doctrine/instantiator": "^1.0.3", "jms/metadata": "~1.1", "jms/parser-lib": "1.*", - "php": ">=5.5.0", + "php": "^5.5|^7.0", "phpcollection/phpcollection": "~0.1", "phpoption/phpoption": "^1.1" }, @@ -1421,20 +1541,25 @@ "jackalope/jackalope-doctrine-dbal": "^1.1.5", "phpunit/phpunit": "^4.8|^5.0", "propel/propel1": "~1.7", + "psr/container": "^1.0", + "symfony/dependency-injection": "^2.7|^3.3|^4.0", + "symfony/expression-language": "^2.6|^3.0", "symfony/filesystem": "^2.1", - "symfony/form": "~2.1", - "symfony/translation": "^2.1", - "symfony/validator": "^2.2", - "symfony/yaml": "^2.1", + "symfony/form": "~2.1|^3.0", + "symfony/translation": "^2.1|^3.0", + "symfony/validator": "^2.2|^3.0", + "symfony/yaml": "^2.1|^3.0", "twig/twig": "~1.12|~2.0" }, "suggest": { + "doctrine/cache": "Required if you like to use cache functionality.", + "doctrine/collections": "Required if you like to use doctrine collection types as ArrayCollection.", "symfony/yaml": "Required if you'd like to serialize data to YAML format." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.11-dev" } }, "autoload": { @@ -1444,9 +1569,13 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + }, { "name": "Johannes M. Schmitt", "email": "schmittjoh@gmail.com" @@ -1461,25 +1590,25 @@ "serialization", "xml" ], - "time": "2016-11-13T10:20:11+00:00" + "time": "2018-02-04T17:48:54+00:00" }, { "name": "jms/serializer-bundle", - "version": "1.1.0", + "version": "1.5.0", "target-dir": "JMS/SerializerBundle", "source": { "type": "git", "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", - "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e" + "reference": "85ee039a2b7f89d77c403e33cee7b43a875c31e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/3e396c980545350c2efb65a50041d2a9f9d6562e", - "reference": "3e396c980545350c2efb65a50041d2a9f9d6562e", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/85ee039a2b7f89d77c403e33cee7b43a875c31e5", + "reference": "85ee039a2b7f89d77c403e33cee7b43a875c31e5", "shasum": "" }, "require": { - "jms/serializer": "^1.0.0", + "jms/serializer": "^1.7", "php": ">=5.4.0", "phpoption/phpoption": "^1.1.0", "symfony/framework-bundle": "~2.3|~3.0" @@ -1487,9 +1616,11 @@ "require-dev": { "doctrine/doctrine-bundle": "*", "doctrine/orm": "*", + "phpunit/phpunit": "^4.2|^5.0", "symfony/browser-kit": "*", "symfony/class-loader": "*", "symfony/css-selector": "*", + "symfony/expression-language": "~2.6|~3.0", "symfony/finder": "*", "symfony/form": "*", "symfony/process": "*", @@ -1504,7 +1635,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.5-dev" } }, "autoload": { @@ -1514,7 +1645,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ { @@ -1531,20 +1662,20 @@ "serialization", "xml" ], - "time": "2015-11-10T12:26:42+00:00" + "time": "2017-05-10T10:17:17+00:00" }, { "name": "league/flysystem", - "version": "1.0.35", + "version": "1.0.43", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062" + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dda7f3ab94158a002d9846a97dc18ebfb7acc062", - "reference": "dda7f3ab94158a002d9846a97dc18ebfb7acc062", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1ce7cc142d906ba58dc54c82915d355a9191c8a8", + "reference": "1ce7cc142d906ba58dc54c82915d355a9191c8a8", "shasum": "" }, "require": { @@ -1555,23 +1686,24 @@ }, "require-dev": { "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", - "league/flysystem-dropbox": "Allows you to use Dropbox storage", "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, "type": "library", "extra": { @@ -1614,7 +1746,7 @@ "sftp", "storage" ], - "time": "2017-02-09T11:33:58+00:00" + "time": "2018-03-01T10:27:04+00:00" }, { "name": "lexik/jwt-authentication-bundle", @@ -1622,29 +1754,28 @@ "source": { "type": "git", "url": "https://github.com/lexik/LexikJWTAuthenticationBundle.git", - "reference": "2e8965d6c5753708eddd66f7e7a84e3259377ead" + "reference": "49f1ba49bab08a0632b275373748445b89de84fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/2e8965d6c5753708eddd66f7e7a84e3259377ead", - "reference": "2e8965d6c5753708eddd66f7e7a84e3259377ead", + "url": "https://api.github.com/repos/lexik/LexikJWTAuthenticationBundle/zipball/49f1ba49bab08a0632b275373748445b89de84fd", + "reference": "49f1ba49bab08a0632b275373748445b89de84fd", "shasum": "" }, "require": { "namshi/jose": "^7.2", "php": "^5.5|^7.0", - "symfony/console": "^2.8|^3.0", - "symfony/framework-bundle": "^2.8|^3.0", - "symfony/security-bundle": "^2.8|^3.0" + "symfony/framework-bundle": "^2.8|^3.0|^4.0", + "symfony/security-bundle": "^2.8|^3.0|^4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.1", + "friendsofphp/php-cs-fixer": "^1.1|^2.8@dev", "lcobucci/jwt": "~3.2", - "phpunit/phpunit": "^4.8|^5.0", - "symfony/browser-kit": "^2.8|^3.0", - "symfony/dom-crawler": "^2.8|^3.0", - "symfony/phpunit-bridge": "^2.8|^3.0", - "symfony/yaml": "^2.8|^3.0" + "symfony/browser-kit": "^2.8|^3.0|^4.0", + "symfony/console": "^2.8|^3.0|^4.0", + "symfony/dom-crawler": "^2.8|^3.0|^4.0", + "symfony/phpunit-bridge": "~3.3", + "symfony/yaml": "^2.8|^3.0|^4.0" }, "suggest": { "gesdinet/jwt-refresh-token-bundle": "Implements a refresh token system over Json Web Tokens in Symfony", @@ -1711,34 +1842,29 @@ "rest", "symfony" ], - "time": "2017-02-02 11:50:57" + "time": "2018-01-25 08:24:45" }, { "name": "michelf/php-markdown", - "version": "1.7.0", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" + "reference": "01ab082b355bf188d907b9929cd99b2923053495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", - "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/01ab082b355bf188d907b9929cd99b2923053495", + "reference": "01ab082b355bf188d907b9929cd99b2923053495", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-lib": "1.4.x-dev" - } - }, "autoload": { - "psr-0": { - "Michelf": "" + "psr-4": { + "Michelf\\": "Michelf/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1762,20 +1888,20 @@ "keywords": [ "markdown" ], - "time": "2016-10-29T18:58:20+00:00" + "time": "2018-01-15T00:49:33+00:00" }, { "name": "monolog/monolog", - "version": "1.22.0", + "version": "1.23.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558" + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558", - "reference": "bad29cb8d18ab0315e6c477751418a82c850d558", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", "shasum": "" }, "require": { @@ -1796,7 +1922,7 @@ "phpunit/phpunit-mock-objects": "2.3.0", "ruflin/elastica": ">=0.90 <3.0", "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "~5.3" + "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1840,7 +1966,7 @@ "logging", "psr-3" ], - "time": "2016-11-26T00:15:39+00:00" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "namshi/jose", @@ -1907,25 +2033,25 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "2.13.0", + "version": "2.13.3", "target-dir": "Nelmio/ApiDocBundle", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "a3a9bb3b700f3ebaed95390292dad23f8141afa0" + "reference": "f0a606b6362c363043e01aa079bee2b0b5eb47a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/a3a9bb3b700f3ebaed95390292dad23f8141afa0", - "reference": "a3a9bb3b700f3ebaed95390292dad23f8141afa0", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/f0a606b6362c363043e01aa079bee2b0b5eb47a2", + "reference": "f0a606b6362c363043e01aa079bee2b0b5eb47a2", "shasum": "" }, "require": { "michelf/php-markdown": "~1.4", - "php": ">=5.3", - "symfony/console": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0", - "symfony/twig-bundle": "~2.3|~3.0" + "php": ">=5.4", + "symfony/console": "~2.3|~3.0|~4.0", + "symfony/framework-bundle": "~2.3|~3.0|~4.0", + "symfony/twig-bundle": "~2.3|~3.0|~4.0" }, "conflict": { "jms/serializer": "<0.12", @@ -1936,18 +2062,18 @@ "require-dev": { "doctrine/doctrine-bundle": "~1.5", "doctrine/orm": "~2.3", - "dunglas/api-bundle": "~1.0@dev", + "dunglas/api-bundle": "~1.0", "friendsofsymfony/rest-bundle": "~1.0|~2.0", "jms/serializer-bundle": ">=0.11", "sensio/framework-extra-bundle": "~3.0", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/css-selector": "~2.3|~3.0", - "symfony/finder": "~2.3|~3.0", - "symfony/form": "~2.3|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", - "symfony/serializer": "~2.7|~3.0", - "symfony/validator": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "symfony/browser-kit": "~2.3|~3.0|~4.0", + "symfony/css-selector": "~2.3|~3.0|~4.0", + "symfony/finder": "~2.3|~3.0|~4.0", + "symfony/form": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", + "symfony/serializer": "~2.7|~3.0|~4.0", + "symfony/validator": "~2.3|~3.0|~4.0", + "symfony/yaml": "~2.3|~3.0|~4.0" }, "suggest": { "dunglas/api-bundle": "For making use of resources definitions of DunglasApiBundle.", @@ -1959,7 +2085,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.13-dev" + "dev-2.x": "2.13-dev" } }, "autoload": { @@ -1988,28 +2114,29 @@ "documentation", "rest" ], - "time": "2016-06-13T09:12:09+00:00" + "time": "2017-12-05T06:14:09+00:00" }, { "name": "nelmio/cors-bundle", - "version": "1.5.1", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "cc9a26517b65769e6e3cea10099d4a40ce11ca29" + "reference": "548dc8ebd3984acd2f6d8787ab1dac2e9aa14254" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/cc9a26517b65769e6e3cea10099d4a40ce11ca29", - "reference": "cc9a26517b65769e6e3cea10099d4a40ce11ca29", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/548dc8ebd3984acd2f6d8787ab1dac2e9aa14254", + "reference": "548dc8ebd3984acd2f6d8787ab1dac2e9aa14254", "shasum": "" }, "require": { - "symfony/framework-bundle": "^2.7 || ^3.0" + "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0" }, "require-dev": { - "matthiasnoback/symfony-dependency-injection-test": "^0.7.6", - "mockery/mockery": "0.9.*" + "matthiasnoback/symfony-dependency-injection-test": "^1.0 || ^2.0", + "mockery/mockery": "^0.9 || ^1.0", + "symfony/phpunit-bridge": "^2.7 || ^3.0 || ^4.0" }, "type": "symfony-bundle", "extra": { @@ -2045,59 +2172,65 @@ "cors", "crossdomain" ], - "time": "2017-01-22T21:34:09+00:00" + "time": "2017-12-11T18:41:54+00:00" }, { "name": "oneup/flysystem-bundle", - "version": "1.10.0", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/1up-lab/OneupFlysystemBundle.git", - "reference": "a8f5ce36b9624e1c8c7b8ccc89f10790e313c705" + "reference": "c3986a7d125324efa811be49ada7177d2ce95a8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/a8f5ce36b9624e1c8c7b8ccc89f10790e313c705", - "reference": "a8f5ce36b9624e1c8c7b8ccc89f10790e313c705", + "url": "https://api.github.com/repos/1up-lab/OneupFlysystemBundle/zipball/c3986a7d125324efa811be49ada7177d2ce95a8a", + "reference": "c3986a7d125324efa811be49ada7177d2ce95a8a", "shasum": "" }, "require": { - "league/flysystem": "^1.0.14", + "league/flysystem": "^1.0.26", "php": ">=5.4.0", "symfony/framework-bundle": "~2.0|~3.0" }, "require-dev": { "jenko/flysystem-gaufrette": "^1.0", - "league/flysystem-aws-s3-v2": "~1.0", - "league/flysystem-cached-adapter": "~1.0", - "league/flysystem-copy": "~1.0", - "league/flysystem-dropbox": "~1.0", - "league/flysystem-gridfs": "~1.0", - "league/flysystem-memory": "~1.0", - "league/flysystem-rackspace": "~1.0", - "league/flysystem-sftp": "~1.0", - "league/flysystem-webdav": "~1.0", - "league/flysystem-ziparchive": "~1.0", - "litipk/flysystem-fallback-adapter": "~0.1", - "phpunit/phpunit": "4.4.*", - "symfony/browser-kit": "~2.0|~3.0", - "symfony/finder": "~2.0|~3.0", - "twistor/flysystem-stream-wrapper": "~1.0" + "league/flysystem-aws-s3-v2": "^1.0", + "league/flysystem-cached-adapter": "^1.0", + "league/flysystem-dropbox": "^1.0", + "league/flysystem-gridfs": "^1.0", + "league/flysystem-memory": "^1.0", + "league/flysystem-rackspace": "^1.0", + "league/flysystem-replicate-adapter": "^1.0", + "league/flysystem-sftp": "^1.0", + "league/flysystem-webdav": "^1.0", + "league/flysystem-ziparchive": "^1.0", + "litipk/flysystem-fallback-adapter": "^0.1", + "phpunit/phpunit": "^4.4", + "superbalist/flysystem-google-storage": "^4.0", + "symfony/asset": "^2.0|^3.0", + "symfony/browser-kit": "^2.0|^3.0", + "symfony/finder": "^2.0|^3.0", + "symfony/templating": "^2.0|^3.0", + "symfony/translation": "^2.0|^3.0", + "twistor/flysystem-stream-wrapper": "^1.0" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Required for FTP and SFTP", "jenko/flysystem-gaufrette": "Allows you to use gaufrette adapter", "league/flysystem-aws-s3-v2": "Use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Use S3 storage with AWS SDK v3", "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", "league/flysystem-dropbox": "Use Dropbox storage", "league/flysystem-gridfs": "Allows you to use GridFS adapter", "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-replicate-adapter": "Allows you to use the Replica adapter from Flysystem", "league/flysystem-sftp": "Allows SFTP server storage via phpseclib", "league/flysystem-webdav": "Allows you to use WebDAV storage", "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", "litipk/flysystem-fallback-adapter": "Allows you to use a fallback filesystem", + "superbalist/flysystem-google-storage": "Allows you to use Google Cloud Storage buckets", "twistor/flysystem-stream-wrapper": "Allows you to use stream wrapper" }, "type": "symfony-bundle", @@ -2126,20 +2259,20 @@ "abstraction", "filesystem" ], - "time": "2017-02-03T10:49:25+00:00" + "time": "2017-11-27T15:59:58+00:00" }, { "name": "paragonie/random_compat", - "version": "v2.0.4", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", - "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -2151,11 +2284,202 @@ "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, - "type": "library", + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2017-09-27T21:40:39+00:00" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "files": [ - "lib/random.php" - ] + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2163,116 +2487,119 @@ ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "csprng", - "pseudorandom", - "random" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2016-11-07T23:38:38+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "phpcollection/phpcollection", - "version": "0.5.0", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-collection.git", - "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", - "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "phpoption/phpoption": "1.*" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.4-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "PhpCollection": "src/" + "psr-4": { + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "General-Purpose Collection Library for PHP", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "collection", - "list", - "map", - "sequence", - "set" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], - "time": "2015-05-17T12:39:23+00:00" + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "phpoption/phpoption", - "version": "1.5.0", + "name": "psr/link", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + "url": "https://github.com/php-fig/link.git", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "url": "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562", + "reference": "eea8e8662d5cd3ae4517c9b864493f59fca95562", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "require-dev": { - "phpunit/phpunit": "4.7.*" - }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "PhpOption\\": "src/" + "psr-4": { + "Psr\\Link\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "MIT" ], "authors": [ { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Option Type for PHP", + "description": "Common interfaces for HTTP links", "keywords": [ - "language", - "option", - "php", - "type" + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" ], - "time": "2015-07-25T16:39:46+00:00" + "time": "2016-10-28T16:06:13+00:00" }, { "name": "psr/log", @@ -2322,30 +2649,32 @@ "time": "2016-10-10T12:19:37+00:00" }, { - "name": "react/promise", - "version": "v2.5.0", + "name": "psr/simple-cache", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/2760f3898b7e931aa71153852dcd48a75c9b95db", - "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + "Psr\\SimpleCache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2353,29 +2682,32 @@ ], "authors": [ { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "description": "Common interfaces for simple caching", "keywords": [ - "promise", - "promises" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2016-12-22T14:09:01+00:00" + "time": "2017-01-02T13:31:39+00:00" }, { "name": "sensio/distribution-bundle", - "version": "v5.0.18", + "version": "v5.0.21", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "17846680901003d26d823c2e3ac9228702837916" + "reference": "eb6266b3b472e4002538610b28a0a04bcf94891a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/17846680901003d26d823c2e3ac9228702837916", - "reference": "17846680901003d26d823c2e3ac9228702837916", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/eb6266b3b472e4002538610b28a0a04bcf94891a", + "reference": "eb6266b3b472e4002538610b28a0a04bcf94891a", "shasum": "" }, "require": { @@ -2414,41 +2746,43 @@ "configuration", "distribution" ], - "time": "2017-01-10T14:58:45+00:00" + "time": "2017-08-25T16:55:44+00:00" }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.21", + "version": "v3.0.29", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "ed86f6fb1753e76b39ff8b87f527045ca6b97169" + "reference": "bb907234df776b68922eb4b25bfa061683597b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/ed86f6fb1753e76b39ff8b87f527045ca6b97169", - "reference": "ed86f6fb1753e76b39ff8b87f527045ca6b97169", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/bb907234df776b68922eb4b25bfa061683597b6a", + "reference": "bb907234df776b68922eb4b25bfa061683597b6a", "shasum": "" }, "require": { "doctrine/common": "~2.2", "symfony/dependency-injection": "~2.3|~3.0", - "symfony/framework-bundle": "~2.3|~3.0" + "symfony/framework-bundle": "~2.3|~3.0|~4.0" }, "require-dev": { - "symfony/asset": "~2.7|~3.0", - "symfony/browser-kit": "~2.3|~3.0", - "symfony/dom-crawler": "~2.3|~3.0", - "symfony/expression-language": "~2.4|~3.0", - "symfony/finder": "~2.3|~3.0", - "symfony/phpunit-bridge": "~3.2", - "symfony/psr-http-message-bridge": "^0.3", - "symfony/security-bundle": "~2.4|~3.0", - "symfony/templating": "~2.3|~3.0", - "symfony/translation": "~2.3|~3.0", - "symfony/twig-bundle": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0", - "twig/twig": "~1.11|~2.0", + "doctrine/doctrine-bundle": "~1.5", + "doctrine/orm": "~2.4,>=2.4.5", + "symfony/asset": "~2.7|~3.0|~4.0", + "symfony/browser-kit": "~2.3|~3.0|~4.0", + "symfony/dom-crawler": "~2.3|~3.0|~4.0", + "symfony/expression-language": "~2.4|~3.0|~4.0", + "symfony/finder": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "~3.2|~4.0", + "symfony/psr-http-message-bridge": "^0.3|^1.0", + "symfony/security-bundle": "~2.4|~3.0|~4.0", + "symfony/templating": "~2.3|~3.0|~4.0", + "symfony/translation": "~2.3|~3.0|~4.0", + "symfony/twig-bundle": "~2.3|~3.0|~4.0", + "symfony/yaml": "~2.3|~3.0|~4.0", + "twig/twig": "~1.12|~2.0", "zendframework/zend-diactoros": "^1.3" }, "suggest": { @@ -2482,24 +2816,25 @@ "annotations", "controllers" ], - "time": "2017-02-02T15:31:23+00:00" + "time": "2017-12-14T19:03:23+00:00" }, { "name": "sensiolabs/security-checker", - "version": "v4.0.0", + "version": "v4.1.8", "source": { "type": "git", "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "116027b57b568ed61b7b1c80eeb4f6ee9e8c599c" + "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/116027b57b568ed61b7b1c80eeb4f6ee9e8c599c", - "reference": "116027b57b568ed61b7b1c80eeb4f6ee9e8c599c", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/dc270d5fec418cc6ac983671dba5d80ffaffb142", + "reference": "dc270d5fec418cc6ac983671dba5d80ffaffb142", "shasum": "" }, "require": { - "symfony/console": "~2.7|~3.0" + "composer/ca-bundle": "^1.0", + "symfony/console": "~2.7|~3.0|~4.0" }, "bin": [ "security-checker" @@ -2507,7 +2842,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -2526,20 +2861,20 @@ } ], "description": "A security checker for your composer.lock", - "time": "2016-09-23T18:09:57+00:00" + "time": "2018-02-28T22:10:01+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.5", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "cd142238a339459b10da3d8234220963f392540c" + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c", - "reference": "cd142238a339459b10da3d8234220963f392540c", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", "shasum": "" }, "require": { @@ -2574,51 +2909,54 @@ } ], "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ "email", "mail", "mailer" ], - "time": "2016-12-29T10:02:40+00:00" + "time": "2018-01-23T07:37:21+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v2.12.1", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f" + "reference": "2b41b8b6d2c6edb1a5494f02f8e4129be2a44784" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", - "reference": "b0146bdca7ba2a65f3bbe7010423c7393b29ec3f", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/2b41b8b6d2c6edb1a5494f02f8e4129be2a44784", + "reference": "2b41b8b6d2c6edb1a5494f02f8e4129be2a44784", "shasum": "" }, "require": { - "monolog/monolog": "~1.18", + "monolog/monolog": "~1.22", "php": ">=5.3.2", - "symfony/config": "~2.3|~3.0", - "symfony/dependency-injection": "~2.3|~3.0", - "symfony/http-kernel": "~2.3|~3.0", - "symfony/monolog-bridge": "~2.3|~3.0" + "symfony/config": "~2.7|~3.0|~4.0", + "symfony/dependency-injection": "~2.7|~3.0|~4.0", + "symfony/http-kernel": "~2.7|~3.0|~4.0", + "symfony/monolog-bridge": "~2.7|~3.0|~4.0" }, "require-dev": { - "phpunit/phpunit": "^4.8", - "symfony/console": "~2.3|~3.0", - "symfony/yaml": "~2.3|~3.0" + "symfony/console": "~2.3|~3.0|~4.0", + "symfony/phpunit-bridge": "^3.3|^4.0", + "symfony/yaml": "~2.3|~3.0|~4.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { "psr-4": { "Symfony\\Bundle\\MonologBundle\\": "" - } + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2640,25 +2978,81 @@ "log", "logging" ], - "time": "2017-01-02T19:04:26+00:00" + "time": "2017-11-06T16:02:17+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4" + "reference": "254919c03761d46c29291616576ed003f10e91c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/2d6e2b20d457603eefb6e614286c22efca30fdb4", - "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/254919c03761d46c29291616576ed003f10e91c1", + "reference": "254919c03761d46c29291616576ed003f10e91c1", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/intl": "~2.3|~3.0" + "symfony/intl": "~2.3|~3.0|~4.0" }, "suggest": { "ext-intl": "For best performance" @@ -2666,7 +3060,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2698,20 +3092,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "shasum": "" }, "require": { @@ -2723,7 +3117,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2757,20 +3151,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c" + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/1dd42b9b89556f18092f3d1ada22cb05ac85383c", - "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8", "shasum": "" }, "require": { @@ -2780,7 +3174,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2813,20 +3207,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2" + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", - "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3532bfcd8f933a7816f3a0a59682fc404776600f", + "reference": "3532bfcd8f933a7816f3a0a59682fc404776600f", "shasum": "" }, "require": { @@ -2836,7 +3230,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2872,20 +3266,20 @@ "portable", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-30T19:27:44+00:00" }, { "name": "symfony/polyfill-util", - "version": "v1.3.0", + "version": "v1.7.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-util.git", - "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb" + "reference": "e17c808ec4228026d4f5a8832afa19be85979563" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/746bce0fca664ac0a575e465f65c6643faddf7fb", - "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563", "shasum": "" }, "require": { @@ -2894,7 +3288,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { @@ -2924,25 +3318,25 @@ "polyfill", "shim" ], - "time": "2016-11-14T01:06:16+00:00" + "time": "2018-01-31T18:08:44+00:00" }, { "name": "symfony/swiftmailer-bundle", - "version": "v2.4.2", + "version": "v2.6.7", "source": { "type": "git", "url": "https://github.com/symfony/swiftmailer-bundle.git", - "reference": "ad751095576ce0c12a284e30e3fff80c91f27225" + "reference": "c4808f5169efc05567be983909d00f00521c53ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/ad751095576ce0c12a284e30e3fff80c91f27225", - "reference": "ad751095576ce0c12a284e30e3fff80c91f27225", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/c4808f5169efc05567be983909d00f00521c53ec", + "reference": "c4808f5169efc05567be983909d00f00521c53ec", "shasum": "" }, "require": { "php": ">=5.3.2", - "swiftmailer/swiftmailer": ">=4.2.0,~5.0", + "swiftmailer/swiftmailer": "~4.2|~5.0", "symfony/config": "~2.7|~3.0", "symfony/dependency-injection": "~2.7|~3.0", "symfony/http-kernel": "~2.7|~3.0" @@ -2950,7 +3344,7 @@ "require-dev": { "symfony/console": "~2.7|~3.0", "symfony/framework-bundle": "~2.7|~3.0", - "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/phpunit-bridge": "~3.3@dev", "symfony/yaml": "~2.7|~3.0" }, "suggest": { @@ -2959,7 +3353,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -2983,39 +3377,53 @@ ], "description": "Symfony SwiftmailerBundle", "homepage": "http://symfony.com", - "time": "2016-12-20T04:44:33+00:00" + "time": "2017-10-19T01:06:41+00:00" }, { "name": "symfony/symfony", - "version": "v3.0.9", + "version": "v3.3.16", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "634fb8c018532c820debd2678e452a735b9f438e" + "reference": "98e128ccee7afff6313dc3e9cce619f6e1caedbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/634fb8c018532c820debd2678e452a735b9f438e", - "reference": "634fb8c018532c820debd2678e452a735b9f438e", + "url": "https://api.github.com/repos/symfony/symfony/zipball/98e128ccee7afff6313dc3e9cce619f6e1caedbc", + "reference": "98e128ccee7afff6313dc3e9cce619f6e1caedbc", "shasum": "" }, "require": { "doctrine/common": "~2.4", - "php": ">=5.5.9", + "ext-xml": "*", + "fig/link-util": "^1.0", + "php": "^5.5.9|>=7.0.8", + "psr/cache": "~1.0", + "psr/container": "^1.0", + "psr/link": "^1.0", "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "symfony/polyfill-apcu": "~1.1", "symfony/polyfill-intl-icu": "~1.0", "symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-php56": "~1.0", "symfony/polyfill-php70": "~1.0", - "symfony/polyfill-util": "~1.0", - "twig/twig": "~1.23|~2.0" + "twig/twig": "~1.34|~2.4" }, "conflict": { - "phpdocumentor/reflection": "<1.0.7" + "phpdocumentor/reflection-docblock": "<3.0||>=3.2.0,<3.2.2", + "phpdocumentor/type-resolver": "<0.2.1", + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "symfony/asset": "self.version", "symfony/browser-kit": "self.version", + "symfony/cache": "self.version", "symfony/class-loader": "self.version", "symfony/config": "self.version", "symfony/console": "self.version", @@ -3025,6 +3433,7 @@ "symfony/dependency-injection": "self.version", "symfony/doctrine-bridge": "self.version", "symfony/dom-crawler": "self.version", + "symfony/dotenv": "self.version", "symfony/event-dispatcher": "self.version", "symfony/expression-language": "self.version", "symfony/filesystem": "self.version", @@ -3033,6 +3442,7 @@ "symfony/framework-bundle": "self.version", "symfony/http-foundation": "self.version", "symfony/http-kernel": "self.version", + "symfony/inflector": "self.version", "symfony/intl": "self.version", "symfony/ldap": "self.version", "symfony/monolog-bridge": "self.version", @@ -3056,25 +3466,33 @@ "symfony/twig-bundle": "self.version", "symfony/validator": "self.version", "symfony/var-dumper": "self.version", + "symfony/web-link": "self.version", "symfony/web-profiler-bundle": "self.version", + "symfony/web-server-bundle": "self.version", + "symfony/workflow": "self.version", "symfony/yaml": "self.version" }, "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/annotations": "~1.0", + "doctrine/cache": "~1.6", "doctrine/data-fixtures": "1.0.*", "doctrine/dbal": "~2.4", "doctrine/doctrine-bundle": "~1.4", "doctrine/orm": "~2.4,>=2.4.5", - "egulias/email-validator": "~1.2,>=1.2.1", + "egulias/email-validator": "~1.2,>=1.2.8|~2.0", "monolog/monolog": "~1.11", "ocramius/proxy-manager": "~0.4|~1.0|~2.0", - "phpdocumentor/reflection": "^1.0.7", - "symfony/polyfill-apcu": "~1.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0", + "predis/predis": "~1.0", + "sensio/framework-extra-bundle": "^3.0.2", + "symfony/phpunit-bridge": "~3.4|~4.0", "symfony/security-acl": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -3082,7 +3500,6 @@ "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", - "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", "Symfony\\Bundle\\": "src/Symfony/Bundle/", "Symfony\\Component\\": "src/Symfony/Component/" @@ -3113,38 +3530,43 @@ "keywords": [ "framework" ], - "time": "2016-07-30T09:10:53+00:00" + "time": "2018-01-29T11:42:20+00:00" }, { "name": "twig/twig", - "version": "v1.31.0", + "version": "v2.4.4", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7" + "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/ddc9e3e20ee9c0b6908f401ac8353635b750eca7", - "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/eddb97148ad779f27e670e1e3f19fb323aedafeb", + "reference": "eddb97148ad779f27e670e1e3f19fb323aedafeb", "shasum": "" }, "require": { - "php": ">=5.2.7" + "php": "^7.0", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { + "psr/container": "^1.0", "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "~3.3@dev" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.31-dev" + "dev-master": "2.4-dev" } }, "autoload": { "psr-0": { "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3174,7 +3596,7 @@ "keywords": [ "templating" ], - "time": "2017-01-11T19:36:15+00:00" + "time": "2017-09-27T18:10:31+00:00" }, { "name": "willdurand/jsonp-callback-validator", @@ -3218,25 +3640,28 @@ }, { "name": "willdurand/negotiation", - "version": "1.5.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/willdurand/Negotiation.git", - "reference": "2a59f2376557303e3fa91465ab691abb82945edf" + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/2a59f2376557303e3fa91465ab691abb82945edf", - "reference": "2a59f2376557303e3fa91465ab691abb82945edf", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9", + "reference": "03436ededa67c6e83b9b12defac15384cb399dc9", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "2.3-dev" } }, "autoload": { @@ -3251,7 +3676,7 @@ "authors": [ { "name": "William Durand", - "email": "william.durand1@gmail.com" + "email": "will+git@drnd.me" } ], "description": "Content Negotiation tools for PHP provided as a standalone library.", @@ -3263,7 +3688,7 @@ "header", "negotiation" ], - "time": "2015-10-01T07:42:40+00:00" + "time": "2017-05-14T17:21:12+00:00" } ], "packages-dev": [ @@ -3273,32 +3698,33 @@ "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "72559b08e06b4d56a0cd1d601ee7f18c5f432091" + "reference": "9443b70702b9ea5faf2d360afd2071058ee0fcf5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/72559b08e06b4d56a0cd1d601ee7f18c5f432091", - "reference": "72559b08e06b4d56a0cd1d601ee7f18c5f432091", + "url": "https://api.github.com/repos/Behat/Behat/zipball/9443b70702b9ea5faf2d360afd2071058ee0fcf5", + "reference": "9443b70702b9ea5faf2d360afd2071058ee0fcf5", "shasum": "" }, "require": { - "behat/gherkin": "^4.4.4", - "behat/transliterator": "~1.0", - "container-interop/container-interop": "^1.1", + "behat/gherkin": "^4.5.1", + "behat/transliterator": "^1.2", + "container-interop/container-interop": "^1.2", "ext-mbstring": "*", "php": ">=5.3.3", + "psr/container": "^1.0", "symfony/class-loader": "~2.1||~3.0", - "symfony/config": "~2.3||~3.0", - "symfony/console": "~2.5||~3.0", - "symfony/dependency-injection": "~2.1||~3.0", - "symfony/event-dispatcher": "~2.1||~3.0", - "symfony/translation": "~2.3||~3.0", - "symfony/yaml": "~2.1||~3.0" + "symfony/config": "~2.3||~3.0||~4.0", + "symfony/console": "~2.5||~3.0||~4.0", + "symfony/dependency-injection": "~2.1||~3.0||~4.0", + "symfony/event-dispatcher": "~2.1||~3.0||~4.0", + "symfony/translation": "~2.3||~3.0||~4.0", + "symfony/yaml": "~2.1||~3.0||~4.0" }, "require-dev": { "herrera-io/box": "~1.6.1", - "phpunit/phpunit": "~4.5", - "symfony/process": "~2.5|~3.0" + "phpunit/phpunit": "^4.8.36|^6.3", + "symfony/process": "~2.5|~3.0|~4.0" }, "suggest": { "behat/mink-extension": "for integration with Mink testing framework", @@ -3347,20 +3773,20 @@ "symfony", "testing" ], - "time": "2017-02-01 17:00:21" + "time": "2018-01-29 09:59:00" }, { "name": "behat/gherkin", - "version": "v4.4.5", + "version": "v4.5.1", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", - "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", + "reference": "74ac03d52c5e23ad8abd5c5cce4ab0e8dc1b530a", "shasum": "" }, "require": { @@ -3406,20 +3832,20 @@ "gherkin", "parser" ], - "time": "2016-10-30T11:50:56+00:00" + "time": "2017-08-30T11:04:43+00:00" }, { "name": "behat/symfony2-extension", - "version": "2.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/Behat/Symfony2Extension.git", - "reference": "cb9ff0ff2f1a901379616d95cc701601d139160c" + "reference": "4eec9ec8dec86c24d82d50b072e693ff2e98ecca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/cb9ff0ff2f1a901379616d95cc701601d139160c", - "reference": "cb9ff0ff2f1a901379616d95cc701601d139160c", + "url": "https://api.github.com/repos/Behat/Symfony2Extension/zipball/4eec9ec8dec86c24d82d50b072e693ff2e98ecca", + "reference": "4eec9ec8dec86c24d82d50b072e693ff2e98ecca", "shasum": "" }, "require": { @@ -3466,29 +3892,33 @@ "framework", "symfony" ], - "time": "2016-01-13T17:06:48+00:00" + "time": "2017-11-15T09:55:17+00:00" }, { "name": "behat/transliterator", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/Behat/Transliterator.git", - "reference": "868e05be3a9f25ba6424c2dd4849567f50715003" + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/868e05be3a9f25ba6424c2dd4849567f50715003", - "reference": "868e05be3a9f25ba6424c2dd4849567f50715003", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", + "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "chuyskywalker/rolling-curl": "^3.1", + "php-yaoi/php-yaoi": "^1.0" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -3506,22 +3936,25 @@ "slug", "transliterator" ], - "time": "2015-09-28T16:26:35+00:00" + "time": "2017-04-04T11:38:05+00:00" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -3533,41 +3966,45 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30T15:22:37+00:00" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.6.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/5a5a9fc8025a08d8919be87d6884d5a92520cefe", - "reference": "5a5a9fc8025a08d8919be87d6884d5a92520cefe", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -3575,20 +4012,20 @@ "object", "object graph" ], - "time": "2017-01-26T22:05:40+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { @@ -3629,33 +4066,39 @@ "reflection", "static analysis" ], - "time": "2015-12-27T11:43:31+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -3674,24 +4117,24 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30T07:12:33+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.2.1", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", - "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.5", + "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { @@ -3721,7 +4164,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-11-25T06:54:22+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/php-diff", @@ -3759,16 +4202,16 @@ }, { "name": "phpspec/phpspec", - "version": "2.5.5", + "version": "2.5.8", "source": { "type": "git", "url": "https://github.com/phpspec/phpspec.git", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af" + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/phpspec/zipball/db395f435eb8e820448e8690de1a8db86d5dd8af", - "reference": "db395f435eb8e820448e8690de1a8db86d5dd8af", + "url": "https://api.github.com/repos/phpspec/phpspec/zipball/d8a153dcb52f929b448c0bf2cc19c7388951adb1", + "reference": "d8a153dcb52f929b448c0bf2cc19c7388951adb1", "shasum": "" }, "require": { @@ -3777,15 +4220,15 @@ "php": ">=5.3.3", "phpspec/php-diff": "~1.0.0", "phpspec/prophecy": "~1.4", - "sebastian/exporter": "~1.0", - "symfony/console": "~2.3|~3.0", + "sebastian/exporter": "~1.0|~2.0|^3.0", + "symfony/console": "~2.3|~3.0,!=3.2.8", "symfony/event-dispatcher": "~2.1|~3.0", "symfony/finder": "~2.1|~3.0", "symfony/process": "^2.6|~3.0", "symfony/yaml": "~2.1|~3.0" }, "require-dev": { - "behat/behat": "^3.0.11", + "behat/behat": "^3.0.11,!=3.3.1", "ciaranmcnulty/versionbasedtestskipper": "^0.2.1", "phpunit/phpunit": "~4.4", "symfony/filesystem": "~2.1|~3.0" @@ -3833,37 +4276,37 @@ "testing", "tests" ], - "time": "2016-12-04T21:03:31+00:00" + "time": "2017-07-29T17:19:38+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.6.2", + "version": "1.7.5", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", - "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/dfd6be44111a7c41c2e884a336cc4f461b3b2401", + "reference": "dfd6be44111a7c41c2e884a336cc4f461b3b2401", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0|^2.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -3896,39 +4339,39 @@ "spy", "stub" ], - "time": "2016-11-21T14:58:47+00:00" + "time": "2018-02-19T10:16:54+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.5", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c19cfc7cbb0e9338d8c469c7eedecc2a428b0971", - "reference": "c19cfc7cbb0e9338d8c469c7eedecc2a428b0971", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { @@ -3959,20 +4402,20 @@ "testing", "xunit" ], - "time": "2017-01-20T15:06:43+00:00" + "time": "2017-04-02T07:44:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -4006,7 +4449,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -4051,25 +4494,30 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -4091,33 +4539,33 @@ "keywords": [ "timer" ], - "time": "2016-05-12T18:03:57+00:00" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4140,20 +4588,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15T14:06:22+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "5.6.4", + "version": "5.7.27", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4ddb822f1de421b4cadb47570a525fd7d9359493" + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4ddb822f1de421b4cadb47570a525fd7d9359493", - "reference": "4ddb822f1de421b4cadb47570a525fd7d9359493", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", "shasum": "" }, "require": { @@ -4164,26 +4612,24 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "sebastian/version": "^1.0.6|^2.0.1", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "sebastian/object-enumerator": "1.0.1", - "sebastian/recursion-context": "1.0.3 || 1.0.4" + "phpdocumentor/reflection-docblock": "3.0.2" }, "require-dev": { "ext-pdo": "*" @@ -4198,7 +4644,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -4224,20 +4670,20 @@ "testing", "xunit" ], - "time": "2016-11-18T09:50:51+00:00" + "time": "2018-02-01T05:50:59+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24" + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", - "reference": "3ab72b65b39b491e0c011e2e09bb2206c2aa8e24", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", "shasum": "" }, "require": { @@ -4283,27 +4729,27 @@ "mock", "xunit" ], - "time": "2016-12-08T20:27:08+00:00" + "time": "2017-06-30T09:13:00+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4328,7 +4774,7 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13T06:45:14+00:00" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", @@ -4396,23 +4842,23 @@ }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4444,7 +4890,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08T07:14:41+00:00" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -4498,21 +4944,21 @@ }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -4521,7 +4967,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4561,7 +5007,7 @@ "export", "exporter" ], - "time": "2016-06-17T09:04:28+00:00" + "time": "2016-11-19T08:54:04+00:00" }, { "name": "sebastian/global-state", @@ -4616,21 +5062,21 @@ }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "phpunit/phpunit": "~5" @@ -4638,7 +5084,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4658,20 +5104,20 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28T13:25:10+00:00" + "time": "2017-02-18T15:18:39+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", - "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -4683,7 +5129,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -4711,7 +5157,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11T19:50:13+00:00" + "time": "2016-11-19T07:33:16+00:00" }, { "name": "sebastian/resource-operations", @@ -4800,16 +5246,16 @@ }, { "name": "sensio/generator-bundle", - "version": "v3.1.2", + "version": "v3.1.7", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "ec278c0bd530edf155c4a00900577b5cb80f559e" + "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/ec278c0bd530edf155c4a00900577b5cb80f559e", - "reference": "ec278c0bd530edf155c4a00900577b5cb80f559e", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65", + "reference": "28cbaa244bd0816fd8908b93f90380bcd7b67a65", "shasum": "" }, "require": { @@ -4821,7 +5267,9 @@ }, "require-dev": { "doctrine/orm": "~2.4", - "symfony/doctrine-bridge": "~2.7|~3.0" + "symfony/doctrine-bridge": "~2.7|~3.0", + "symfony/filesystem": "~2.7|~3.0", + "symfony/phpunit-bridge": "^3.3" }, "type": "symfony-bundle", "extra": { @@ -4848,32 +5296,43 @@ } ], "description": "This bundle generates code for you", - "time": "2016-12-05T16:01:19+00:00" + "time": "2017-12-07T15:36:41+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v2.8.17", + "version": "v3.4.5", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "6b9436c6f6fc474335871bb9c90743606d967806" + "reference": "32b06d2b0babf3216e55acfce42249321a304f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/6b9436c6f6fc474335871bb9c90743606d967806", - "reference": "6b9436c6f6fc474335871bb9c90743606d967806", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/32b06d2b0babf3216e55acfce42249321a304f03", + "reference": "32b06d2b0babf3216e55acfce42249321a304f03", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "conflict": { + "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" + }, "suggest": { + "ext-zip": "Zip support is required when using bin/simple-phpunit", "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" }, + "bin": [ + "bin/simple-phpunit" + ], "type": "symfony-bridge", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.4-dev" + }, + "thanks": { + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" } }, "autoload": { @@ -4903,20 +5362,20 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2017-01-21T16:40:50+00:00" + "time": "2018-02-14T23:24:28+00:00" }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -4953,7 +5412,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..48d0aa2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' + +services: + + db_dev: + image: mysql:5.7.21 + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_DATABASE=db_dev + - MYSQL_USER=dbuser + - MYSQL_PASSWORD=dbpassword + ports: + - "3306:3306" \ No newline at end of file diff --git a/src/AppBundle/Controller/AccountsController.php b/src/AppBundle/Controller/AccountsController.php index 04b63e1..36cf137 100755 --- a/src/AppBundle/Controller/AccountsController.php +++ b/src/AppBundle/Controller/AccountsController.php @@ -101,7 +101,7 @@ public function postAction(Request $request) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_CREATED); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_CREATED); } catch (InvalidFormException $e) { @@ -127,7 +127,7 @@ public function postAction(Request $request) * @param Request $request the request object * @param int $id the account id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -147,7 +147,7 @@ public function patchAction(Request $request, $id) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); } catch (InvalidFormException $e) { @@ -173,7 +173,7 @@ public function patchAction(Request $request, $id) * @param Request $request the request object * @param int $id the account id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -193,7 +193,7 @@ public function putAction(Request $request, $id) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts', $routeOptions, Response::HTTP_NO_CONTENT); } catch (InvalidFormException $e) { diff --git a/src/AppBundle/Controller/FilesController.php b/src/AppBundle/Controller/FilesController.php index 52404e4..9f1772d 100644 --- a/src/AppBundle/Controller/FilesController.php +++ b/src/AppBundle/Controller/FilesController.php @@ -140,7 +140,7 @@ public function postAction(Request $request, $accountId) * @param int $accountId the account id * @param int $fileId the file id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -170,7 +170,7 @@ public function patchAction(Request $request, $accountId, $fileId) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); } @@ -192,7 +192,7 @@ public function patchAction(Request $request, $accountId, $fileId) * @param int $accountId the account id * @param int $fileId the file id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -222,7 +222,7 @@ public function putAction(Request $request, $accountId, $fileId) '_format' => $request->get('_format'), ]; - return $this->routeRedirectView('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); + return View::createRouteRedirect('get_accounts_files', $routeOptions, Response::HTTP_NO_CONTENT); } diff --git a/src/AppBundle/Controller/UsersController.php b/src/AppBundle/Controller/UsersController.php index 8196404..3c840fa 100644 --- a/src/AppBundle/Controller/UsersController.php +++ b/src/AppBundle/Controller/UsersController.php @@ -6,7 +6,6 @@ use AppBundle\Handler\UserHandler; use FOS\RestBundle\View\View; use FOS\RestBundle\Controller\Annotations; -use FOS\RestBundle\View\RouteRedirectView; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; use Nelmio\ApiDocBundle\Annotation\ApiDoc; @@ -44,9 +43,7 @@ public function getAction($id) { $user = $this->getUserHandler()->get($id); - $view = $this->view($user); - - return $view; + return $this->view($user); } /** @@ -85,7 +82,7 @@ public function cgetAction() * @param Request $request the request object * @param int $id the user id * - * @return FormTypeInterface|RouteRedirectView + * @return FormTypeInterface|View * * @throws NotFoundHttpException when does not exist */ @@ -108,7 +105,7 @@ public function patchAction(Request $request, $id) '_format' => $request->get('_format') ); - return $this->routeRedirectView('get_users', $routeOptions, $statusCode); + return View::createRouteRedirect('get_users', $routeOptions, $statusCode); } catch (InvalidFormException $e) { diff --git a/src/AppBundle/Features/Context/RestApiContext.php b/src/AppBundle/Features/Context/RestApiContext.php index 2ef5e78..55fe894 100644 --- a/src/AppBundle/Features/Context/RestApiContext.php +++ b/src/AppBundle/Features/Context/RestApiContext.php @@ -3,45 +3,41 @@ namespace AppBundle\Features\Context; use Behat\Behat\Context\Context; +use Behat\Behat\Hook\Scope\BeforeScenarioScope; use Behat\Gherkin\Node\PyStringNode; use Behat\Gherkin\Node\TableNode; +use Doctrine\ORM\EntityManagerInterface; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\RequestException; -use GuzzleHttp\Post\PostFile; +use GuzzleHttp\Psr7; use PHPUnit_Framework_Assert as Assertions; -use Sanpi\Behatch\Json\JsonInspector; -use Sanpi\Behatch\Json\JsonSchema; use Symfony\Component\HttpFoundation\Request; /** + * @TODO - fix all the errors etc - quick fix for api doc branch + * * Class RestApiContext * @package AppBundle\Features\Context */ class RestApiContext implements Context { - /** - * @var string - */ - private $authorization; - /** * @var ClientInterface */ protected $client; /** - * @var array + * @var string */ - private $headers = array(); + private $authorization; /** - * @var \GuzzleHttp\Message\RequestInterface + * @var array */ + private $headers = []; + private $request; - /** - * @var \GuzzleHttp\Message\ResponseInterface - */ private $response; /** @@ -49,19 +45,32 @@ class RestApiContext implements Context */ private $placeHolders = array(); /** - * @var string + * @var */ private $dummyDataPath; /** * RestApiContext constructor. - * @param ClientInterface $client - * @param string $dummyDataPath + * + * @param ClientInterface $client + * @param null $dummyDataPath + * @param EntityManagerInterface $em */ public function __construct(ClientInterface $client, $dummyDataPath = null) { $this->client = $client; $this->dummyDataPath = $dummyDataPath; + + echo "RestApiContext base url: " . $this->client->getConfig('base_uri') . "\n\n"; + + // strangeness with guzzle? + $this->addHeader('accept', '*/*'); + } + + /** @BeforeScenario */ + public function gatherContexts(BeforeScenarioScope $scope) + { + $environment = $scope->getEnvironment(); } /** @@ -86,28 +95,58 @@ public function iAmAuthenticatingAs($username, $password) * @param string $password * * @Given /^I am successfully logged in with username: "([^"]*)", and password: "([^"]*)"$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iAmSuccessfullyLoggedInWithUsernameAndPassword($username, $password) { - $response = $this->client->post('login', [ - 'json' => [ - 'username' => $username, - 'password' => $password, - ] - ]); + try { + + $this->iSendARequest('POST', 'login', [ + 'json' => [ + 'username' => $username, + 'password' => $password, + ] + ]); + + $this->theResponseCodeShouldBe(200); - \PHPUnit_Framework_Assert::assertEquals(200, $response->getStatusCode()); + $responseBody = json_decode($this->response->getBody(), true); + $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); - $responseBody = json_decode($response->getBody(), true); - $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); + } catch (RequestException $e) { + + echo Psr7\str($e->getRequest()); + + if ($e->hasResponse()) { + echo Psr7\str($e->getResponse()); + } + + } } /** - * @Given when consuming the endpoint I use the :header of :value + * @When I am logged out */ - public function whenConsumingTheEndpointIUseTheOf($header, $value) + public function iAmLoggedOut() { - $this->client->setDefaultOption($header, $value); + $this->removeHeader('Authorization'); + } + + + /** + * @Then I impersonate ":username" + */ + public function iImpersonate($username) + { + $this->iSetHeaderWithValue('x-switch-user', $username); + } + + /** + * @Then I stop impersonation + */ + public function iStopImpersonation() + { + $this->iHaveForgottenToSetThe('x-switch-user'); } /** @@ -115,7 +154,7 @@ public function whenConsumingTheEndpointIUseTheOf($header, $value) */ public function iHaveForgottenToSetThe($header) { - $this->client->setDefaultOption($header, null); + $this->addHeader($header, null); } /** @@ -136,18 +175,23 @@ public function iSetHeaderWithValue($name, $value) * * @param string $method request method * @param string $url relative url + * @param array $data * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)"$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ - public function iSendARequest($method, $url) + public function iSendARequest($method, $url, array $data = []) { $url = $this->prepareUrl($url); - $this->request = $this->getClient()->createRequest($method, $url); - if (!empty($this->headers)) { - $this->request->addHeaders($this->headers); - } + $data = $this->prepareData($data); - $this->sendRequest(); + try { + $this->response = $this->getClient()->request($method, $url, $data); + } catch (RequestException $e) { + if ($e->hasResponse()) { + $this->response = $e->getResponse(); + } + } } /** @@ -158,6 +202,7 @@ public function iSendARequest($method, $url) * @param TableNode $post table of post values * * @When /^(?:I )?send a ([A-Z]+) request to "([^"]+)" with values:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithValues($method, $url, TableNode $post) { @@ -171,7 +216,7 @@ public function iSendARequestWithValues($method, $url, TableNode $post) $bodyOption = array( 'body' => json_encode($fields), ); - $this->request = $this->getClient()->createRequest($method, $url, $bodyOption); + $this->request = $this->getClient()->request($method, $url, $bodyOption); if (!empty($this->headers)) { $this->request->addHeaders($this->headers); } @@ -187,22 +232,18 @@ public function iSendARequestWithValues($method, $url, TableNode $post) * @param PyStringNode $string request body * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)" with body:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithBody($method, $url, PyStringNode $string) { $url = $this->prepareUrl($url); $string = $this->replacePlaceHolder(trim($string)); - $this->request = $this->getClient()->createRequest( + $this->request = $this->iSendARequest( $method, $url, - array( - 'headers' => $this->getHeaders(), - 'body' => $string, - ) + [ 'body' => $string, ] ); - - $this->sendRequest(); } /** @@ -213,6 +254,7 @@ public function iSendARequestWithBody($method, $url, PyStringNode $string) * @param PyStringNode $body request body * * @When /^(?:I )?send a "([A-Z]+)" request to "([^"]+)" with form data:$/ + * @throws \GuzzleHttp\Exception\GuzzleException */ public function iSendARequestWithFormData($method, $url, PyStringNode $body) { @@ -221,7 +263,7 @@ public function iSendARequestWithFormData($method, $url, PyStringNode $body) $fields = array(); parse_str(implode('&', explode("\n", $body)), $fields); - $this->request = $this->getClient()->createRequest($method, $url); + $this->request = $this->getClient()->request($method, $url, []); /** @var \GuzzleHttp\Post\PostBodyInterface $requestBody */ $requestBody = $this->request->getBody(); foreach ($fields as $key => $value) { @@ -233,44 +275,49 @@ public function iSendARequestWithFormData($method, $url, PyStringNode $body) /** * @When /^(?:I )?send a multipart "([A-Z]+)" request to "([^"]+)" with form data:$/ + * @param $method + * @param $url + * @param TableNode $post + * + * @throws \GuzzleHttp\Exception\GuzzleException + * @throws \DomainException */ public function iSendAMultipartRequestToWithFormData($method, $url, TableNode $post) { $url = $this->prepareUrl($url); - $this->request = $this->getClient()->createRequest($method, $url); + $fileData = $post->getColumnsHash()[0]; - $data = $post->getColumnsHash()[0]; - - $hasFile = false; - - if (array_key_exists('filePath', $data)) { - $filePath = $this->dummyDataPath . $data['filePath']; - unset($data['filePath']); - $hasFile = true; + if ( ! array_key_exists('filePath', $fileData)) { + throw new \DomainException('Multipart requests require a `filePath` Behat table node'); } + $filePath = $this->dummyDataPath . $fileData['filePath']; + unset($fileData['filePath']); + + $data['multipart'] = [ + [ + 'name' => 'name', // symfony form field name + 'contents' => $fileData['name'], + ], + [ + 'name' => 'uploadedFile', // symfony form field name + 'contents' => fopen($filePath, 'rb'), + ] + ]; - /** @var \GuzzleHttp\Post\PostBodyInterface $requestBody */ - $requestBody = $this->request->getBody(); - foreach ($data as $key => $value) { - $requestBody->setField($key, $value); - } - - - if ($hasFile) { - $file = fopen($filePath, 'rb'); - $postFile = new PostFile('uploadedFile', $file); - $requestBody->addFile($postFile); - } - + // remove the Content-Type header here as it will have been set to `application/json` during the successful + // login, that preceeds this step in the Behat Background setup + $this->removeHeader('Content-Type'); + $data = $this->prepareData($data); - if (!empty($this->headers)) { - $this->request->addHeaders($this->headers); + try { + $this->response = $this->getClient()->request($method, $url, $data); + } catch (RequestException $e) { + if ($e->hasResponse()) { + $this->response = $e->getResponse(); + } } - $this->request->setHeader('Content-Type', 'multipart/form-data'); - - $this->sendRequest(); } /** @@ -282,8 +329,8 @@ public function iSendAMultipartRequestToWithFormData($method, $url, TableNode $p */ public function theResponseCodeShouldBe($code) { - $expected = intval($code); - $actual = intval($this->response->getStatusCode()); + $expected = (int)$code; + $actual = (int)$this->response->getStatusCode(); Assertions::assertSame($expected, $actual); } @@ -292,7 +339,7 @@ public function theResponseCodeShouldBe($code) * * @param string $text * - * @Then /^(?:the )?response should contain "([^"]*)"$/ + * @Then /^(?:the )?response should contain "((?:[^"]|\\")*)"$/ */ public function theResponseShouldContain($text) { @@ -329,7 +376,7 @@ public function theResponseShouldNotContain($text) public function theResponseShouldContainJson(PyStringNode $jsonString) { $etalon = json_decode($this->replacePlaceHolder($jsonString->getRaw()), true); - $actual = $this->response->json(); + $actual = json_decode($this->response->getBody(), true); if (null === $etalon) { throw new \RuntimeException( @@ -351,13 +398,10 @@ public function theResponseShouldContainJson(PyStringNode $jsonString) */ public function printResponse() { - $request = $this->request; $response = $this->response; echo sprintf( - "%s %s => %d:\n%s", - $request->getMethod(), - $request->getUrl(), + "%d:\n%s", $response->getStatusCode(), $response->getBody() ); @@ -399,11 +443,16 @@ public function setPlaceHolder($key, $value) } /** - * @Then the I follow the link in the Location response header + * @Then I follow the link in the Location response header */ - public function theIFollowTheLinkInTheLocationResponseHeader() + public function iFollowTheLinkInTheLocationResponseHeader() { - $location = $this->response->getHeader('Location'); + $location = $this->response->getHeader('Location')[0]; + + if ( ! $this->hasHeader('Authorization')) { + $responseBody = json_decode($this->response->getBody(), true); + $this->addHeader('Authorization', 'Bearer ' . $responseBody['token']); + } $this->iSendARequest(Request::METHOD_GET, $location); } @@ -415,7 +464,7 @@ public function theJsonShouldBeValidAccordingToThisSchema(PyStringNode $schema) { $inspector = new JsonInspector('javascript'); - $json = new \Sanpi\Behatch\Json\Json(json_encode($this->response->json())); + $json = new \Sanpi\Behatch\Json\Json($this->response->getBody()); $inspector->validate( $json, @@ -427,10 +476,11 @@ public function theJsonShouldBeValidAccordingToThisSchema(PyStringNode $schema) * Checks, that given JSON node is equal to given value * * @Then the JSON node :node should be equal to :text + * @throws \Exception */ public function theJsonNodeShouldBeEqualTo($node, $text) { - $json = new \Sanpi\Behatch\Json\Json(json_encode($this->response->json())); + $json = new \Sanpi\Behatch\Json\Json($this->response->getBody()); $inspector = new JsonInspector('javascript'); @@ -443,6 +493,43 @@ public function theJsonNodeShouldBeEqualTo($node, $text) } } + /** + * @Then the :selector date should be approximately :date + * @throws \InvalidArgumentException + * @throws \PHPUnit_Framework_AssertionFailedError + */ + public function theDateShouldBeApproximately($selector, $date) + { + $responseBody = $this->getResponseBody(); + $dateTimeFromResponse = new \DateTime($responseBody[$selector]); + $expectedDateTime = new \DateTime($date); + + Assertions::assertTrue( + $expectedDateTime->diff($dateTimeFromResponse)->format('%s') < 5 + ); + } + + /** + * Checks whether the response content is equal to given text + * + * @Then the response should be equal to + */ + public function theResponseShouldBeEqualTo(PyStringNode $expected) + { + $expected = str_replace('\\"', '"', $expected); + $actual = $actual = (string) $this->response->getBody(); + $message = "The string '$expected' is not equal to the response of the current page"; + Assertions::assertEquals($expected, $actual, $message); + } + + /** + * @return array + */ + protected function getResponseBody() + { + return json_decode($this->response->getBody(), true); + } + /** * Replaces placeholders in provided text. * @@ -477,15 +564,20 @@ protected function getHeaders() */ protected function addHeader($name, $value) { - if (isset($this->headers[$name])) { - if (!is_array($this->headers[$name])) { - $this->headers[$name] = array($this->headers[$name]); - } - - $this->headers[$name][] = $value; - } else { + if ( ! $this->hasHeader($name)) { $this->headers[$name] = $value; } + + if (!is_array($this->headers[$name])) { + $this->headers[$name] = [$this->headers[$name]]; + } + + $this->headers[$name] = $value; + } + + protected function hasHeader($name) + { + return isset($this->headers[$name]); } /** @@ -500,22 +592,6 @@ protected function removeHeader($headerName) } } - /** - * - */ - private function sendRequest() - { - try { - $this->response = $this->getClient()->send($this->request); - } catch (RequestException $e) { - $this->response = $e->getResponse(); - - if (null === $this->response) { - throw $e; - } - } - } - /** * @return ClientInterface */ @@ -527,4 +603,16 @@ private function getClient() return $this->client; } -} + + private function prepareData($data) + { + if (!empty($this->headers)) { + $data = array_replace( + $data, + ["headers" => $this->headers] + ); + } + + return $data; + } +} \ No newline at end of file diff --git a/src/AppBundle/Features/account.feature b/src/AppBundle/Features/account.feature index 3e8b2f2..f88bddd 100644 --- a/src/AppBundle/Features/account.feature +++ b/src/AppBundle/Features/account.feature @@ -17,7 +17,7 @@ Feature: Manage Account data through API | a2 | test account | u2,u1 | | a3 | an empty account | | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User can GET a Collection of their Account objects diff --git a/src/AppBundle/Features/developer_experience.feature b/src/AppBundle/Features/developer_experience.feature index fbf24a1..729fafc 100644 --- a/src/AppBundle/Features/developer_experience.feature +++ b/src/AppBundle/Features/developer_experience.feature @@ -11,7 +11,7 @@ Feature: To improve the developer experience of our API | u1 | peter | peter@test.com | testpass | | u2 | john | john@test.org | johnpass | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User must have the right Content-type diff --git a/src/AppBundle/Features/file.feature b/src/AppBundle/Features/file.feature index 2b366a2..f0ba08e 100644 --- a/src/AppBundle/Features/file.feature +++ b/src/AppBundle/Features/file.feature @@ -21,7 +21,7 @@ Feature: Manage uploaded Files through API | a2 | account2 | u1 | f3 | | a3 | account3 | u2 | f2 | And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" + And I set header "Content-Type" with value "application/json" Scenario: User can GET a Collection of their Files objects diff --git a/src/AppBundle/Features/user.feature b/src/AppBundle/Features/user.feature index 26feaf2..ff4872e 100644 --- a/src/AppBundle/Features/user.feature +++ b/src/AppBundle/Features/user.feature @@ -13,18 +13,18 @@ Feature: Manage Users data via the RESTful API # And there are Accounts with the following details: # | uid | name | users | # | a1 | account1 | u1 | + And I set header "Content-Type" with value "application/json" And I am successfully logged in with username: "peter", and password: "testpass" - And when consuming the endpoint I use the "headers/content-type" of "application/json" Scenario: User cannot GET a Collection of User objects When I send a "GET" request to "/users" Then the response code should be 405 - Scenario: User can GET their personal data by their unique ID When I send a "GET" request to "/users/u1" Then the response code should be 200 + # step may fail depending on web server config And the response header "Content-Type" should be equal to "application/json; charset=utf-8" And the response should contain json: """ @@ -45,7 +45,7 @@ Feature: Manage Users data via the RESTful API When I send a "GET" request to "/users/u100" Then the response code should be 403 - + @t Scenario: User cannot POST to the Users collection When I send a "POST" request to "/users" Then the response code should be 405 diff --git a/src/AppBundle/Security/Authorization/Voter/AccountVoter.php b/src/AppBundle/Security/Authorization/Voter/AccountVoter.php index d30961f..99a2111 100755 --- a/src/AppBundle/Security/Authorization/Voter/AccountVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/AccountVoter.php @@ -13,9 +13,6 @@ */ class AccountVoter implements VoterInterface { - /** - * - */ const VIEW = 'view'; /** @@ -24,9 +21,7 @@ class AccountVoter implements VoterInterface */ public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW === $attribute; } /** @@ -35,7 +30,7 @@ public function supportsAttribute($attribute) */ public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\AccountInterface'; + $supportedClass = AccountInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } @@ -48,6 +43,10 @@ public function supportsClass($class) */ public function vote(TokenInterface $token, $requestedAccount, array $attributes) { + if (null === $requestedAccount) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedAccount))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/src/AppBundle/Security/Authorization/Voter/FileVoter.php b/src/AppBundle/Security/Authorization/Voter/FileVoter.php index 1a93060..5da5c8d 100644 --- a/src/AppBundle/Security/Authorization/Voter/FileVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/FileVoter.php @@ -10,9 +10,6 @@ class FileVoter implements VoterInterface { - /** - * - */ const VIEW = 'view'; /** @@ -21,9 +18,7 @@ class FileVoter implements VoterInterface */ public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW === $attribute; } /** @@ -32,7 +27,7 @@ public function supportsAttribute($attribute) */ public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\FileInterface'; + $supportedClass = FileInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } @@ -45,6 +40,10 @@ public function supportsClass($class) */ public function vote(TokenInterface $token, $requestedFile, array $attributes) { + if (null === $requestedFile) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedFile))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/src/AppBundle/Security/Authorization/Voter/UserVoter.php b/src/AppBundle/Security/Authorization/Voter/UserVoter.php index 6786648..42ada5f 100644 --- a/src/AppBundle/Security/Authorization/Voter/UserVoter.php +++ b/src/AppBundle/Security/Authorization/Voter/UserVoter.php @@ -4,6 +4,7 @@ use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; +use AppBundle\Model\UserInterface; class UserVoter implements VoterInterface { @@ -11,20 +12,22 @@ class UserVoter implements VoterInterface public function supportsAttribute($attribute) { - return in_array($attribute, array( - self::VIEW, - )); + return self::VIEW == $attribute; } public function supportsClass($class) { - $supportedClass = 'AppBundle\Model\UserInterface'; + $supportedClass = UserInterface::class; return $supportedClass === $class || is_subclass_of($class, $supportedClass); } public function vote(TokenInterface $token, $requestedUser, array $attributes) { + if (null === $requestedUser) { + return VoterInterface::ACCESS_DENIED; + } + // check if class of this object is supported by this voter if (!$this->supportsClass(get_class($requestedUser))) { return VoterInterface::ACCESS_ABSTAIN; diff --git a/var/SymfonyRequirements.php b/var/SymfonyRequirements.php index 7e7a99d..3b14a40 100644 --- a/var/SymfonyRequirements.php +++ b/var/SymfonyRequirements.php @@ -633,12 +633,6 @@ function_exists('mb_strlen'), 'Install and enable the mbstring extension.' ); - $this->addRecommendation( - function_exists('iconv'), - 'iconv() should be available', - 'Install and enable the iconv extension.' - ); - $this->addRecommendation( function_exists('utf8_decode'), 'utf8_decode() should be available', diff --git a/web/app.php b/web/app.php index 5c5ee03..bb73951 100644 --- a/web/app.php +++ b/web/app.php @@ -19,7 +19,6 @@ */ $kernel = new AppKernel('prod', false); -$kernel->loadClassCache(); //$kernel = new AppCache($kernel); // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter diff --git a/web/app_acceptance.php b/web/app_acceptance.php index b57aeeb..5bcaf14 100644 --- a/web/app_acceptance.php +++ b/web/app_acceptance.php @@ -25,7 +25,6 @@ Debug::enable(); $kernel = new AppKernel('acceptance', true); -$kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); diff --git a/web/app_dev.php b/web/app_dev.php index 2663ba8..e4352ca 100644 --- a/web/app_dev.php +++ b/web/app_dev.php @@ -25,7 +25,6 @@ Debug::enable(); $kernel = new AppKernel('dev', true); -$kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); diff --git a/web/config.php b/web/config.php index 69df43c..fd7e17e 100644 --- a/web/config.php +++ b/web/config.php @@ -11,7 +11,7 @@ */ if (!isset($_SERVER['HTTP_HOST'])) { - exit('This script cannot be run from the CLI. Run it from a browser.'); + exit("This script cannot be run from the CLI. Run it from a browser.\n"); } if (!in_array(@$_SERVER['REMOTE_ADDR'], array( From 58d54c398db10fb34a9e1f2f9442b55dfab41100 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 3 Mar 2018 11:40:25 +0000 Subject: [PATCH 2/2] basic working --- app/config/config.yml | 10 +- app/config/routing.yml | 4 +- composer.json | 2 +- composer.lock | 224 +++++++++++------- .../Command/SwaggerDocblockConvertCommand.php | 187 +++++++++++++++ .../Controller/AccountsController.php | 127 ++++++---- src/AppBundle/Controller/FilesController.php | 134 +++++++---- src/AppBundle/Controller/UsersController.php | 64 +++-- 8 files changed, 546 insertions(+), 206 deletions(-) create mode 100644 src/AppBundle/Command/SwaggerDocblockConvertCommand.php diff --git a/app/config/config.yml b/app/config/config.yml index af126c6..fd8bd53 100644 --- a/app/config/config.yml +++ b/app/config/config.yml @@ -85,14 +85,8 @@ nelmio_cors: # Nelmio API Doc nelmio_api_doc: - sandbox: - accept_type: "application/json" - body_format: - formats: [ "json" ] - default_format: "json" - request_format: - formats: - json: "application/json" + documentation: + title: "Symfony 3 REST API Example" # FOS User Bundle diff --git a/app/config/routing.yml b/app/config/routing.yml index e143151..2109bc0 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -1,6 +1,6 @@ NelmioApiDocBundle: - resource: "@NelmioApiDocBundle/Resources/config/routing.yml" - prefix: "/doc" + resource: "@NelmioApiDocBundle/Resources/config/routing/swaggerui.xml" + prefix: /doc api: diff --git a/composer.json b/composer.json index d8d292e..b7f7d37 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "twig/twig": "2.4.4", "nelmio/cors-bundle": "^1.5", - "nelmio/api-doc-bundle": "^2.11", + "nelmio/api-doc-bundle": "^3.0", "friendsofsymfony/rest-bundle": "^2.3.1", "jms/serializer-bundle": "^1.1", "oneup/flysystem-bundle": "^1.2", diff --git a/composer.lock b/composer.lock index f7a25cb..cb6800f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "ce7953768d5240e5f657ff61b2c731ec", + "content-hash": "4a88c10475f6d98930ffd39a29c8a7c3", "packages": [ { "name": "composer/ca-bundle", @@ -908,6 +908,45 @@ ], "time": "2018-01-14T20:52:44+00:00" }, + { + "name": "exsyst/swagger", + "version": "v0.4.0", + "source": { + "type": "git", + "url": "https://github.com/GuilhemN/swagger.git", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GuilhemN/swagger/zipball/9e3a92833ee8489db899607f72deec7d7995e050", + "reference": "9e3a92833ee8489db899607f72deec7d7995e050", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "EXSyst\\Component\\Swagger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ener-Getick", + "email": "egetick@gmail.com" + } + ], + "description": "A php library to manipulate Swagger specifications", + "time": "2018-02-03T12:20:03+00:00" + }, { "name": "fig/link-util", "version": "1.0.0", @@ -1844,52 +1883,6 @@ ], "time": "2018-01-25 08:24:45" }, - { - "name": "michelf/php-markdown", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/michelf/php-markdown.git", - "reference": "01ab082b355bf188d907b9929cd99b2923053495" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/01ab082b355bf188d907b9929cd99b2923053495", - "reference": "01ab082b355bf188d907b9929cd99b2923053495", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Michelf\\": "Michelf/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Michel Fortin", - "email": "michel.fortin@michelf.ca", - "homepage": "https://michelf.ca/", - "role": "Developer" - }, - { - "name": "John Gruber", - "homepage": "https://daringfireball.net/" - } - ], - "description": "PHP Markdown", - "homepage": "https://michelf.ca/projects/php-markdown/", - "keywords": [ - "markdown" - ], - "time": "2018-01-15T00:49:33+00:00" - }, { "name": "monolog/monolog", "version": "1.23.0", @@ -2033,64 +2026,61 @@ }, { "name": "nelmio/api-doc-bundle", - "version": "2.13.3", - "target-dir": "Nelmio/ApiDocBundle", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "f0a606b6362c363043e01aa079bee2b0b5eb47a2" + "reference": "29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/f0a606b6362c363043e01aa079bee2b0b5eb47a2", - "reference": "f0a606b6362c363043e01aa079bee2b0b5eb47a2", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c", + "reference": "29ec20bda12c4f0f65dd806ab00f25a9d5b20b9c", "shasum": "" }, "require": { - "michelf/php-markdown": "~1.4", - "php": ">=5.4", - "symfony/console": "~2.3|~3.0|~4.0", - "symfony/framework-bundle": "~2.3|~3.0|~4.0", - "symfony/twig-bundle": "~2.3|~3.0|~4.0" - }, - "conflict": { - "jms/serializer": "<0.12", - "jms/serializer-bundle": "<0.11", - "symfony/symfony": "~2.7.8", - "twig/twig": "<1.12" + "exsyst/swagger": "~0.3", + "php": "^7.0", + "symfony/framework-bundle": "^3.2.5|^4.0", + "symfony/property-info": "^3.1|^4.0", + "zircote/swagger-php": "^2.0.9" }, "require-dev": { - "doctrine/doctrine-bundle": "~1.5", - "doctrine/orm": "~2.3", - "dunglas/api-bundle": "~1.0", - "friendsofsymfony/rest-bundle": "~1.0|~2.0", - "jms/serializer-bundle": ">=0.11", - "sensio/framework-extra-bundle": "~3.0", - "symfony/browser-kit": "~2.3|~3.0|~4.0", - "symfony/css-selector": "~2.3|~3.0|~4.0", - "symfony/finder": "~2.3|~3.0|~4.0", - "symfony/form": "~2.3|~3.0|~4.0", - "symfony/phpunit-bridge": "~2.7|~3.0|~4.0", - "symfony/serializer": "~2.7|~3.0|~4.0", - "symfony/validator": "~2.3|~3.0|~4.0", - "symfony/yaml": "~2.3|~3.0|~4.0" + "api-platform/core": "^2.0.3", + "doctrine/annotations": "^1.2", + "friendsofsymfony/rest-bundle": "^2.0", + "jms/serializer-bundle": "^2.0", + "phpdocumentor/reflection-docblock": "^3.1", + "sensio/framework-extra-bundle": "^3.0", + "symfony/asset": "^2.8|^3.0|^4.0", + "symfony/browser-kit": "^2.8|^3.0|^4.0", + "symfony/cache": "^3.1|^4.0", + "symfony/config": "^2.8|^3.0|^4.0", + "symfony/console": "^2.8|^3.0|^4.0", + "symfony/dom-crawler": "^2.8|^3.0|^4.0", + "symfony/form": "^3.0.8|^4.0", + "symfony/phpunit-bridge": "^3.3", + "symfony/property-access": "^2.8|^3.0|^4.0", + "symfony/stopwatch": "^2.8|^3.0|^4.0", + "symfony/templating": "^2.8|^3.0|^4.0", + "symfony/twig-bundle": "^3.0|^4.0", + "symfony/validator": "^2.8|^3.0|^4.0", + "symfony/yaml": "^2.8|^3.0|^4.0" }, "suggest": { - "dunglas/api-bundle": "For making use of resources definitions of DunglasApiBundle.", - "friendsofsymfony/rest-bundle": "For making use of REST information in the doc.", - "jms/serializer": "For making use of serializer information in the doc.", - "symfony/form": "For using form definitions as input.", - "symfony/validator": "For making use of validator information in the doc." + "api-platform/core": "For using an API oriented framework.", + "friendsofsymfony/rest-bundle": "For using the parameters annotations.", + "phpdocumentor/reflection-docblock": "For parsing php docs." }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-2.x": "2.13-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { - "psr-0": { - "Nelmio\\ApiDocBundle": "" + "psr-4": { + "Nelmio\\ApiDocBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2114,7 +2104,7 @@ "documentation", "rest" ], - "time": "2017-12-05T06:14:09+00:00" + "time": "2017-12-09T13:31:56+00:00" }, { "name": "nelmio/cors-bundle", @@ -3689,6 +3679,68 @@ "negotiation" ], "time": "2017-05-14T17:21:12+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "2.0.13", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "reference": "8b42fdc3d8c5a5e0d1f8d344aa359822c9f085e0", + "shasum": "" + }, + "require": { + "doctrine/annotations": "*", + "php": ">=5.6", + "symfony/finder": ">=2.2" + }, + "require-dev": { + "phpunit/phpunit": ">=4.8.35 <=5.6", + "squizlabs/php_codesniffer": ">=2.7", + "zendframework/zend-form": "<2.8" + }, + "bin": [ + "bin/swagger" + ], + "type": "library", + "autoload": { + "psr-4": { + "Swagger\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com", + "homepage": "http://www.zircote.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "http://bfanger.nl" + } + ], + "description": "Swagger-PHP - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "time": "2017-12-01T09:22:05+00:00" } ], "packages-dev": [ diff --git a/src/AppBundle/Command/SwaggerDocblockConvertCommand.php b/src/AppBundle/Command/SwaggerDocblockConvertCommand.php new file mode 100644 index 0000000..4e7133c --- /dev/null +++ b/src/AppBundle/Command/SwaggerDocblockConvertCommand.php @@ -0,0 +1,187 @@ + + * @author Guilhem Niot + */ +class SwaggerDocblockConvertCommand extends ContainerAwareCommand +{ + protected function configure() + { + $this + ->setDescription('') + ->setName('api:doc:convert') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $extractor = $this->getContainer()->get('nelmio_api_doc.extractor.api_doc_extractor'); + $apiDocs = $extractor->extractAnnotations($extractor->getRoutes()); + + foreach ($apiDocs as $annotation) { + /** @var ApiDoc $apiDoc */ + $apiDoc = $annotation['annotation']; + + $refl = $extractor->getReflectionMethod($apiDoc->getRoute()->getDefault('_controller')); + + $this->rewriteClass($refl->getFileName(), $refl, $apiDoc); + } + } + + /** + * Rewrite class with correct apidoc. + */ + private function rewriteClass(string $path, \ReflectionMethod $method, ApiDoc $apiDoc) + { + echo "Processing $path::{$method->name}\n"; + $code = file_get_contents($path); + $old = $this->locateNelmioAnnotation($code, $method->name); + + $code = substr_replace($code, $this->renderSwaggerAnnotation($apiDoc, $method), $old['start'], $old['length']); + $code = str_replace('use Nelmio\ApiDocBundle\Annotation\ApiDoc;', "use Nelmio\ApiDocBundle\Annotation\Operation;\nuse Nelmio\ApiDocBundle\Annotation\Model;\nuse Swagger\Annotations as SWG;", $code); + + file_put_contents($path, $code); + } + + private function renderSwaggerAnnotation(ApiDoc $apiDoc, \ReflectionMethod $method): string + { + $info = $apiDoc->toArray(); + if ($apiDoc->getResource()) { + throw new \RuntimeException('implement me'); + } + $path = str_replace('.{_format}', '', $apiDoc->getRoute()->getPath()); + + $annotation = '@Operation( + * tags={"'.$apiDoc->getSection().'"}, + * summary="'.$this->escapeQuotes($apiDoc->getDescription()).'"'; + + foreach ($apiDoc->getFilters() as $name => $parameter) { + $description = array_key_exists('description', $parameter) && null !== $parameter['description'] + ? $this->escapeQuotes($parameter['description']) + : 'todo'; + + $annotation .= ', + * @SWG\Parameter( + * name="'.$name.'", + * in="query", + * description="'.$description.'", + * required='.(array_key_exists($name, $apiDoc->getRequirements()) ? 'true' : 'false').', + * type="'.$this->determineDataType($parameter).'" + * )'; + } + + // Put parameters for POST requests into formData, as Swagger cannot handle more than one body parameter + $in = 'POST' === $apiDoc->getMethod() + ? 'formData' + : 'body'; + + foreach ($apiDoc->getParameters() as $name => $parameter) { + $description = array_key_exists('description', $parameter) + ? $this->escapeQuotes($parameter['description']) + : 'todo'; + + $annotation .= ', + * @SWG\Parameter( + * name="'.$name.'", + * in="'.$in.'", + * description="'.$description.'", + * required='.(array_key_exists($name, $apiDoc->getRequirements()) ? 'true' : 'false').', + * type="'.$this->determineDataType($parameter).'"'; + + if ('POST' !== $apiDoc->getMethod()) { + $annotation .= ', + * schema=""'; + } + + $annotation .= ' + * )'; + } + + if (array_key_exists('statusCodes', $info)) { + $responses = $info['statusCodes']; + foreach ($responses as $code => $description) { + $responses[$code] = reset($description); + } + } else { + $responses = [200 => 'Returned when successful']; + } + + $responseMap = $apiDoc->getResponseMap(); + foreach ($responses as $code => $description) { + $annotation .= ", + * @SWG\\Response( + * response=\"$code\", + * description=\"{$this->escapeQuotes($description)}\""; + if (200 === $code && isset($responseMap[$code]['class'])) { + $model = $responseMap[$code]['class']; + $annotation .= ", + * @Model(type=\"$model\")"; + } + $annotation .= ' + * )'; + } + + $annotation .= ' + * ) + *'; + + return $annotation; + } + + /** + * @return array with `start` position and `length` + */ + private function locateNelmioAnnotation(string $code, string $methodName): array + { + $position = strpos($code, "tion $methodName("); + if (false === $position) { + throw new \RuntimeException("Method $methodName not found in controller."); + } + + $docstart = strrpos(substr($code, 0, $position), '@ApiDoc'); + if (false === $docstart) { + throw new \RuntimeException("Method $methodName has no @ApiDoc annotation around\n".substr($code, $position - 200, 150)); + } + $docend = strpos($code, '* )', $docstart) + 3; + + return [ + 'start' => $docstart, + 'length' => $docend - $docstart, + ]; + } + + private function escapeQuotes(string $str): string + { + $lines = []; + foreach (explode("\n", $str) as $line) { + $lines[] = trim($line, ' *'); + } + + return str_replace('"', '""', implode(' ', $lines)); + } + + private function determineDataType(array $parameter): string + { + $dataType = isset($parameter['dataType']) ? $parameter['dataType'] : 'string'; + $transform = [ + 'float' => 'number', + 'datetime' => 'string', + ]; + if (array_key_exists($dataType, $transform)) { + $dataType = $transform[$dataType]; + } + + return $dataType; + } +} \ No newline at end of file diff --git a/src/AppBundle/Controller/AccountsController.php b/src/AppBundle/Controller/AccountsController.php index 36cf137..95d3bc1 100755 --- a/src/AppBundle/Controller/AccountsController.php +++ b/src/AppBundle/Controller/AccountsController.php @@ -11,7 +11,9 @@ use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; use JMS\Serializer\SerializationContext; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -23,14 +25,20 @@ class AccountsController extends FOSRestController implements ClassResourceInter /** * Get a single account. * - * @ApiDoc( - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single account.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the account id * * @throws NotFoundHttpException when does not exist @@ -50,14 +58,20 @@ public function getAction($accountId) /** * Gets a collection of the given User's Accounts. * - * @ApiDoc( - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of the given User's Accounts.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @throws NotFoundHttpException when does not exist * * @Annotations\View(serializerGroups={ @@ -78,15 +92,20 @@ public function cgetAction() /** * Creates a new Account * - * @ApiDoc( - * input = "AppBundle\Form\Type\AccountFormType", - * output = "AppBundle\Entity\Account", - * statusCodes={ - * 201="Returned when a new Account has been successfully created", - * 400="Returned when the posted data is invalid" - * } + * @Operation( + * tags={""}, + * summary="Creates a new Account", + * @SWG\Response( + * response="201", + * description="Returned when a new Account has been successfully created" + * ), + * @SWG\Response( + * response="400", + * description="Returned when the posted data is invalid" + * ) * ) * + * * @param Request $request * @return View */ @@ -113,17 +132,24 @@ public function postAction(Request $request) /** * Update existing Account from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\AccountType", - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing Account from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the account id * @@ -159,17 +185,24 @@ public function patchAction(Request $request, $id) /** * Replaces existing Account from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\AccountType", - * output = "AppBundle\Entity\Account", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Replaces existing Account from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the account id * @@ -205,14 +238,20 @@ public function putAction(Request $request, $id) /** * Deletes a specific Account by ID * - * @ApiDoc( - * description="Deletes an existing Account", - * statusCodes={ - * 204="Returned when an existing Account has been successfully deleted", - * 403="Returned when trying to delete a non existent Account" - * } + * @Operation( + * tags={""}, + * summary="Deletes an existing Account", + * @SWG\Response( + * response="204", + * description="Returned when an existing Account has been successfully deleted" + * ), + * @SWG\Response( + * response="403", + * description="Returned when trying to delete a non existent Account" + * ) * ) * + * * @param int $id the account id * @return View */ diff --git a/src/AppBundle/Controller/FilesController.php b/src/AppBundle/Controller/FilesController.php index 9f1772d..7468772 100644 --- a/src/AppBundle/Controller/FilesController.php +++ b/src/AppBundle/Controller/FilesController.php @@ -8,7 +8,9 @@ use FOS\RestBundle\View\RouteRedirectView; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -24,14 +26,20 @@ class FilesController extends FOSRestController implements ClassResourceInterfac /** * Get a single file. * - * @ApiDoc( - * output = "AppBundle\Entity\File", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single file.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the Account id * @param int $fileId the File id * @@ -49,14 +57,20 @@ public function getAction($accountId, $fileId) /** * Gets a collection of the given User's Files. * - * @ApiDoc( - * output = "AppBundle\Entity\File", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of the given User's Files.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $accountId the Account id * * @Annotations\View(serializerGroups={ "files_all", "accounts_summary" }) @@ -80,15 +94,27 @@ public function cgetAction($accountId) /** * Creates a new File * - * @ApiDoc( - * input = "AppBundle\Form\Type\FileType", - * output = "AppBundle\Entity\File", - * statusCodes={ - * 201="Returned when a new File has been successfully created", - * 400="Returned when the posted data is invalid" - * } + * @Operation( + * tags={""}, + * summary="Creates a new File", + * @SWG\Parameter( + * name="filePath", + * in="formData", + * description="", + * required=false, + * type="file" + * ), + * @SWG\Response( + * response="201", + * description="Returned when a new File has been successfully created" + * ), + * @SWG\Response( + * response="400", + * description="Returned when the posted data is invalid" + * ) * ) * + * * @param Request $request * @param int $accountId the account id * @@ -125,17 +151,24 @@ public function postAction(Request $request, $accountId) /** * Update existing File from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\FileType", - * output = "AppBundle\Entity\File", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing File from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $accountId the account id * @param int $fileId the file id @@ -177,17 +210,24 @@ public function patchAction(Request $request, $accountId, $fileId) /** * Replaces existing File from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\FileType", - * output = "AppBundle\Entity\File", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Replaces existing File from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $accountId the account id * @param int $fileId the file id @@ -229,14 +269,20 @@ public function putAction(Request $request, $accountId, $fileId) /** * Deletes a specific File by ID * - * @ApiDoc( - * description="Deletes an existing File", - * statusCodes={ - * 204 = "Returned when an existing File has been successfully deleted", - * 403 = "Returned when trying to delete a non existent File" - * } + * @Operation( + * tags={""}, + * summary="Deletes an existing File", + * @SWG\Response( + * response="204", + * description="Returned when an existing File has been successfully deleted" + * ), + * @SWG\Response( + * response="403", + * description="Returned when trying to delete a non existent File" + * ) * ) * + * * @param int $accountId the account id * @param int $fileId the file id * diff --git a/src/AppBundle/Controller/UsersController.php b/src/AppBundle/Controller/UsersController.php index 3c840fa..092f4a7 100644 --- a/src/AppBundle/Controller/UsersController.php +++ b/src/AppBundle/Controller/UsersController.php @@ -8,7 +8,9 @@ use FOS\RestBundle\Controller\Annotations; use FOS\RestBundle\Controller\FOSRestController; use FOS\RestBundle\Routing\ClassResourceInterface; -use Nelmio\ApiDocBundle\Annotation\ApiDoc; +use Nelmio\ApiDocBundle\Annotation\Operation; +use Nelmio\ApiDocBundle\Annotation\Model; +use Swagger\Annotations as SWG; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Form\FormTypeInterface; use Symfony\Component\HttpFoundation\Response; @@ -25,14 +27,20 @@ class UsersController extends FOSRestController implements ClassResourceInterfac /** * Get a single User. * - * @ApiDoc( - * output = "AppBundle\Entity\User", - * statusCodes = { - * 200 = "Returned when successful", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Get a single User.", + * @SWG\Response( + * response="200", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param int $id the user id * * @throws NotFoundHttpException when does not exist @@ -49,13 +57,16 @@ public function getAction($id) /** * Gets a collection of Users. * - * @ApiDoc( - * output = "AppBundle\Entity\User", - * statusCodes = { - * 405 = "Method not allowed" - * } + * @Operation( + * tags={""}, + * summary="Gets a collection of Users.", + * @SWG\Response( + * response="405", + * description="Method not allowed" + * ) * ) * + * * @throws MethodNotAllowedHttpException * * @return View @@ -68,17 +79,28 @@ public function cgetAction() /** * Update existing User from the submitted data * - * @ApiDoc( - * resource = true, - * input = "AppBundle\Form\UserType", - * statusCodes = { - * 204 = "Returned when successful", - * 400 = "Returned when errors", - * 401 = "Returned when provided password is incorrect", - * 404 = "Returned when not found" - * } + * @Operation( + * tags={""}, + * summary="Update existing User from the submitted data", + * @SWG\Response( + * response="204", + * description="Returned when successful" + * ), + * @SWG\Response( + * response="400", + * description="Returned when errors" + * ), + * @SWG\Response( + * response="401", + * description="Returned when provided password is incorrect" + * ), + * @SWG\Response( + * response="404", + * description="Returned when not found" + * ) * ) * + * * @param Request $request the request object * @param int $id the user id * pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy