diff --git a/.gitignore b/.gitignore index e9665b5..3a2c6b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,11 @@ vendor/ web/bundles/ -docs/* app/cache/* app/logs/* -build/repositories/* -build/docs/* +build/* !app/cache/.gitkeep !app/logs/.gitkeep -!build/repositories/.gitkeep -!build/docs/.gitkeep -!docs/.gitkeep +!build/.gitkeep app/bootstrap.php.cache app/config/parameters.yml phpunit.xml diff --git a/app/AppKernel.php b/app/AppKernel.php index 975c58d..804b67d 100644 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -17,6 +17,7 @@ public function registerBundles() new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new Behat\Borg\Integration\Symfony\Release\ReleaseBundle(), new Behat\Borg\Integration\Symfony\Documentation\DocumentationBundle(), + new Behat\Borg\Integration\Symfony\Extension\ExtensionBundle(), ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { diff --git a/app/Resources/views/layout.html.twig b/app/Resources/views/layout.html.twig index 6a4c587..d24bb27 100644 --- a/app/Resources/views/layout.html.twig +++ b/app/Resources/views/layout.html.twig @@ -20,6 +20,9 @@ Documentation + + Extensions + Fork us diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php index cbcf1c8..b9d62f7 100644 --- a/app/SymfonyRequirements.php +++ b/app/SymfonyRequirements.php @@ -77,7 +77,7 @@ public function getTestMessage() } /** - * Returns the help text for resolving the problem + * Returns the help text for resolving the problem. * * @return string The help text */ @@ -119,10 +119,10 @@ class PhpIniRequirement extends Requirement * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -221,10 +221,10 @@ public function addRecommendation($fulfilled, $testMessage, $helpHtml, $helpText * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -239,10 +239,10 @@ public function addPhpIniRequirement($cfgName, $evaluation, $approveCfgAbsence = * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -542,11 +542,22 @@ function_exists('simplexml_import_dom'), /* optional recommendations follow */ - $this->addRecommendation( - file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'), - 'Requirements file should be up-to-date', - 'Your requirements file is outdated. Run composer install and re-check your configuration.' - ); + if (file_exists(__DIR__.'/../vendor/composer')) { + require_once __DIR__.'/../vendor/autoload.php'; + + try { + $r = new \ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle'); + + $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php'); + } catch (\ReflectionException $e) { + $contents = ''; + } + $this->addRecommendation( + file_get_contents(__FILE__) === $contents, + 'Requirements file should be up-to-date', + 'Your requirements file is outdated. Run composer install and re-check your configuration.' + ); + } $this->addRecommendation( version_compare($installedPhpVersion, '5.3.4', '>='), @@ -632,15 +643,15 @@ class_exists('Locale'), 'Install and enable the intl extension (used for validators).' ); - if (class_exists('Collator')) { + if (extension_loaded('intl')) { + // in some WAMP server installations, new Collator() returns null $this->addRecommendation( null !== new Collator('fr_FR'), 'intl extension should be correctly configured', 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' ); - } - if (class_exists('Locale')) { + // check for compatible ICU versions (only done when you have the intl extension) if (defined('INTL_ICU_VERSION')) { $version = INTL_ICU_VERSION; } else { @@ -659,6 +670,14 @@ class_exists('Locale'), 'intl ICU version should be at least 4+', 'Upgrade your intl extension with a newer ICU version (4+).' ); + + $this->addPhpIniRecommendation( + 'intl.error_level', + create_function('$cfgValue', 'return (int) $cfgValue === 0;'), + true, + 'intl.error_level should be 0 in php.ini', + 'Set "intl.error_level" to "0" in php.ini* to inhibit the messages when an error occurs in ICU functions.' + ); } $accelerator = diff --git a/app/config/config_test.yml b/app/config/config_test.yml index 50ec66c..11e6e22 100644 --- a/app/config/config_test.yml +++ b/app/config/config_test.yml @@ -19,6 +19,8 @@ twig: exception_controller: Behat\Borg\Integration\Symfony\Debug\Controller\ExceptionController::showAction parameters: - package.release_downloader.path: %kernel.cache_dir%/build/repositories - documentation.build.path: %kernel.cache_dir%/build/docs - documentation.publisher.path: %kernel.cache_dir%/docs + borg.cache_dir: %kernel.cache_dir%/build + package.release_downloader.path: %borg.cache_dir%/releases + documentation.build.path: %borg.cache_dir%/built_docs + documentation.publisher.path: %borg.cache_dir%/published_docs + extension.repo.path: %borg.cache_dir%/extensions diff --git a/app/config/routing.yml b/app/config/routing.yml index e0b8cad..e545175 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -5,6 +5,13 @@ homepage: template: '::homepage.html.twig' section: 'homepage' +extension: + resource: "@ExtensionBundle/Controller/" + type: annotation + prefix: /extensions + defaults: + section: 'extension' + documentation: resource: '@DocumentationBundle/Controller/' type: annotation diff --git a/build/docs/.gitkeep b/build/.gitkeep similarity index 100% rename from build/docs/.gitkeep rename to build/.gitkeep diff --git a/build/repositories/.gitkeep b/build/repositories/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/composer.lock b/composer.lock index df2f8a4..f8a54af 100644 --- a/composer.lock +++ b/composer.lock @@ -1,23 +1,23 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "bac14b2d878cb89a93da23dc0ee2d225", + "hash": "3f407f0cd601e00b3b39467d3b8d68f2", "packages": [ { "name": "doctrine/annotations", - "version": "v1.2.3", + "version": "v1.2.6", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4" + "reference": "f4a91702ca3cd2e568c3736aa031ed00c3752af4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/f4a91702ca3cd2e568c3736aa031ed00c3752af4", + "reference": "f4a91702ca3cd2e568c3736aa031ed00c3752af4", "shasum": "" }, "require": { @@ -72,20 +72,20 @@ "docblock", "parser" ], - "time": "2014-12-20 20:49:38" + "time": "2015-06-17 12:21:22" }, { "name": "doctrine/cache", - "version": "v1.4.0", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8" + "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/2346085d2b027b233ae1d5de59b07440b9f288c8", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8", + "url": "https://api.github.com/repos/doctrine/cache/zipball/c9eadeb743ac6199f7eec423cb9426bc518b7b03", + "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03", "shasum": "" }, "require": { @@ -96,13 +96,13 @@ }, "require-dev": { "phpunit/phpunit": ">=3.7", - "predis/predis": "~0.8", + "predis/predis": "~1.0", "satooshi/php-coveralls": "~0.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.5.x-dev" } }, "autoload": { @@ -142,25 +142,28 @@ "cache", "caching" ], - "time": "2015-01-15 20:38:55" + "time": "2015-04-15 00:11:59" }, { "name": "doctrine/collections", - "version": "v1.2", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2" + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, "type": "library", "extra": { "branch-alias": { @@ -177,17 +180,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -196,11 +188,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Collections Abstraction library", @@ -210,20 +208,20 @@ "collections", "iterator" ], - "time": "2014-02-03 23:07:43" + "time": "2015-04-14 22:21:58" }, { "name": "doctrine/common", - "version": "v2.4.2", + "version": "v2.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b" + "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b", + "url": "https://api.github.com/repos/doctrine/common/zipball/cd8daf2501e10c63dced7b8b9b905844316ae9d3", + "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3", "shasum": "" }, "require": { @@ -240,7 +238,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -253,17 +251,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -272,11 +259,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Common Library for Doctrine projects", @@ -288,7 +281,7 @@ "persistence", "spl" ], - "time": "2014-05-21 19:28:51" + "time": "2015-04-02 19:55:44" }, { "name": "doctrine/inflector", @@ -466,16 +459,16 @@ }, { "name": "guzzle/guzzle", - "version": "v3.9.2", + "version": "v3.9.3", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle3.git", - "reference": "54991459675c1a2924122afbb0e5609ade581155" + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/54991459675c1a2924122afbb0e5609ade581155", - "reference": "54991459675c1a2924122afbb0e5609ade581155", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", "shasum": "" }, "require": { @@ -516,6 +509,9 @@ "zendframework/zend-cache": "2.*,<2.3", "zendframework/zend-log": "2.*,<2.3" }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, "type": "library", "extra": { "branch-alias": { @@ -543,7 +539,7 @@ "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -554,21 +550,20 @@ "rest", "web service" ], - "time": "2014-08-11 04:32:36" + "time": "2015-03-18 18:23:50" }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.1.0", - "target-dir": "Incenteev/ParameterHandler", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "143272a0a09c62616a3c8011fc165a10c6b35241" + "reference": "84a205fe80a46101607bafbc423019527893ddd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/143272a0a09c62616a3c8011fc165a10c6b35241", - "reference": "143272a0a09c62616a3c8011fc165a10c6b35241", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/84a205fe80a46101607bafbc423019527893ddd0", + "reference": "84a205fe80a46101607bafbc423019527893ddd0", "shasum": "" }, "require": { @@ -587,8 +582,8 @@ } }, "autoload": { - "psr-0": { - "Incenteev\\ParameterHandler": "" + "psr-4": { + "Incenteev\\ParameterHandler\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -606,20 +601,20 @@ "keywords": [ "parameters management" ], - "time": "2013-12-07 10:10:39" + "time": "2015-06-03 08:27:03" }, { "name": "knplabs/github-api", - "version": "1.4.1", + "version": "1.4.14", "source": { "type": "git", "url": "https://github.com/KnpLabs/php-github-api.git", - "reference": "c4fb5fe66df44efa83a7236c3e18dca557649217" + "reference": "9010dbe21f4b0bae0edae26bbe031d7d91347938" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/c4fb5fe66df44efa83a7236c3e18dca557649217", - "reference": "c4fb5fe66df44efa83a7236c3e18dca557649217", + "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/9010dbe21f4b0bae0edae26bbe031d7d91347938", + "reference": "9010dbe21f4b0bae0edae26bbe031d7d91347938", "shasum": "" }, "require": { @@ -636,12 +631,12 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-0": { - "Github\\": "lib/" + "psr-4": { + "Github\\": "lib/Github/" } }, "notification-url": "https://packagist.org/downloads/", @@ -667,7 +662,7 @@ "gist", "github" ], - "time": "2014-12-22 23:59:03" + "time": "2015-07-03 14:59:20" }, { "name": "kriswallsmith/assetic", @@ -745,16 +740,16 @@ }, { "name": "monolog/monolog", - "version": "1.12.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f" + "reference": "dc5150cc608f2334c72c3b6a553ec9668a4156b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1fbe8c2641f2b163addf49cc5e18f144bec6b19f", - "reference": "1fbe8c2641f2b163addf49cc5e18f144bec6b19f", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/dc5150cc608f2334c72c3b6a553ec9668a4156b0", + "reference": "dc5150cc608f2334c72c3b6a553ec9668a4156b0", "shasum": "" }, "require": { @@ -765,12 +760,15 @@ "psr/log-implementation": "1.0.0" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", + "aws/aws-sdk-php": "^2.4.9", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "raven/raven": "~0.8", + "ruflin/elastica": ">=0.90 <3.0", + "swiftmailer/swiftmailer": "~5.3", "videlalvaro/php-amqplib": "~2.4" }, "suggest": { @@ -779,6 +777,7 @@ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "php-console/php-console": "Allow sending log messages to Google Chrome", "raven/raven": "Allow sending log messages to a Sentry server", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", @@ -787,7 +786,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.12.x-dev" + "dev-master": "1.15.x-dev" } }, "autoload": { @@ -813,7 +812,7 @@ "logging", "psr-3" ], - "time": "2014-12-29 21:29:35" + "time": "2015-07-12 13:54:09" }, { "name": "psr/log", @@ -859,51 +858,73 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "8919ab6093ca028bbf54167088b476cc39bf9d3b" + "reference": "4f1925fc351a2f058bb56117203a85c5da8852cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/8919ab6093ca028bbf54167088b476cc39bf9d3b", - "reference": "8919ab6093ca028bbf54167088b476cc39bf9d3b", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4f1925fc351a2f058bb56117203a85c5da8852cc", + "reference": "4f1925fc351a2f058bb56117203a85c5da8852cc", "shasum": "" }, "conflict": { + "cakephp/cakephp": ">=2.0.0,<2.4.8|>=1.3.0,<1.3.18|>=3.0.0,<3.0.4|>=3.0.0,<3.0.6|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.99|>=2.3.0,<2.3.99|>=2.4.0,<2.4.99|>=2.5.0,<2.5.90|>=2.6.0,<2.6.6", + "contao/core": ">=2.11.0,<2.11.16|>=3.0.0,<3.1.0|>=3.1.0,<3.2.0|>=3.2.0,<3.2.7|>=2.11.0,<2.11.17|>=3.0.0,<3.1.0|>=3.1.0,<3.2.0|>=3.2.0,<3.2.9|>=2.11.0,<3.0.0|>=3.0.0,<3.1.0|>=3.1.0,<3.2.0|>=3.2.0,<3.2.19|>=3.3.0,<3.4.0|>=3.4.0,<3.4.4", "doctrine/dbal": ">=2.0.0,<2.0.8|>=2.1.0,<2.1.2", "doctrine/doctrine-module": "<=0.7.1|<=0.7.1", "doctrine/orm": ">=2.0.0,<2.0.3", "dompdf/dompdf": ">=0.6.0,<0.6.1", + "firebase/php-jwt": "<2.0.0", "friendsofsymfony/rest-bundle": ">=1.2.0,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2.0,<1.2.1|>=1.2.0,<1.2.4|>=1.2.0,<1.3.0|>=1.3.0,<1.3.5|>=1.2.0,<1.2.5|>=1.3.0,<1.3.3", "illuminate/auth": ">=4.0.0,<4.0.99|>=4.1.0,<4.1.26", "illuminate/database": ">=4.0.0,<4.0.99|>=4.1.0,<4.1.29", "laravel/framework": ">=4.0.0,<4.0.99|>=4.1.0,<4.1.26|>=4.0.0,<4.0.99|>=4.1.0,<4.1.29", "monolog/monolog": ">=1.8.0,<1.12.0", - "sabre/dav": ">=1.6.0,<1.6.9|>=1.7.0,<1.7.7|>=1.8.0,<1.8.5", + "namshi/jose": "<1.1.2|<2.0.3|<2.2.0", + "oro/crm": ">=1.7.0,<1.7.4", + "oro/platform": ">=1.7.0,<1.7.4", + "pusher/pusher-php-server": "<2.2.1", + "sabre/dav": ">=1.6.0,<1.6.9|>=1.7.0,<1.7.7|>=1.8.0,<1.8.5|>=1.6.0,<1.6.99|>=1.7.0,<1.7.11|>=1.8.0,<1.8.9", "socalnick/scn-social-auth": "<1.15.2", "swiftmailer/swiftmailer": ">=4.0.0,<4.99.99|>=5.0.0,<5.2.1", "symfony/dependency-injection": ">=2.0.0,<2.0.17", "symfony/framework-bundle": ">=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.18|>=2.4.0,<2.4.8|>=2.5.0,<2.5.2", - "symfony/http-foundation": ">=2.0.0,<2.0.19|>=2.1.0,<2.1.4|>=2.0.0,<2.0.19|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4", - "symfony/http-kernel": ">=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4", + "symfony/http-foundation": ">=2.0.0,<2.0.19|>=2.1.0,<2.1.4|>=2.0.0,<2.0.19|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.27|>=2.4.0,<2.5.0|>=2.5.0,<2.5.11|>=2.6.0,<2.6.6", + "symfony/http-kernel": ">=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.27|>=2.4.0,<2.5.0|>=2.5.0,<2.5.11|>=2.6.0,<2.6.6|>=2.3.19,<2.3.29|>=2.4.9,<2.5.0|>=2.5.4,<2.5.12|>=2.6.0,<2.6.8", "symfony/routing": ">=2.0.0,<2.0.17|>=2.0.0,<2.0.19", "symfony/security": ">=2.0.0,<2.0.19|>=2.0.0,<2.0.25|>=2.1.0,<2.1.13|>=2.2.0,<2.2.9|>=2.3.0,<2.3.6", "symfony/serializer": ">=2.0.0,<2.0.11", - "symfony/symfony": ">=2.0.0,<2.0.6|>=2.0.0,<2.0.11|>=2.0.0,<2.0.17|>=2.0.0,<2.0.19|>=2.1.0,<2.1.4|>=2.0.0,<2.0.19|>=2.0.0,<2.0.20|>=2.1.0,<2.1.5|>=2.0.0,<2.0.22|>=2.0.0,<2.0.22|>=2.1.0,<2.1.7|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.0.25|>=2.1.0,<2.1.13|>=2.2.0,<2.2.9|>=2.3.0,<2.3.6|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4", + "symfony/symfony": ">=2.0.0,<2.0.6|>=2.0.0,<2.0.11|>=2.0.0,<2.0.17|>=2.0.0,<2.0.19|>=2.1.0,<2.1.4|>=2.0.0,<2.0.19|>=2.0.0,<2.0.20|>=2.1.0,<2.1.5|>=2.0.0,<2.0.22|>=2.0.0,<2.0.22|>=2.1.0,<2.1.7|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3|>=2.0.0,<2.0.25|>=2.1.0,<2.1.13|>=2.2.0,<2.2.9|>=2.3.0,<2.3.6|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.27|>=2.4.0,<2.5.0|>=2.5.0,<2.5.11|>=2.6.0,<2.6.6|>=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.27|>=2.4.0,<2.5.0|>=2.5.0,<2.5.11|>=2.6.0,<2.6.6|>=2.3.19,<2.3.29|>=2.4.9,<2.5.0|>=2.5.4,<2.5.12|>=2.6.0,<2.6.8", "symfony/translation": ">=2.0.0,<2.0.17", "symfony/validator": ">=2.0.0,<2.0.17|>=2.0.0,<2.0.24|>=2.1.0,<2.1.12|>=2.2.0,<2.2.5|>=2.3.0,<2.3.3", "symfony/web-profiler-bundle": ">=2.0.0,<2.1.0|>=2.1.0,<2.2.0|>=2.2.0,<2.3.0|>=2.3.0,<2.3.19|>=2.4.0,<2.4.9|>=2.5.0,<2.5.4", "symfony/yaml": ">=2.0.0,<2.0.22|>=2.0.0,<2.0.22|>=2.1.0,<2.1.7", + "thelia/backoffice-default-template": ">=2.1.0,<2.1.2", + "thelia/thelia": ">=2.1.0,<2.1.2|>=2.1.0-beta1,<2.1.3", "twig/twig": ">=1.0.0,<1.12.3", + "typo3/flow": ">=1.0.0,<1.0.4|>=1.1.0,<1.1.1|>=2.0.0,<2.0.1", + "typo3/neos": ">=1.1.0,<1.1.3|>=1.2.0,<1.2.3", "willdurand/js-translation-bundle": "<2.1.1", "yiisoft/yii": ">=1.1.14,<1.1.15", + "yiisoft/yii2": "<2.0.4|<2.0.5", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.4", + "yiisoft/yii2-gii": "<2.0.4", + "yiisoft/yii2-jui": "<2.0.4", + "zendframework/zend-db": ">=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.10|>=2.3.0,<2.3.5", + "zendframework/zend-diactoros": ">=1.0.0,<1.0.4", "zendframework/zend-form": ">=2.0.0,<2.2.7|>=2.3.0,<2.3.1", + "zendframework/zend-http": ">=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.3.0,<2.3.8|>=2.4.0,<2.4.1", "zendframework/zend-json": ">=2.1.0,<2.1.6|>=2.2.0,<2.2.6", + "zendframework/zend-ldap": ">=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3", + "zendframework/zend-mail": ">=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.3.0,<2.3.8|>=2.4.0,<2.4.1", "zendframework/zend-navigation": ">=2.0.0,<2.2.7|>=2.3.0,<2.3.1", "zendframework/zend-session": ">=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.9|>=2.3.0,<2.3.4", + "zendframework/zend-validator": ">=2.3.0,<2.3.6", "zendframework/zend-view": ">=2.0.0,<2.2.7|>=2.3.0,<2.3.1", "zendframework/zend-xmlrpc": ">=2.1.0,<2.1.6|>=2.2.0,<2.2.6", - "zendframework/zendframework": ">=2.0.0,<2.0.1|>=2.0.0,<2.0.5|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.2.0,<2.2.5|>=2.1.0,<2.1.6|>=2.2.0,<2.2.6|>=2.0.0,<2.2.7|>=2.3.0,<2.3.1|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.9|>=2.3.0,<2.3.4", - "zendframework/zendframework1": ">=1.7.0,<1.7.5|>=1.7.0,<1.7.6|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.9.0,<1.9.8|>=1.10.0,<1.10.3|>=1.0.0,<1.11.4|>=1.10.0,<1.10.9|>=1.11.0,<1.11.6|>=1.0.0,<1.11.13|>=1.0.0,<1.11.13|>=1.11.0,<1.11.15|>=1.12.0,<1.12.1|>=1.12.0,<1.12.4|>=1.12.0,<1.12.4|>=1.12.0,<1.12.7|>=1.12.0,<1.12.9|>=1.12.0,<1.12.9", + "zendframework/zendframework": ">=2.0.0,<2.0.1|>=2.0.0,<2.0.5|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.0.0,<2.0.8|>=2.1.0,<2.1.4|>=2.2.0,<2.2.5|>=2.1.0,<2.1.6|>=2.2.0,<2.2.6|>=2.0.0,<2.2.7|>=2.3.0,<2.3.1|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.8|>=2.3.0,<2.3.3|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.9|>=2.3.0,<2.3.4|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.2.0,<2.2.10|>=2.3.0,<2.3.5|>=2.3.0,<2.3.6|>=2.0.0,<2.0.99|>=2.1.0,<2.1.99|>=2.3.0,<2.3.8|>=2.4.0,<2.4.1", + "zendframework/zendframework1": ">=1.7.0,<1.7.5|>=1.7.0,<1.7.6|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.7.0,<1.7.9|>=1.8.0,<1.8.5|>=1.9.0,<1.9.7|>=1.9.0,<1.9.8|>=1.10.0,<1.10.3|>=1.0.0,<1.11.4|>=1.10.0,<1.10.9|>=1.11.0,<1.11.6|>=1.0.0,<1.11.13|>=1.0.0,<1.11.13|>=1.11.0,<1.11.15|>=1.12.0,<1.12.1|>=1.12.0,<1.12.4|>=1.12.0,<1.12.4|>=1.12.0,<1.12.7|>=1.12.0,<1.12.9|>=1.12.0,<1.12.9|>=1.12.0,<1.12.12", "zendframework/zendopenid": ">=2.0.0,<2.0.2", "zf-commons/zfc-user": "<1.2.2", "zfr/zfr-oauth2-server-module": "<0.1.2" @@ -921,33 +942,40 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2015-01-16 16:20:00" + "time": "2015-07-12 17:29:58" }, { "name": "sensio/distribution-bundle", - "version": "v3.0.15", + "version": "v3.0.30", "target-dir": "Sensio/Bundle/DistributionBundle", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c" + "reference": "f1758b30096202aeede61f79a1dffd69da091517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c", - "reference": "0692cd6a8fcf645abce8ea45f7cbbd1942e2b23c", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/f1758b30096202aeede61f79a1dffd69da091517", + "reference": "f1758b30096202aeede61f79a1dffd69da091517", "shasum": "" }, "require": { "php": ">=5.3.3", "sensiolabs/security-checker": "~2.0", "symfony/class-loader": "~2.2", - "symfony/form": "~2.2", "symfony/framework-bundle": "~2.3", - "symfony/process": "~2.2", + "symfony/process": "~2.2" + }, + "require-dev": { + "symfony/form": "~2.2", "symfony/validator": "~2.2", "symfony/yaml": "~2.2" }, + "suggest": { + "symfony/form": "If you want to use the configurator", + "symfony/validator": "If you want to use the configurator", + "symfony/yaml": "If you want to use the configurator" + }, "type": "symfony-bundle", "extra": { "branch-alias": { @@ -974,21 +1002,20 @@ "configuration", "distribution" ], - "time": "2015-01-07 07:13:43" + "time": "2015-06-05 22:32:22" }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.4", - "target-dir": "Sensio/Bundle/FrameworkExtraBundle", + "version": "v3.0.9", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a" + "reference": "0616fd568da051adc19ca63006cc808531ba2da4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/b3bc3e67c8b6b68b18d727012183520d35ee762a", - "reference": "b3bc3e67c8b6b68b18d727012183520d35ee762a", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/0616fd568da051adc19ca63006cc808531ba2da4", + "reference": "0616fd568da051adc19ca63006cc808531ba2da4", "shasum": "" }, "require": { @@ -1001,6 +1028,7 @@ }, "suggest": { "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", "symfony/security-bundle": "" }, "type": "symfony-bundle", @@ -1010,8 +1038,8 @@ } }, "autoload": { - "psr-0": { - "Sensio\\Bundle\\FrameworkExtraBundle": "" + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1029,20 +1057,20 @@ "annotations", "controllers" ], - "time": "2014-12-02 09:52:52" + "time": "2015-06-05 13:59:21" }, { "name": "sensiolabs/security-checker", - "version": "v2.0.0", + "version": "v2.0.5", "source": { "type": "git", "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee" + "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/5b4eb4743ebe68276c911c84101ecdf4a9ae76ee", - "reference": "5b4eb4743ebe68276c911c84101ecdf4a9ae76ee", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/2c2a71f1c77d9765c12638c4724d9ca23658a810", + "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810", "shasum": "" }, "require": { @@ -1074,32 +1102,32 @@ } ], "description": "A security checker for your composer.lock", - "time": "2014-07-19 10:52:35" + "time": "2015-05-28 14:22:40" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.3.1", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a" + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", - "reference": "c5f963e7f9d6f6438fda4f22d5cc2db296ec621a", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421", + "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "mockery/mockery": "~0.9.1" + "mockery/mockery": "~0.9.1,<0.9.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -1123,39 +1151,41 @@ "description": "Swiftmailer, free feature-rich PHP mailer", "homepage": "http://swiftmailer.org", "keywords": [ + "email", "mail", "mailer" ], - "time": "2014-12-05 14:17:14" + "time": "2015-06-06 14:19:39" }, { "name": "symfony/assetic-bundle", - "version": "v2.5.0", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/symfony/AsseticBundle.git", - "reference": "90ea7fb66d6d5245fd4afc16e4c8070214254fec" + "reference": "422b0add2110f0cf9bc7a873a386ea053f4a89f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/90ea7fb66d6d5245fd4afc16e4c8070214254fec", - "reference": "90ea7fb66d6d5245fd4afc16e4c8070214254fec", + "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/422b0add2110f0cf9bc7a873a386ea053f4a89f0", + "reference": "422b0add2110f0cf9bc7a873a386ea053f4a89f0", "shasum": "" }, "require": { "kriswallsmith/assetic": "~1.2", "php": ">=5.3.0", - "symfony/console": "~2.1", - "symfony/framework-bundle": "~2.1", - "symfony/yaml": "~2.1" + "symfony/console": "~2.3", + "symfony/dependency-injection": "~2.3", + "symfony/framework-bundle": "~2.3", + "symfony/yaml": "~2.3" }, "require-dev": { "kriswallsmith/spork": "~0.2", "patchwork/jsqueeze": "~1.0", - "symfony/class-loader": "~2.1", - "symfony/css-selector": "~2.1", - "symfony/dom-crawler": "~2.1", - "symfony/twig-bundle": "~2.1" + "symfony/class-loader": "~2.3", + "symfony/css-selector": "~2.3", + "symfony/dom-crawler": "~2.3", + "symfony/twig-bundle": "~2.3" }, "suggest": { "kriswallsmith/spork": "to be able to dump assets in parallel", @@ -1190,7 +1220,7 @@ "compression", "minification" ], - "time": "2014-10-15 12:03:38" + "time": "2015-01-27 12:45:16" }, { "name": "symfony/monolog-bundle", @@ -1310,16 +1340,16 @@ }, { "name": "symfony/symfony", - "version": "v2.6.3", + "version": "v2.6.11", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "c34ef418015793a4653f2670afb69dd167ebf578" + "reference": "c6ab380a577e7bfb8db6e6f3105f470f97c83235" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/c34ef418015793a4653f2670afb69dd167ebf578", - "reference": "c34ef418015793a4653f2670afb69dd167ebf578", + "url": "https://api.github.com/repos/symfony/symfony/zipball/c6ab380a577e7bfb8db6e6f3105f470f97c83235", + "reference": "c6ab380a577e7bfb8db6e6f3105f470f97c83235", "shasum": "" }, "require": { @@ -1383,7 +1413,8 @@ "ircmaxell/password-compat": "~1.0", "monolog/monolog": "~1.11", "ocramius/proxy-manager": "~0.4|~1.0", - "propel/propel1": "~1.6" + "propel/propel1": "~1.6", + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { @@ -1408,21 +1439,21 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "The Symfony PHP framework", - "homepage": "http://symfony.com", + "homepage": "https://symfony.com", "keywords": [ "framework" ], - "time": "2015-01-07 14:47:29" + "time": "2015-07-26 10:44:22" }, { "name": "twig/extensions", @@ -1478,25 +1509,25 @@ }, { "name": "twig/twig", - "version": "v1.17.0", + "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "2493970fa4d587eca73f77e6d8bd48a8bdd4c608" + "reference": "edbeaf43b0a606cdaadc32a11d2673614a377b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/2493970fa4d587eca73f77e6d8bd48a8bdd4c608", - "reference": "2493970fa4d587eca73f77e6d8bd48a8bdd4c608", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/edbeaf43b0a606cdaadc32a11d2673614a377b90", + "reference": "edbeaf43b0a606cdaadc32a11d2673614a377b90", "shasum": "" }, "require": { - "php": ">=5.2.4" + "php": ">=5.2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.17-dev" + "dev-master": "1.19-dev" } }, "autoload": { @@ -1531,22 +1562,22 @@ "keywords": [ "templating" ], - "time": "2015-01-14 10:15:49" + "time": "2015-07-31 13:45:26" } ], "packages-dev": [ { "name": "behat/behat", - "version": "v3.0.14", + "version": "v3.0.15", "source": { "type": "git", "url": "https://github.com/Behat/Behat.git", - "reference": "3f097cd577feed73e681fa56cd4e4e1dda9c115d" + "reference": "b35ae3d45332d80c532af69cc36f780a9397a996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Behat/zipball/3f097cd577feed73e681fa56cd4e4e1dda9c115d", - "reference": "3f097cd577feed73e681fa56cd4e4e1dda9c115d", + "url": "https://api.github.com/repos/Behat/Behat/zipball/b35ae3d45332d80c532af69cc36f780a9397a996", + "reference": "b35ae3d45332d80c532af69cc36f780a9397a996", "shasum": "" }, "require": { @@ -1559,12 +1590,12 @@ "symfony/console": "~2.1", "symfony/dependency-injection": "~2.1", "symfony/event-dispatcher": "~2.1", - "symfony/translation": "~2.1", + "symfony/translation": "~2.3", "symfony/yaml": "~2.1" }, "require-dev": { "phpspec/prophecy-phpunit": "~1.0", - "phpunit/phpunit": "~4.0.7", + "phpunit/phpunit": "~4.0", "symfony/process": "~2.1" }, "suggest": { @@ -1614,7 +1645,7 @@ "symfony", "testing" ], - "time": "2014-09-23 10:47:14" + "time": "2015-02-22 14:10:33" }, { "name": "behat/gherkin", @@ -1676,16 +1707,16 @@ }, { "name": "behat/mink", - "version": "v1.6.0", + "version": "v1.6.1", "source": { "type": "git", - "url": "https://github.com/Behat/Mink.git", - "reference": "090900a0049c441f1e072bbd837db4079b2250c5" + "url": "https://github.com/minkphp/Mink.git", + "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Mink/zipball/090900a0049c441f1e072bbd837db4079b2250c5", - "reference": "090900a0049c441f1e072bbd837db4079b2250c5", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/8b68523a339ec991bcd638b39dc8f04f808da88a", + "reference": "8b68523a339ec991bcd638b39dc8f04f808da88a", "shasum": "" }, "require": { @@ -1705,8 +1736,8 @@ } }, "autoload": { - "psr-0": { - "Behat\\Mink": "src/" + "psr-4": { + "Behat\\Mink\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1720,26 +1751,26 @@ "homepage": "http://everzet.com" } ], - "description": "Web acceptance testing framework for PHP 5.3", + "description": "Browser controller/emulator abstraction for PHP", "homepage": "http://mink.behat.org/", "keywords": [ "browser", "testing", "web" ], - "time": "2014-09-26 09:25:05" + "time": "2015-02-04 17:02:06" }, { "name": "behat/mink-browserkit-driver", "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/Behat/MinkBrowserKitDriver.git", + "url": "https://github.com/minkphp/MinkBrowserKitDriver.git", "reference": "aed8f4a596b79014a75254c3e337511c33e38cbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/MinkBrowserKitDriver/zipball/aed8f4a596b79014a75254c3e337511c33e38cbd", + "url": "https://api.github.com/repos/minkphp/MinkBrowserKitDriver/zipball/aed8f4a596b79014a75254c3e337511c33e38cbd", "reference": "aed8f4a596b79014a75254c3e337511c33e38cbd", "shasum": "" }, @@ -1945,16 +1976,16 @@ }, { "name": "doctrine/instantiator", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { @@ -1965,7 +1996,7 @@ "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { @@ -1974,8 +2005,8 @@ } }, "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1995,31 +2026,31 @@ "constructor", "instantiate" ], - "time": "2014-10-13 12:58:55" + "time": "2015-06-14 21:17:01" }, { "name": "phpdocumentor/reflection-docblock", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "38743b677965c48a637097b2746a281264ae2347" + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/38743b677965c48a637097b2746a281264ae2347", - "reference": "38743b677965c48a637097b2746a281264ae2347", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "3.7.*@stable" + "phpunit/phpunit": "~4.0" }, "suggest": { - "dflydev/markdown": "1.0.*", - "erusev/parsedown": "~0.7" + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" }, "type": "library", "extra": { @@ -2044,7 +2075,7 @@ "email": "mike.vanriel@naenius.com" } ], - "time": "2014-08-09 10:27:07" + "time": "2015-02-03 12:10:50" }, { "name": "phpspec/php-diff", @@ -2158,21 +2189,22 @@ }, { "name": "phpspec/prophecy", - "version": "v1.3.1", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9" + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/9ca52329bcdd1500de24427542577ebf3fc2f1c9", - "reference": "9ca52329bcdd1500de24427542577ebf3fc2f1c9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "phpdocumentor/reflection-docblock": "~2.0" + "doctrine/instantiator": "^1.0.2", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1" }, "require-dev": { "phpspec/phpspec": "~2.0" @@ -2180,7 +2212,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -2204,7 +2236,7 @@ } ], "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "http://phpspec.org", + "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", @@ -2213,20 +2245,20 @@ "spy", "stub" ], - "time": "2014-11-17 16:23:49" + "time": "2015-04-27 22:15:08" }, { "name": "phpunit/php-code-coverage", - "version": "2.0.14", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94" + "reference": "e6577d90f61a9adbe94544a6e9a7ca18b5fd9c8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca158276c1200cc27f5409a5e338486bc0b4fc94", - "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e6577d90f61a9adbe94544a6e9a7ca18b5fd9c8f", + "reference": "e6577d90f61a9adbe94544a6e9a7ca18b5fd9c8f", "shasum": "" }, "require": { @@ -2234,12 +2266,12 @@ "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", + "sebastian/environment": "~1.3", "sebastian/version": "~1.0" }, "require-dev": { "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4.1" + "phpunit/phpunit": "~4" }, "suggest": { "ext-dom": "*", @@ -2249,7 +2281,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -2258,9 +2290,6 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -2278,7 +2307,7 @@ "testing", "xunit" ], - "time": "2014-12-26 13:28:33" + "time": "2015-08-01 05:09:57" }, { "name": "phpunit/php-file-iterator", @@ -2327,16 +2356,16 @@ }, { "name": "phpunit/php-text-template", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { @@ -2345,20 +2374,17 @@ "type": "library", "autoload": { "classmap": [ - "Text/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2367,20 +2393,20 @@ "keywords": [ "template" ], - "time": "2014-01-30 17:20:04" + "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", - "version": "1.0.5", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", "shasum": "" }, "require": { @@ -2389,13 +2415,10 @@ "type": "library", "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -2411,20 +2434,20 @@ "keywords": [ "timer" ], - "time": "2013-08-02 07:42:54" + "time": "2015-06-21 08:01:12" }, { "name": "phpunit/php-token-stream", - "version": "1.4.0", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74" + "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/db32c18eba00b121c145575fcbcd4d4d24e6db74", - "reference": "db32c18eba00b121c145575fcbcd4d4d24e6db74", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9", + "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9", "shasum": "" }, "require": { @@ -2460,7 +2483,7 @@ "keywords": [ "tokenizer" ], - "time": "2015-01-17 09:51:32" + "time": "2015-06-19 03:43:16" }, { "name": "phpunit/phpunit", @@ -2538,25 +2561,26 @@ }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.0", + "version": "2.3.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "c63d2367247365f688544f0d500af90a11a44c65" + "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/c63d2367247365f688544f0d500af90a11a44c65", - "reference": "c63d2367247365f688544f0d500af90a11a44c65", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/18dfbcb81d05e2296c0bcddd4db96cade75e6f42", + "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.1", + "doctrine/instantiator": "~1.0,>=1.0.2", "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "suggest": { "ext-soap": "*" @@ -2589,34 +2613,34 @@ "mock", "xunit" ], - "time": "2014-10-03 05:12:11" + "time": "2015-07-10 06:54:24" }, { "name": "sebastian/comparator", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "c484a80f97573ab934e37826dba0135a3301b26a" + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c484a80f97573ab934e37826dba0135a3301b26a", - "reference": "c484a80f97573ab934e37826dba0135a3301b26a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/diff": "~1.1", - "sebastian/exporter": "~1.0" + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { - "phpunit/phpunit": "~4.1" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -2653,20 +2677,20 @@ "compare", "equality" ], - "time": "2014-11-16 21:32:38" + "time": "2015-07-26 15:48:44" }, { "name": "sebastian/diff", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7" + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/5843509fed39dee4b356a306401e9dd1a931fec7", - "reference": "5843509fed39dee4b356a306401e9dd1a931fec7", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", "shasum": "" }, "require": { @@ -2678,7 +2702,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -2705,32 +2729,32 @@ "keywords": [ "diff" ], - "time": "2014-08-15 10:29:00" + "time": "2015-02-22 15:13:53" }, { "name": "sebastian/environment", - "version": "1.2.1", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7" + "reference": "4fe0a44cddd8cc19583a024bdc7374eb2fef0b87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6e6c71d918088c251b181ba8b3088af4ac336dd7", - "reference": "6e6c71d918088c251b181ba8b3088af4ac336dd7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4fe0a44cddd8cc19583a024bdc7374eb2fef0b87", + "reference": "4fe0a44cddd8cc19583a024bdc7374eb2fef0b87", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "phpunit/phpunit": "~4.3" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -2755,32 +2779,33 @@ "environment", "hhvm" ], - "time": "2014-10-25 08:00:45" + "time": "2015-07-26 06:42:57" }, { "name": "sebastian/exporter", - "version": "1.0.2", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0" + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c7d59948d6e82818e1bdff7cadb6c34710eb7dc0", - "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -2820,20 +2845,73 @@ "export", "exporter" ], - "time": "2014-09-10 00:51:36" + "time": "2015-06-21 07:55:53" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-06-21 08:04:50" }, { "name": "sebastian/version", - "version": "1.0.4", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b" + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/a77d9123f8e809db3fbdea15038c27a95da4058b", - "reference": "a77d9123f8e809db3fbdea15038c27a95da4058b", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "shasum": "" }, "type": "library", @@ -2855,21 +2933,21 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2014-12-15 14:25:24" + "time": "2015-06-21 13:59:46" }, { "name": "sensio/generator-bundle", - "version": "v2.5.1", + "version": "v2.5.3", "target-dir": "Sensio/Bundle/GeneratorBundle", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "9e23fc3de265ae013690d84aab98e7a84f46edcd" + "reference": "e50108c2133ee5c9c484555faed50c17a61221d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/9e23fc3de265ae013690d84aab98e7a84f46edcd", - "reference": "9e23fc3de265ae013690d84aab98e7a84f46edcd", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/e50108c2133ee5c9c484555faed50c17a61221d3", + "reference": "e50108c2133ee5c9c484555faed50c17a61221d3", "shasum": "" }, "require": { @@ -2903,7 +2981,7 @@ } ], "description": "This bundle generates code for you", - "time": "2015-01-13 07:33:46" + "time": "2015-03-17 06:36:52" } ], "aliases": [], diff --git a/docs/.gitkeep b/docs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/features/behat_documentation_is_published.feature b/features/behat_documentation_is_published.feature index ca05f28..c81039e 100644 --- a/features/behat_documentation_is_published.feature +++ b/features/behat_documentation_is_published.feature @@ -4,8 +4,8 @@ Feature: Behat documentation is published I want behat documentation to be published after we release a new version of it Rules: - - Documentation for Behat should be published - - Documentation for both versions should be published + - Documentation for Behat should be published + - Documentation for both versions should be published @critical Scenario: Publishing behat 3.0 documentation diff --git a/features/bootstrap/DocumentationContributorContext.php b/features/bootstrap/DocumentationContributorContext.php index 0400c6d..9511ccb 100644 --- a/features/bootstrap/DocumentationContributorContext.php +++ b/features/bootstrap/DocumentationContributorContext.php @@ -101,7 +101,7 @@ public function versionDocumentationShouldNotBePublished($project, $versionStrin } /** - * @Then package name of :pageString page for :project version :versionString should be :name + * @Then project name of :pageString page for :project version :versionString should be :name */ public function packageNameOfPageShouldBe($pageString, $project, $versionString, $name) { diff --git a/features/bootstrap/ExtensionMaintainerContext.php b/features/bootstrap/ExtensionMaintainerContext.php index 157a8bb..24220c0 100644 --- a/features/bootstrap/ExtensionMaintainerContext.php +++ b/features/bootstrap/ExtensionMaintainerContext.php @@ -9,7 +9,7 @@ use Behat\Borg\Release\ReleasePackager; use Behat\Borg\Release\Version; use Behat\Borg\ReleaseManager; -use Fake\Extension\FakeExtension; +use Fake\Extension\FakeExtensionPackage; use Fake\Extension\FakeExtractor; use Fake\Release\FakeDownloader; use Fake\Release\FakePackageFinder; @@ -47,17 +47,17 @@ public function __construct() } /** - * @Given :extension extension was created in :repository + * @Given :extensionPackage extension package was created in :repository */ - public function extensionWasCreated(FakeRepository $repository, FakeExtension $extension) + public function extensionPackageWasCreated(FakeRepository $repository, FakeExtensionPackage $extensionPackage) { - $repository->createExtension($extension); + $repository->createPackage($extensionPackage); } /** - * @Given extension was not created in :repository + * @Given extension package was not created in :repository */ - public function extensionWasNotCreated() { } + public function extensionPackageWasNotCreated() { } /** * @Given :package version :version was documented in :repository diff --git a/features/bootstrap/Fake/Documentation/FakeBuiltDocumentation.php b/features/bootstrap/Fake/Documentation/FakeBuiltDocumentation.php index 1fc74c3..81eb5cd 100644 --- a/features/bootstrap/Fake/Documentation/FakeBuiltDocumentation.php +++ b/features/bootstrap/Fake/Documentation/FakeBuiltDocumentation.php @@ -22,7 +22,7 @@ public function documentationId() return $this->documentation->documentationId(); } - public function buildPath() + public function path() { return '/tmp'; } diff --git a/features/bootstrap/Fake/Extension/FakeExtension.php b/features/bootstrap/Fake/Extension/FakeExtension.php deleted file mode 100644 index bb404e5..0000000 --- a/features/bootstrap/Fake/Extension/FakeExtension.php +++ /dev/null @@ -1,40 +0,0 @@ -name = $name; - - return $package; - } - - public function organisationName() - { - return explode('/', $this->name)[0]; - } - - public function name() - { - return explode('/', $this->name)[1]; - } - - public function __toString() - { - return $this->name; - } - - private function __construct() { } -} diff --git a/features/bootstrap/Fake/Extension/FakeExtensionPackage.php b/features/bootstrap/Fake/Extension/FakeExtensionPackage.php new file mode 100644 index 0000000..33e6ce6 --- /dev/null +++ b/features/bootstrap/Fake/Extension/FakeExtensionPackage.php @@ -0,0 +1,47 @@ +parts = $parts; + + return $package; + } + + public function organisationName() + { + return $this->parts[0]; + } + + public function name() + { + return $this->parts[1]; + } + + public function __toString() + { + return implode('/', $this->parts); + } + + public function extension() + { + return new Extension($this->organisationName(), $this->name(), 'some package', 'anonymous'); + } + + private function __construct() { } +} diff --git a/features/bootstrap/Fake/Extension/FakeExtractor.php b/features/bootstrap/Fake/Extension/FakeExtractor.php index dfe8740..4d88a39 100644 --- a/features/bootstrap/Fake/Extension/FakeExtractor.php +++ b/features/bootstrap/Fake/Extension/FakeExtractor.php @@ -9,8 +9,8 @@ final class FakeExtractor implements Extractor { public function extract(Package $package) { - if ($package instanceof FakeExtension) { - return $package; + if ($package instanceof FakeExtensionPackage) { + return $package->extension(); } return null; diff --git a/features/bootstrap/Fake/Release/FakeRepository.php b/features/bootstrap/Fake/Release/FakeRepository.php index 70bacd0..7c6ba09 100644 --- a/features/bootstrap/Fake/Release/FakeRepository.php +++ b/features/bootstrap/Fake/Release/FakeRepository.php @@ -9,13 +9,12 @@ use DateTimeImmutable; use Fake\Documentation\FakeDocumentationDownload; use Fake\Documentation\FakeSource; -use Fake\Extension\FakeExtension; final class FakeRepository implements Repository { private $name; private $downloads = []; - private $extension; + private $package; public static function named($name) { @@ -50,9 +49,9 @@ public function documentPackage(Package $package, Version $version, DateTimeImmu $this->downloads[(string)$release] = new FakeDocumentationDownload($release, $time, $package, new FakeSource()); } - public function createExtension(FakeExtension $extension) + public function createPackage(Package $package) { - $this->extension = $extension; + $this->package = $package; } public function download(Release $release) @@ -61,8 +60,8 @@ public function download(Release $release) return $this->downloads[(string)$release]; } - if ($this->extension) { - return new FakePackageDownload($release, new DateTimeImmutable(), $this->extension); + if ($this->package) { + return new FakePackageDownload($release, new DateTimeImmutable(), $this->package); } return new FakeDownload($release, new DateTimeImmutable()); diff --git a/features/bootstrap/Smoke/DocumentationUIContext.php b/features/bootstrap/Smoke/DocumentationUIContext.php index 545a258..1a179bc 100644 --- a/features/bootstrap/Smoke/DocumentationUIContext.php +++ b/features/bootstrap/Smoke/DocumentationUIContext.php @@ -15,6 +15,8 @@ */ class DocumentationUIContext extends RawMinkContext implements Context { + use Transformation\CleanBuildCache; + private $publisher; private $client; @@ -64,7 +66,7 @@ public function packageWasNotDocumented() { } */ public function packageDocumentationShouldHaveBeenPublished($project, $versionString) { - $this->visitPath("/docs/$project/$versionString/index.html"); + $this->visitPath($this->documentationPagePath($project, $versionString, 'index.html')); $this->assertSession()->pageTextContains($project); $this->assertSession()->pageTextContains($versionString); @@ -75,7 +77,7 @@ public function packageDocumentationShouldHaveBeenPublished($project, $versionSt */ public function packageDocumentationShouldNotBePublished($project, $versionString) { - $this->visitPath("/docs/$project/$versionString/index.html"); + $this->visitPath($this->documentationPagePath($project, $versionString, 'index.html')); $this->assertSession()->statusCodeEquals(404); } @@ -85,11 +87,16 @@ public function packageDocumentationShouldNotBePublished($project, $versionStrin */ public function currentVersionOfDocumentationShouldPointToVersion($project, $versionString) { - $this->visitPath("/docs/$project/current/index.html"); + $this->visitPath($this->documentationPagePath($project, $versionString, 'index.html')); $this->assertSession()->elementTextContains('css', '.version.current', $versionString); } + private function documentationPagePath($project, $versionString, $page) + { + return "/docs/$project/$versionString/$page"; + } + private function repositoryContainsDocs($repository, $version) { return $this->existsInRepositoryVersion($repository, $version, 'index.rst') diff --git a/features/bootstrap/Smoke/ExtensionUIContext.php b/features/bootstrap/Smoke/ExtensionUIContext.php index 53a84d5..aa55b05 100644 --- a/features/bootstrap/Smoke/ExtensionUIContext.php +++ b/features/bootstrap/Smoke/ExtensionUIContext.php @@ -3,8 +3,6 @@ namespace Smoke; use Behat\Behat\Context\Context; -use Behat\Borg\Extension\Extension; -use Behat\Borg\Release\Repository; use Behat\MinkExtension\Context\RawMinkContext; use Github\Client; use PHPUnit_Framework_Assert as PHPUnit; @@ -15,7 +13,7 @@ */ class ExtensionUIContext extends RawMinkContext implements Context { - use Transformation\Extension; + use Transformation\CleanBuildCache; private $client; @@ -30,9 +28,9 @@ public function __construct(Client $client) } /** - * @Given :extension extension was created in :repository + * @Given :extension extension package was created in :repository */ - public function extensionWasCreated(Repository $repository, Extension $extension) + public function extensionWasCreated($repository, $extension) { PHPUnit::assertTrue($this->repositoryExtensionIs($repository, $extension), 'Repository does not contain expected extension.'); } @@ -48,19 +46,27 @@ public function extensionCatalogueShouldHaveCount($count = 0) $this->assertSession()->elementsCount('css', '.extension', $count); } - private function repositoryExtensionIs(Repository $repository, Extension $extension) + /** + * @Then :name extension should be in the catalogue + */ + public function extensionShouldBeInTheCatalogue($name) + { + $this->visitPath('/extensions'); + $this->getSession()->getPage()->clickLink($name); + $this->assertSession()->elementContains('css', 'h1', $name); + } + + private function repositoryExtensionIs($repository, $extension) { $content = $this->contentInRepository($repository, 'composer.json'); - return 1 === preg_match('#"name"\s*:\s*"' . preg_quote((string)$extension) . '"#', $content); + return 1 === preg_match('#"name"\s*:\s*"' . preg_quote($extension) . '"#', $content); } - private function contentInRepository(Repository $repository, $path) + private function contentInRepository($repository, $path) { - return file_get_contents( - $this->client->repo()->contents()->show( - (string)$repository->organisationName(), (string)$repository->name(), $path - )['download_url'] - ); + $repositoryParts = explode('/', $repository); + + return file_get_contents($this->client->repo()->contents()->show($repositoryParts[0], $repositoryParts[1], $path)['download_url']); } } diff --git a/features/bootstrap/Smoke/ReleaseUIContext.php b/features/bootstrap/Smoke/ReleaseUIContext.php index 9485257..7df9252 100644 --- a/features/bootstrap/Smoke/ReleaseUIContext.php +++ b/features/bootstrap/Smoke/ReleaseUIContext.php @@ -4,7 +4,6 @@ use Behat\Behat\Context\Context; use PHPUnit_Framework_Assert as PHPUnit; -use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\Process\Process; use Transformation; @@ -13,14 +12,7 @@ */ class ReleaseUIContext implements Context { - /** - * @BeforeScenario - */ - public function cleanBuildAndWebFolders() - { - $cacheDir = __DIR__ . '/../../../app/cache/test'; - (new Filesystem())->remove(["{$cacheDir}/build", "{$cacheDir}/docs"]); - } + use Transformation\CleanBuildCache; /** * @When I release :repository version :version diff --git a/features/bootstrap/Transformation/CleanBuildCache.php b/features/bootstrap/Transformation/CleanBuildCache.php new file mode 100644 index 0000000..f19ff75 --- /dev/null +++ b/features/bootstrap/Transformation/CleanBuildCache.php @@ -0,0 +1,16 @@ +remove(__DIR__ . '/../../../app/cache/test/build'); + } +} diff --git a/features/bootstrap/Transformation/Extension.php b/features/bootstrap/Transformation/Extension.php index 62dce9e..992dae6 100644 --- a/features/bootstrap/Transformation/Extension.php +++ b/features/bootstrap/Transformation/Extension.php @@ -2,16 +2,16 @@ namespace Transformation; -use Fake\Extension\FakeExtension; +use Fake\Extension\FakeExtensionPackage; trait Extension { /** - * @Transform :extension + * @Transform :extensionPackage */ - public function transformStringToExtension($string) + public function transformStringToExtensionPackage($string) { - return FakeExtension::named($string); + return FakeExtensionPackage::named($string); } /** diff --git a/features/current_documentation_is_available.feature b/features/current_documentation_is_available.feature index 2af659d..798fcad 100644 --- a/features/current_documentation_is_available.feature +++ b/features/current_documentation_is_available.feature @@ -4,9 +4,9 @@ Feature: Current documentation is available I want latest most stable version of documentation to be available as current Rules: - - Use the latest stable release (v2.0.1) if there are some - - If there are no stable releases, but there are some dev releases (v2.0.x) - use the latest - - If there are no stable or dev releases, then use branches in this order: master, develop + - Use the latest stable release (v2.0.1) if there are some + - If there are no stable releases, but there are some dev releases (v2.0.x) - use the latest + - If there are no stable or dev releases, then use branches in this order: master, develop @critical Scenario: Having some stable versions published diff --git a/features/documentation_meta_is_generated.feature b/features/documentation_meta_is_generated.feature index ecd6944..8266a71 100644 --- a/features/documentation_meta_is_generated.feature +++ b/features/documentation_meta_is_generated.feature @@ -4,14 +4,14 @@ Feature: Documentation meta is generated I want documentation meta to be available after publishing Meta: - - Documentation package name and update time - - Links to other published versions of documentation - - Link to the current documentation page editor + - Documentation package name and update time + - Links to other published versions of documentation + - Link to the current documentation page editor Scenario: Getting documentation package name and edit time Given "behat/symfony2-extension" version "v2.0.0" was documented in "Behat/Symfony2Extension" on "04.09.2014, 22:10:45" When I release "Behat/Symfony2Extension" version "v2.0.0" - Then package name of "index.html" page for "behat/symfony2-extension" version "v2.0" should be "behat/symfony2-extension" + Then project name of "index.html" page for "behat/symfony2-extension" version "v2.0" should be "behat/symfony2-extension" And documentation time of "index.html" page for "behat/symfony2-extension" version "v2.0" should be "04.09.2014, 22:10:45" Scenario: Getting alternative documentation versions diff --git a/features/extension_documentation_is_published.feature b/features/extension_documentation_is_published.feature index 20149e4..6c602d0 100644 --- a/features/extension_documentation_is_published.feature +++ b/features/extension_documentation_is_published.feature @@ -4,8 +4,8 @@ Feature: Extension documentation is published I want extensions documentation to be published after contributors release a new versions of them Rules: - - Extensions documentation is published - - `master` and `develop` branches documentation should also be published (if documented) + - Extensions documentation is published + - `master` and `develop` branches documentation should also be published (if documented) Scenario: Publishing extension release documentation Given "behat/symfony2-extension" version "v2.0.0" was documented in "Behat/Symfony2Extension" diff --git a/features/extensions_are_catalogued.feature b/features/extensions_are_catalogued.feature index f7321e8..8f9d161 100644 --- a/features/extensions_are_catalogued.feature +++ b/features/extensions_are_catalogued.feature @@ -4,31 +4,33 @@ Feature: Extensions are catalogued I want my extensions to be catalogued when I release a new versions of them Rules: - - Extension repository release causes extension to be added to the extension catalogue - - If repository has no extensions, releasing it doesn't change the catalogue - - If repository has documentation, but no extensions, releasing it still doesn't change the catalogue + - Extension repository release causes extension to be added to the extension catalogue + - If repository has no extensions, releasing it doesn't change the catalogue + - If repository has documentation, but no extensions, releasing it still doesn't change the catalogue + @critical Scenario: Releasing a stable extension - Given "behat/symfony2-extension" extension was created in "Behat/Symfony2Extension" + Given "behat/symfony2-extension" extension package was created in "Behat/Symfony2Extension" When I release "Behat/Symfony2Extension" version "v2.0.0" Then the extension catalogue should contain 1 extension And "behat/symfony2-extension" extension should be in the catalogue + @critical Scenario: Releasing multiple stable extensions - Given "behat/symfony2-extension" extension was created in "Behat/Symfony2Extension" - And "behat/mink-extension" extension was created in "Behat/MinkExtension" + Given "behat/symfony2-extension" extension package was created in "Behat/Symfony2Extension" + And "behat/mink-extension" extension package was created in "Behat/MinkExtension" When I release "Behat/Symfony2Extension" version "v2.0.0" And I release "Behat/MinkExtension" version "v2.0.1" Then the extension catalogue should contain 2 extensions Scenario: Releasing multiple versions of the same extension - Given "behat/mink-extension" extension was created in "Behat/MinkExtension" + Given "behat/mink-extension" extension package was created in "Behat/MinkExtension" When I release "Behat/MinkExtension" version "v2.0.0" And I release "Behat/MinkExtension" version "v2.0.1" Then the extension catalogue should still contain 1 extension Scenario: Releasing repository that has no extensions - Given extension was not created in "Behat/MinkExtension" + Given extension package was not created in "Behat/MinkExtension" When I release "Behat/MinkExtension" version "v2.0.0" Then the extension catalogue should be empty diff --git a/spec/Documentation/Publisher/PublishedDocumentationSpec.php b/spec/Documentation/Publisher/PublishedDocumentationSpec.php index 26f9197..ddd71a8 100644 --- a/spec/Documentation/Publisher/PublishedDocumentationSpec.php +++ b/spec/Documentation/Publisher/PublishedDocumentationSpec.php @@ -38,12 +38,6 @@ function it_has_the_same_documentation_time_as_the_built_documentation(\DateTime $this->documentedAt()->shouldReturn($docTime); } - function it_can_tell_if_it_contains_a_page() - { - $this->has(new PageId(basename(__FILE__)))->shouldReturn(true); - $this->has(new PageId('any file'))->shouldReturn(false); - } - function it_can_get_a_page_by_its_id() { $pageId = new PageId(basename(__FILE__)); @@ -58,11 +52,6 @@ function it_throws_an_exception_when_trying_to_get_inexistent_page() function it_can_provide_absolute_path_for_the_page_by_its_id() { - $this->path(new PageId(basename(__FILE__)))->shouldReturn(__FILE__); - } - - function it_throws_an_exception_when_trying_to_get_path_for_inexistent_page() - { - $this->shouldThrow()->duringPath(new PageId('any file')); + $this->path()->shouldReturn(__DIR__); } } diff --git a/spec/Extension/ExtensionSpec.php b/spec/Extension/ExtensionSpec.php new file mode 100644 index 0000000..8537d09 --- /dev/null +++ b/spec/Extension/ExtensionSpec.php @@ -0,0 +1,39 @@ +beConstructedWith('behat', 'symfony2-extension', 'Symfony2 framework extension for Behat', 'Konstantin Kudryashov'); + } + + function it_has_an_organisation_name() + { + $this->organisationName()->shouldReturn('behat'); + } + + function it_has_a_name() + { + $this->name()->shouldReturn('symfony2-extension'); + } + + function it_can_be_converted_to_string() + { + $this->__toString()->shouldReturn('behat/symfony2-extension'); + } + + function it_has_a_description() + { + $this->description()->shouldReturn('Symfony2 framework extension for Behat'); + } + + function it_has_author() + { + $this->author()->shouldReturn('Konstantin Kudryashov'); + } +} diff --git a/spec/ExtensionCatalogueSpec.php b/spec/ExtensionCatalogueSpec.php index 5a84966..e8a8277 100644 --- a/spec/ExtensionCatalogueSpec.php +++ b/spec/ExtensionCatalogueSpec.php @@ -14,15 +14,19 @@ function let(Repository $repository) $this->beConstructedWith($repository); } - function it_finds_registered_extensions_using_repository(Repository $repository, Extension $extension) + function it_finds_registered_extensions_using_repository(Repository $repository) { + $extension = new Extension('some', 'extension', 'sf2 extension for behat', 'everzet'); + $repository->extension('some/extension')->willReturn($extension); $this->extension('some/extension')->shouldReturn($extension); } - function it_finds_all_registered_extensions_using_repository(Repository $repository, Extension $extension) + function it_finds_all_registered_extensions_using_repository(Repository $repository) { + $extension = new Extension('some', 'extension', 'sf2 extension for behat', 'everzet'); + $repository->all()->willReturn([$extension]); $this->all()->shouldReturn([$extension]); diff --git a/spec/Integration/Documentation/SphinxDoc/BuiltSphinxSpec.php b/spec/Integration/Documentation/SphinxDoc/BuiltSphinxSpec.php index bc5b2c5..7b4e0b5 100644 --- a/spec/Integration/Documentation/SphinxDoc/BuiltSphinxSpec.php +++ b/spec/Integration/Documentation/SphinxDoc/BuiltSphinxSpec.php @@ -29,12 +29,12 @@ function it_has_a_documentation_id() function it_has_a_path_documentation_was_built_into() { - $this->buildPath()->shouldReturn(__DIR__); + $this->path()->shouldReturn(__DIR__); } function it_has_an_index_path_which_is_the_index_html_inside_the_built_path() { - $this->indexPath()->shouldReturn(__DIR__ . '/index.html'); + $this->index()->shouldReturn(__DIR__ . '/index.html'); } function it_has_time_at_which_it_was_built(DateTimeImmutable $buildTime) diff --git a/spec/Integration/Extension/Composer/ComposerExtractorSpec.php b/spec/Integration/Extension/Composer/ComposerExtractorSpec.php new file mode 100644 index 0000000..7acae99 --- /dev/null +++ b/spec/Integration/Extension/Composer/ComposerExtractorSpec.php @@ -0,0 +1,49 @@ +shouldHaveType(Extractor::class); + } + + function it_extracts_nothing_if_provided_package_is_not_a_composer_package(Package $package) + { + $this->extract($package)->shouldReturn(null); + } + + function it_extracts_nothing_if_provided_composer_package_is_not_of_type_behat_extension() + { + $package = new ComposerPackage([ + 'name' => 'behat/behat', + 'type' => 'library' + ]); + + $this->extract($package)->shouldReturn(null); + } + + function it_extracts_extension_if_provided_composer_package_is_of_type_behat_extension() + { + $package = new ComposerPackage([ + 'name' => 'behat/symfony2-extension', + 'type' => 'behat-extension', + 'authors' => [ + ['name' => 'everzet'] + ] + ]); + + $extension = $this->extract($package); + $extension->shouldHaveType(Extension::class); + $extension->name()->shouldReturn('symfony2-extension'); + $extension->author()->shouldReturn('everzet'); + } +} diff --git a/spec/Integration/Release/Composer/ComposerAuthorSpec.php b/spec/Integration/Release/Composer/ComposerAuthorSpec.php new file mode 100644 index 0000000..cd24527 --- /dev/null +++ b/spec/Integration/Release/Composer/ComposerAuthorSpec.php @@ -0,0 +1,42 @@ +beConstructedWith(['name' => 'everzet', 'email' => 'ever.zet@gmail.com']); + } + + function it_has_a_name() + { + $this->name()->shouldReturn('everzet'); + } + + function it_has_an_email() + { + $this->email()->shouldReturn('ever.zet@gmail.com'); + } + + function its_email_is_optional() + { + $this->beConstructedWith(['name' => 'everzet']); + + $this->email()->shouldBe(null); + } + + function it_can_not_be_constructed_from_empty_array() + { + $this->shouldThrow(InvalidArgumentException::class)->during('__construct', [[]]); + } + + function it_can_not_be_constructed_from_array_without_name() + { + $this->shouldThrow(InvalidArgumentException::class)->during('__construct', [['email' => 'ever.zet@gmail.com']]); + } +} diff --git a/spec/Integration/Release/Composer/ComposerPackageSpec.php b/spec/Integration/Release/Composer/ComposerPackageSpec.php index 54bcf8e..79d6a63 100644 --- a/spec/Integration/Release/Composer/ComposerPackageSpec.php +++ b/spec/Integration/Release/Composer/ComposerPackageSpec.php @@ -2,6 +2,7 @@ namespace spec\Behat\Borg\Integration\Release\Composer; +use Behat\Borg\Integration\Release\Composer\ComposerAuthor; use Behat\Borg\Release\Package; use PhpSpec\ObjectBehavior; use Prophecy\Argument; @@ -10,7 +11,16 @@ class ComposerPackageSpec extends ObjectBehavior { function let() { - $this->beConstructedWith('behat/docs'); + $this->beConstructedWith( + [ + 'name' => 'behat/docs', + 'description' => 'behat documentation', + 'authors' => [ + ['name' => 'Konstantin Kudryashov', 'email' => 'ever.zet@gmail.com'], + ['name' => 'Christophe Coevoet', 'email' => 'stof@notk.org'] + ] + ] + ); } function it_is_a_package() @@ -20,32 +30,82 @@ function it_is_a_package() function it_can_not_be_constructed_with_a_name_that_has_less_than_2_segments_in_it() { - $this->shouldThrow()->during('__construct', ['behat']); + $this->shouldThrow()->during('__construct', [['name' => 'behat', 'type' => 'library']]); } function it_can_not_be_constructed_with_a_name_that_has_more_than_2_segments_in_it() { - $this->shouldThrow()->during('__construct', ['behat/docs/v2']); + $this->shouldThrow()->during('__construct', [['name' => 'behat/docs/v2', 'type' => 'library']]); } - function its_organisation_name_is_a_first_segment_of_the_constructor_argument() + function its_organisation_name_is_a_first_segment_of_the_composer_package_name() { $this->organisationName()->shouldReturn('behat'); } function it_lowercases_provided_organisation_and_package_name() { - $this->beConstructedWith('Behat/Docs'); + $this->beConstructedWith(['name' => 'Behat/Docs', 'type' => 'library']); $this->organisationName()->shouldReturn('behat'); $this->name()->shouldReturn('docs'); } - function its_name_is_a_second_segment_of_the_constructor_argument() + function its_name_is_a_second_segment_of_the_composer_package_name() { $this->name()->shouldReturn('docs'); } + function its_default_type_is_library() + { + $this->type()->shouldReturn('library'); + } + + function it_has_a_different_type_if_provided() + { + $this->beConstructedWith( + [ + 'name' => 'behat/docs', + 'type' => 'whatever' + ] + ); + + $this->type()->shouldReturn('whatever'); + } + + function it_has_a_description() + { + $this->description()->shouldReturn('behat documentation'); + } + + function it_has_authors() + { + $this->authors()->shouldBeLike( + [ + new ComposerAuthor(['name' => 'Konstantin Kudryashov', 'email' => 'ever.zet@gmail.com']), + new ComposerAuthor(['name' => 'Christophe Coevoet', 'email' => 'stof@notk.org']), + ] + ); + } + + function its_primary_author_is_the_first_one() + { + $this->primaryAuthor()->shouldBeLike(new ComposerAuthor(['name' => 'Konstantin Kudryashov', 'email' => 'ever.zet@gmail.com'])); + } + + function its_primary_author_is_null_if_none_authors_found() + { + $this->beConstructedWith( + [ + 'name' => 'behat/docs', + 'type' => 'library', + 'description' => 'behat documentation' + ] + ); + + $this->primaryAuthor()->shouldReturn(null); + } + function its_string_representation_is_the_name_of_the_package() { $this->__toString()->shouldReturn('behat/docs'); diff --git a/spec/Integration/Release/Composer/Exception/AuthorNameIsNotDefinedSpec.php b/spec/Integration/Release/Composer/Exception/AuthorNameIsNotDefinedSpec.php new file mode 100644 index 0000000..e1237b7 --- /dev/null +++ b/spec/Integration/Release/Composer/Exception/AuthorNameIsNotDefinedSpec.php @@ -0,0 +1,21 @@ +shouldHaveType(InvalidArgumentException::class); + } + + function it_is_also_a_ReleaseException() + { + $this->shouldHaveType(ReleaseException::class); + } +} diff --git a/src/Documentation/Builder/BuiltDocumentation.php b/src/Documentation/Builder/BuiltDocumentation.php index dfca160..7e252d2 100644 --- a/src/Documentation/Builder/BuiltDocumentation.php +++ b/src/Documentation/Builder/BuiltDocumentation.php @@ -22,7 +22,7 @@ public function documentationId(); * * @return string */ - public function buildPath(); + public function path(); /** * Returns the time documentation was built at. diff --git a/src/Documentation/Page/Page.php b/src/Documentation/Page/Page.php index e689af5..91e0639 100644 --- a/src/Documentation/Page/Page.php +++ b/src/Documentation/Page/Page.php @@ -2,6 +2,7 @@ namespace Behat\Borg\Documentation\Page; +use Behat\Borg\Documentation\DocumentationId; use Behat\Borg\Documentation\Publisher\PublishedDocumentation; use DateTimeImmutable; @@ -11,21 +12,17 @@ final class Page { /** - * @var string + * @var DocumentationId */ - private $path; + private $documentationId; /** - * @var string + * @var DateTimeImmutable */ - private $projectName; + private $time; /** * @var string */ - private $versionString; - /** - * @var DateTimeImmutable - */ - private $time; + private $path; /** * Initializes page. @@ -35,30 +32,29 @@ final class Page */ public function __construct(PublishedDocumentation $documentation, PageId $pageId) { - $this->path = $documentation->path($pageId); - $this->projectName = $documentation->documentationId()->projectName(); - $this->versionString = $documentation->documentationId()->versionString(); + $this->documentationId = $documentation->documentationId(); $this->time = $documentation->documentedAt(); + $this->path = $documentation->path() . '/' . $pageId->path(); } /** - * Returns a documented project name. + * Returns documentation project name. * * @return string */ public function projectName() { - return $this->projectName; + return $this->documentationId->projectName(); } /** - * Returns a documented project version string. + * Returns documentation version string. * * @return string */ public function versionString() { - return $this->versionString; + return $this->documentationId->versionString(); } /** diff --git a/src/Documentation/Publisher/PublishedDocumentation.php b/src/Documentation/Publisher/PublishedDocumentation.php index 4e462e0..690371b 100644 --- a/src/Documentation/Publisher/PublishedDocumentation.php +++ b/src/Documentation/Publisher/PublishedDocumentation.php @@ -69,15 +69,13 @@ public function documentedAt() } /** - * Checks if file at provided relative path exists. - * - * @param PageId $anId + * Returns the path documentation is stored at. * - * @return Boolean + * @return string */ - public function has(PageId $anId) + public function path() { - return file_exists($this->path . '/' . $anId); + return $this->path; } /** @@ -89,7 +87,7 @@ public function has(PageId $anId) */ public function page(PageId $anId) { - if (!$this->has($anId)) { + if (!$this->hasPage($anId)) { throw new PageNotFound("Documentation page `{$anId->path()}` was not found."); } @@ -97,19 +95,15 @@ public function page(PageId $anId) } /** - * Generates absolute file path for provided page ID. + * Checks if file at provided relative path exists. * * @param PageId $anId * - * @return string + * @return Boolean */ - public function path(PageId $anId) + private function hasPage(PageId $anId) { - if (!$this->has($anId)) { - throw new PageNotFound("Documentation page `{$anId->path()}` was not found."); - } - - return $this->path . '/' . $anId; + return file_exists($this->path . '/' . $anId); } private function __construct() { } diff --git a/src/Extension/Extension.php b/src/Extension/Extension.php index 7160eda..0e6d393 100644 --- a/src/Extension/Extension.php +++ b/src/Extension/Extension.php @@ -5,26 +5,86 @@ /** * Represents Behat extension. */ -interface Extension +final class Extension { /** - * Returns extension organisation name. + * @var string + */ + private $organisationName; + /** + * @var string + */ + private $name; + /** + * @var string + */ + private $description; + /** + * @var string[] + */ + private $author; + + /** + * Initializes extension. + * + * @param string $organisationName + * @param string $name + * @param string $description + * @param string $author + */ + public function __construct($organisationName, $name, $description, $author) + { + $this->organisationName = $organisationName; + $this->name = $name; + $this->description = $description; + $this->author = $author; + } + + /** + * Returns organisation this extension belongs to. + * + * @return string + */ + public function organisationName() + { + return $this->organisationName; + } + + /** + * Returns name of the extension. * * @return string */ - public function organisationName(); + public function name() + { + return $this->name; + } /** - * Returns extension name. + * Returns extension description. * * @return string */ - public function name(); + public function description() + { + return $this->description; + } /** - * Returns string representation of extension. + * Returns extension author name. * * @return string */ - public function __toString(); + public function author() + { + return $this->author; + } + + /** + * Converts extension to string. + */ + public function __toString() + { + return sprintf('%s/%s', $this->organisationName, $this->name); + } } diff --git a/src/Integration/Documentation/Filesystem/DirectoryPublisher.php b/src/Integration/Documentation/Filesystem/DirectoryPublisher.php index 412d7d1..3c977bc 100644 --- a/src/Integration/Documentation/Filesystem/DirectoryPublisher.php +++ b/src/Integration/Documentation/Filesystem/DirectoryPublisher.php @@ -29,7 +29,7 @@ public function __construct($publishPath) */ public function publish(BuiltDocumentation $builtDocumentation) { - $buildPath = $builtDocumentation->buildPath(); + $buildPath = $builtDocumentation->path(); $publishPath = "{$this->publishPath}/{$builtDocumentation->documentationId()}"; $publishedDocumentation = PublishedDocumentation::publish($builtDocumentation, $publishPath); diff --git a/src/Integration/Documentation/Filesystem/PersistedObjectsRepository.php b/src/Integration/Documentation/Filesystem/PersistedObjectsRepository.php index 1a713ba..99e58aa 100644 --- a/src/Integration/Documentation/Filesystem/PersistedObjectsRepository.php +++ b/src/Integration/Documentation/Filesystem/PersistedObjectsRepository.php @@ -14,6 +14,7 @@ final class PersistedObjectsRepository implements Repository, ObjectIdentifier { public function __construct($path) { + $path && @mkdir(dirname($path), 0777, true); $this->repo = $path ? new FileRepository($path, $this) : new InMemoryRepository($this); } diff --git a/src/Integration/Documentation/SphinxDoc/BuiltSphinx.php b/src/Integration/Documentation/SphinxDoc/BuiltSphinx.php index 7b7ad08..74d4e88 100644 --- a/src/Integration/Documentation/SphinxDoc/BuiltSphinx.php +++ b/src/Integration/Documentation/SphinxDoc/BuiltSphinx.php @@ -45,7 +45,7 @@ public function documentationId() /** * {@inheritdoc} */ - public function buildPath() + public function path() { return $this->buildPath; } @@ -53,9 +53,9 @@ public function buildPath() /** * {@inheritdoc} */ - public function indexPath() + public function index() { - return $this->buildPath() . '/index.html'; + return $this->path() . '/index.html'; } /** diff --git a/src/Integration/Extension/Composer/ComposerExtractor.php b/src/Integration/Extension/Composer/ComposerExtractor.php new file mode 100644 index 0000000..690799b --- /dev/null +++ b/src/Integration/Extension/Composer/ComposerExtractor.php @@ -0,0 +1,46 @@ +type()) { + return null; + } + + return new Extension($package->organisationName(), $package->name(), $package->description(), $this->primaryAuthorName($package)); + } + + /** + * Gets primary author name from the composer package. + * + * @param ComposerPackage $package + * + * @return string + */ + private function primaryAuthorName(ComposerPackage $package) + { + if (!$package->primaryAuthor()) { + return 'Anonymous'; + } + + return $package->primaryAuthor()->name(); + } +} diff --git a/src/Integration/Extension/Filesystem/PersistedObjectsRepository.php b/src/Integration/Extension/Filesystem/PersistedObjectsRepository.php index e2c2ba3..0ca10fe 100644 --- a/src/Integration/Extension/Filesystem/PersistedObjectsRepository.php +++ b/src/Integration/Extension/Filesystem/PersistedObjectsRepository.php @@ -15,6 +15,7 @@ final class PersistedObjectsRepository implements Repository, ObjectIdentifier public function __construct($path) { + $path && @mkdir(dirname($path), 0777, true); $this->repo = $path ? new FileRepository($path, $this) : new InMemoryRepository($this); } diff --git a/src/Integration/Release/Composer/ComposerAuthor.php b/src/Integration/Release/Composer/ComposerAuthor.php new file mode 100644 index 0000000..ca3d074 --- /dev/null +++ b/src/Integration/Release/Composer/ComposerAuthor.php @@ -0,0 +1,55 @@ +name = $meta['name']; + $this->email = isset($meta['email']) ? $meta['email'] : null; + } + + /** + * @return string + */ + public function name() + { + return $this->name; + } + + /** + * @return null|string + */ + public function email() + { + return $this->email; + } +} diff --git a/src/Integration/Release/Composer/ComposerPackage.php b/src/Integration/Release/Composer/ComposerPackage.php index 937c1b0..fa51dd3 100644 --- a/src/Integration/Release/Composer/ComposerPackage.php +++ b/src/Integration/Release/Composer/ComposerPackage.php @@ -10,25 +10,44 @@ */ final class ComposerPackage implements Package { + const DEFAULT_TYPE = 'library'; + + /** + * @var string + */ + private $name; + /** + * @var string + */ + private $type; /** * @var string */ - private $string; + private $description; + /** + * @var array + */ + private $authors; /** * Initializes package. * - * @param string $string + * @param array $data */ - public function __construct($string) + public function __construct(array $data) { - if (1 !== preg_match(self::PACKAGE_NAME_REGEX, $string)) { + $name = $data['name']; + + if (1 !== preg_match(self::PACKAGE_NAME_REGEX, $name)) { throw new BadPackageNameGiven( - "Composer package name should match `" . self::PACKAGE_NAME_REGEX . "`, but `{$string}` given." + "Composer package name should match `" . self::PACKAGE_NAME_REGEX . "`, but `{$name}` given." ); } - $this->string = strtolower($string); + $this->name = strtolower($name); + $this->type = $this->extractType($data); + $this->description = $this->extractDescription($data); + $this->authors = $this->extractAuthors($data); } /** @@ -36,7 +55,7 @@ public function __construct($string) */ public function organisationName() { - return explode('/', $this->string)[0]; + return explode('/', $this->name)[0]; } /** @@ -44,7 +63,47 @@ public function organisationName() */ public function name() { - return explode('/', $this->string)[1]; + return explode('/', $this->name)[1]; + } + + /** + * Returns composer package type. + * + * @return string + */ + public function type() + { + return $this->type; + } + + /** + * Returns package description. + * + * @return string + */ + public function description() + { + return $this->description; + } + + /** + * Hash of the primary package author or null if no authors defined. + * + * @return ComposerAuthor|null + */ + public function primaryAuthor() + { + return count($this->authors) ? current($this->authors) : null; + } + + /** + * Returns package authors. + * + * @return ComposerAuthor[] + */ + public function authors() + { + return $this->authors; } /** @@ -52,6 +111,30 @@ public function name() */ public function __toString() { - return $this->string; + return $this->name; + } + + private function extractType(array $data) + { + return isset($data['type']) ? $data['type'] : self::DEFAULT_TYPE; + } + + private function extractDescription(array $data) + { + return isset($data['description']) ? $data['description'] : null; + } + + private function extractAuthors(array $data) + { + if (!isset($data['authors'])) { + return []; + } + + return array_map([$this, 'extractAuthor'], $data['authors']); + } + + private function extractAuthor(array $meta) + { + return new ComposerAuthor($meta); } } diff --git a/src/Integration/Release/Composer/ComposerPackageFinder.php b/src/Integration/Release/Composer/ComposerPackageFinder.php index c307a27..486dbbf 100644 --- a/src/Integration/Release/Composer/ComposerPackageFinder.php +++ b/src/Integration/Release/Composer/ComposerPackageFinder.php @@ -22,6 +22,6 @@ public function find(Download $download) $path = $download->filePath('composer.json'); $meta = json_decode(file_get_contents($path), true); - return new ComposerPackage($meta['name']); + return new ComposerPackage($meta); } } diff --git a/src/Integration/Release/Composer/Exception/AuthorNameIsNotDefined.php b/src/Integration/Release/Composer/Exception/AuthorNameIsNotDefined.php new file mode 100644 index 0000000..04ab780 --- /dev/null +++ b/src/Integration/Release/Composer/Exception/AuthorNameIsNotDefined.php @@ -0,0 +1,10 @@ + - %kernel.root_dir%/../docs + %kernel.root_dir%/../build/published_docs %kernel.root_dir%/../build/docs diff --git a/src/Integration/Symfony/Extension/Controller/ExtensionController.php b/src/Integration/Symfony/Extension/Controller/ExtensionController.php new file mode 100644 index 0000000..23df3be --- /dev/null +++ b/src/Integration/Symfony/Extension/Controller/ExtensionController.php @@ -0,0 +1,37 @@ + $this->catalogue()->all()]; + } + + /** + * @Route("/{organisation}/{name}", name="extension_index") + * @Template("ExtensionBundle::extension.html.twig") + */ + public function indexAction($organisation, $name) + { + return ['extension' => $this->catalogue()->extension($organisation . '/' . $name)]; + } + + /** + * @return ExtensionCatalogue + */ + private function catalogue() + { + return $this->get('extension.catalogue'); + } +} diff --git a/src/Integration/Symfony/Extension/DependencyInjection/ExtensionExtension.php b/src/Integration/Symfony/Extension/DependencyInjection/ExtensionExtension.php new file mode 100644 index 0000000..fbc323c --- /dev/null +++ b/src/Integration/Symfony/Extension/DependencyInjection/ExtensionExtension.php @@ -0,0 +1,25 @@ +load('services.xml'); + } +} diff --git a/src/Integration/Symfony/Extension/ExtensionBundle.php b/src/Integration/Symfony/Extension/ExtensionBundle.php new file mode 100644 index 0000000..66af66d --- /dev/null +++ b/src/Integration/Symfony/Extension/ExtensionBundle.php @@ -0,0 +1,9 @@ + + + + + + %kernel.root_dir%/../build/extensions + + + + + + + + + + %extension.repo.path%/catalogue.meta + + + + + + + + + + + + diff --git a/src/Integration/Symfony/Extension/Resources/views/extension.html.twig b/src/Integration/Symfony/Extension/Resources/views/extension.html.twig new file mode 100644 index 0000000..dca6beb --- /dev/null +++ b/src/Integration/Symfony/Extension/Resources/views/extension.html.twig @@ -0,0 +1,18 @@ +{% extends '::layout.html.twig' %} + +{% block title %}{{ extension }} — Behat Extensions{% endblock %} + +{% block stylesheets %} + +{% endblock %} + + +{% block page %} +
+
+

{{ extension }}

+ by {{ extension.author }} +

{{ extension.description }}

+
+
+{% endblock %} diff --git a/src/Integration/Symfony/Extension/Resources/views/list.html.twig b/src/Integration/Symfony/Extension/Resources/views/list.html.twig new file mode 100644 index 0000000..3647d05 --- /dev/null +++ b/src/Integration/Symfony/Extension/Resources/views/list.html.twig @@ -0,0 +1,30 @@ +{% extends '::layout.html.twig' %} + +{% block title %}Behat Extensions{% endblock %} + +{% block stylesheets %} + +{% endblock %} + + +{% block page %} +
+

Extensions

+ +

Behat is very extensible. Almost every bit of the framework + functionality could be enhanced or even replaced through the powerful + extension system. Here is the list of awesome extensions you might be + interested in:

+ + {% for extension in extensions %} + +

{{ extension }}

+ by {{ extension.author }} +

{{ extension.description }}

+
+ {% endfor %} +
+{% endblock %} diff --git a/src/Integration/Symfony/Release/Resources/config/services.xml b/src/Integration/Symfony/Release/Resources/config/services.xml index 912b678..5d3815d 100644 --- a/src/Integration/Symfony/Release/Resources/config/services.xml +++ b/src/Integration/Symfony/Release/Resources/config/services.xml @@ -16,6 +16,9 @@ + + + getMock(BuiltDocumentation::class); $builtDoc->method('documentationId')->willReturn($anId); - $builtDoc->method('buildPath')->willReturn($this->tempBuildPath . '/built_doc/v1.0'); + $builtDoc->method('path')->willReturn($this->tempBuildPath . '/built_doc/v1.0'); (new Filesystem())->mkdir($this->tempBuildPath . '/built_doc/v1.0'); (new Filesystem())->touch($this->tempBuildPath . '/built_doc/v1.0/my_file'); diff --git a/tests/Documentation/SphinxDoc/SphinxBuilderTest.php b/tests/Documentation/SphinxDoc/SphinxBuilderTest.php index 3ceec59..69e8270 100644 --- a/tests/Documentation/SphinxDoc/SphinxBuilderTest.php +++ b/tests/Documentation/SphinxDoc/SphinxBuilderTest.php @@ -53,10 +53,10 @@ function it_builds_RST_documentation_into_the_output_path() $this->assertFileExists($this->tempOutputPath . '/my/doc/v1.3/index.html'); $this->assertEquals( - $this->tempOutputPath . '/my/doc/v1.3/index.html', $built->indexPath() + $this->tempOutputPath . '/my/doc/v1.3/index.html', $built->index() ); - $output = file_get_contents($built->indexPath()); + $output = file_get_contents($built->index()); $this->assertContains('

Docs', $output); $this->assertContains('my/doc', $output); @@ -83,7 +83,7 @@ function it_builds_valid_template_when_doc_contains_Twig_like_content() $built = $this->builder->build($documentation); - $output = file_get_contents($built->indexPath()); + $output = file_get_contents($built->index()); $this->assertContains('

Trying to hack the twig-bridge theme {{', $output); $this->assertValidTwigSyntax($output); diff --git a/web/css/extensions.css b/web/css/extensions.css new file mode 100644 index 0000000..e985d8c --- /dev/null +++ b/web/css/extensions.css @@ -0,0 +1,145 @@ +section.extension { + margin: 0px 20px; +} + +section.extension header { + display: block; + width: 780px; + margin-bottom: 20px; + border: none; +} + +section.extension header h1 { + font-family: 'Comfortaa'; + display: block; + position: relative; + float: left; + max-width: 450px; + margin-top: 10px; + padding: 3px 0px; + font-size: 2.4rem; + line-height: 1.38; + overflow: hidden; + color: #000; +} + +section.extension header .by { + display: block; + position: relative; + float: left; + margin: 21px 0 0 10px; + font: italic 1.4rem Georgia; + color: rgb(161, 159, 159); +} + +section.extension header .author { + display: block; + position: relative; + float: left; + max-width: 260px; + margin: 18px 0 0 7px; + font-size: 1.8rem; + line-height: 1.38; + overflow: hidden; + color: rgb(161, 159, 159); +} + +section.extension header p { + display: block; + width: 100%; + margin: 60px auto 0; + padding-right: 10px; + padding-bottom: 10px; + font-size: 1.4rem; + font-weight: 400; + line-height: 1.38; + color: rgb(80, 80, 80); +} + + + + + + + + + + + +section.extensions { + margin: 0px 20px; +} + +section.extensions h1 { + font-family: 'Comfortaa'; + text-transform: lowercase; + color: #000; + font-weight: normal; + font-size: 3.6rem; + margin: 24px 0px 24px; +} + +section.extensions > p { + margin-bottom: 30px; + font-size: 1.6rem; + color: #4f4f4f; + line-height: 2.4rem; +} + +section.extensions .extension { + display: block; + width: 780px; + margin-bottom: 20px; +} + +section.extensions .extension:hover { + background: #f1f1f1; +} + +section.extensions .extension h2 { + display: block; + position: relative; + float: left; + max-width: 450px; + margin-top: 10px; + padding: 3px 10px; + background-color: rgb(192, 192, 192); + font-size: 2.4rem; + line-height: 1.38; + color: rgb(80, 80, 80); + overflow: hidden; +} + +section.extensions .extension .by { + display: block; + position: relative; + float: left; + margin: 21px 0 0 10px; + font: italic 1.4rem Georgia; + color: rgb(161, 159, 159); +} + +section.extensions .extension .author { + display: block; + position: relative; + float: left; + max-width: 260px; + margin: 18px 0 0 7px; + font-size: 1.8rem; + line-height: 1.38; + overflow: hidden; + color: rgb(171, 170, 170); +} + +section.extensions .extension p { + display: block; + width: 100%; + margin: 60px auto 0; + padding-right: 10px; + padding-bottom: 10px; + padding-left: 10px; + font-size: 1.4rem; + font-weight: 400; + line-height: 1.38; + color: rgb(80, 80, 80); +}