diff --git a/changelog.md b/changelog.md index 6faf87b..0e91345 100644 --- a/changelog.md +++ b/changelog.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.0.2] - 2017-11-21 +### Changed +- Sites are not being cached if they do not have a 200 status code +- Sites are not being cached if there is a validation error + ## [1.0.1] - 2017-09-03 ### Added - Support for laravel 5.5 (Auto package discovery) @@ -15,3 +20,4 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Configuration file to ignore specific routes [1.0.1]: https://github.com/jkniest/HTMLCache/compare/1.0.0...1.0.1 +[1.0.2]: https://github.com/jkniest/HTMLCache/compare/1.0.1...1.0.2 diff --git a/composer.lock b/composer.lock index 1a39af5..093be05 100644 --- a/composer.lock +++ b/composer.lock @@ -12,12 +12,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "fb0b68b78eda6ba5a7459007da2f5df5445a74a6" + "reference": "40daa067a3e5fb95572236a346a8290e4445778f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/fb0b68b78eda6ba5a7459007da2f5df5445a74a6", - "reference": "fb0b68b78eda6ba5a7459007da2f5df5445a74a6", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/40daa067a3e5fb95572236a346a8290e4445778f", + "reference": "40daa067a3e5fb95572236a346a8290e4445778f", "shasum": "" }, "require": { @@ -71,7 +71,7 @@ "singularize", "string" ], - "time": "2017-08-06 15:11:19" + "time": "2017-10-04T05:38:52+00:00" }, { "name": "doctrine/lexer", @@ -125,20 +125,69 @@ "lexer", "parser" ], - "time": "2017-07-24 09:37:08" + "time": "2017-07-24T09:37:08+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8a84aee649c3a3ba03a721c1fb080e08dfbcd68b", + "reference": "8a84aee649c3a3ba03a721c1fb080e08dfbcd68b", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2017-10-12T15:59:13+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c" + "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/bc31baa11ea2883e017f0a10d9722ef9d50eac1c", - "reference": "bc31baa11ea2883e017f0a10d9722ef9d50eac1c", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/1bec00a10039b823cc94eef4eddd47dcd3b2ca04", + "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04", "shasum": "" }, "require": { @@ -147,8 +196,8 @@ }, "require-dev": { "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.0", - "satooshi/php-coveralls": "dev-master" + "phpunit/phpunit": "^4.8.35", + "satooshi/php-coveralls": "^1.0.1" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -182,25 +231,28 @@ "validation", "validator" ], - "time": "2017-01-30T22:07:36+00:00" + "time": "2017-11-15T23:40:40+00:00" }, { "name": "erusev/parsedown", - "version": "1.6.3", + "version": "1.6.4", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "728952b90a333b5c6f77f06ea9422b94b585878d" + "reference": "fbe3fe878f4fe69048bb8a52783a09802004f548" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/728952b90a333b5c6f77f06ea9422b94b585878d", - "reference": "728952b90a333b5c6f77f06ea9422b94b585878d", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/fbe3fe878f4fe69048bb8a52783a09802004f548", + "reference": "fbe3fe878f4fe69048bb8a52783a09802004f548", "shasum": "" }, "require": { "php": ">=5.3.0" }, + "require-dev": { + "phpunit/phpunit": "^4.8.35" + }, "type": "library", "autoload": { "psr-0": { @@ -224,7 +276,7 @@ "markdown", "parser" ], - "time": "2017-05-14T14:47:48+00:00" + "time": "2017-11-14T20:44:03+00:00" }, { "name": "laravel/framework", @@ -232,24 +284,24 @@ "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "3ef5aa760fcc06d034d84f32dc95b0ba1515be1c" + "reference": "29611a9d8abf46eabcf5bd1c4b47dfa7079ad6bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/3ef5aa760fcc06d034d84f32dc95b0ba1515be1c", - "reference": "3ef5aa760fcc06d034d84f32dc95b0ba1515be1c", + "url": "https://api.github.com/repos/laravel/framework/zipball/29611a9d8abf46eabcf5bd1c4b47dfa7079ad6bf", + "reference": "29611a9d8abf46eabcf5bd1c4b47dfa7079ad6bf", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", + "dragonmantank/cron-expression": "~2.0", "erusev/parsedown": "~1.6", "ext-mbstring": "*", "ext-openssl": "*", "league/flysystem": "~1.0", "monolog/monolog": "~1.12", - "mtdowling/cron-expression": "~1.0", "nesbot/carbon": "~1.20", - "php": ">=7.0", + "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", "ramsey/uuid": "~3.0", @@ -278,7 +330,6 @@ "illuminate/database": "self.version", "illuminate/encryption": "self.version", "illuminate/events": "self.version", - "illuminate/exception": "self.version", "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", @@ -302,7 +353,7 @@ "doctrine/dbal": "~2.5", "filp/whoops": "^2.1.4", "mockery/mockery": "~1.0", - "orchestra/testbench-core": "3.5.*", + "orchestra/testbench-core": "3.6.*", "pda/pheanstalk": "~3.0", "phpunit/phpunit": "~6.0", "predis/predis": "^1.1.1", @@ -312,6 +363,8 @@ "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.5).", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", @@ -320,7 +373,7 @@ "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~3.0).", "symfony/css-selector": "Required to use some of the crawler integration testing tools (~3.3).", "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (~3.3).", "symfony/psr-http-message-bridge": "Required to psr7 bridging features (~1.0)." @@ -356,7 +409,7 @@ "framework", "laravel" ], - "time": "2017-09-01 06:35:20" + "time": "2017-11-18T18:19:57+00:00" }, { "name": "league/flysystem", @@ -364,12 +417,12 @@ "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "2a12dff63eca980f103747935b6178862d9c88db" + "reference": "8f4639a34cabf69c300814258e6eadc13b0f1aed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2a12dff63eca980f103747935b6178862d9c88db", - "reference": "2a12dff63eca980f103747935b6178862d9c88db", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8f4639a34cabf69c300814258e6eadc13b0f1aed", + "reference": "8f4639a34cabf69c300814258e6eadc13b0f1aed", "shasum": "" }, "require": { @@ -382,10 +435,12 @@ "ext-fileinfo": "*", "mockery/mockery": "~0.9", "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", @@ -439,7 +494,7 @@ "sftp", "storage" ], - "time": "2017-09-01 19:06:55" + "time": "2017-11-10T20:20:27+00:00" }, { "name": "monolog/monolog", @@ -517,51 +572,7 @@ "logging", "psr-3" ], - "time": "2017-06-19 01:22:40" - }, - { - "name": "mtdowling/cron-expression", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", - "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "time": "2017-01-23T04:29:33+00:00" + "time": "2017-06-19T01:22:40+00:00" }, { "name": "nesbot/carbon", @@ -614,20 +625,20 @@ "datetime", "time" ], - "time": "2017-02-06 22:02:47" + "time": "2017-02-06T22:02:47+00:00" }, { "name": "paragonie/random_compat", - "version": "v2.0.10", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", - "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -662,7 +673,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13T16:27:32+00:00" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "psr/container", @@ -711,7 +722,7 @@ "container-interop", "psr" ], - "time": "2017-06-28 15:35:32" + "time": "2017-06-28T15:35:32+00:00" }, { "name": "psr/log", @@ -758,7 +769,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "psr/simple-cache", @@ -766,12 +777,12 @@ "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { @@ -806,7 +817,7 @@ "psr-16", "simple-cache" ], - "time": "2017-01-02 13:31:39" + "time": "2017-10-23T01:57:42+00:00" }, { "name": "ramsey/uuid", @@ -814,12 +825,12 @@ "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e" + "reference": "ca4154648d3d4348bce636a43a72df3f9cd9134c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", - "reference": "0ef23d1b10cf1bc576e9d865a7e9c47982c5715e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ca4154648d3d4348bce636a43a72df3f9cd9134c", + "reference": "ca4154648d3d4348bce636a43a72df3f9cd9134c", "shasum": "" }, "require": { @@ -831,7 +842,7 @@ }, "require-dev": { "apigen/apigen": "^4.1", - "codeception/aspect-mock": "^1.0 | ^2.0", + "codeception/aspect-mock": "^1.0 | ~2.0.0", "doctrine/annotations": "~1.2.0", "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", "ircmaxell/random-lib": "^1.1", @@ -839,7 +850,7 @@ "mockery/mockery": "^0.9.4", "moontoast/math": "^1.1", "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "phpunit/phpunit": "^4.7|^5.0", "satooshi/php-coveralls": "^0.6.1", "squizlabs/php_codesniffer": "^2.3" }, @@ -888,7 +899,7 @@ "identifier", "uuid" ], - "time": "2017-08-04 13:39:04" + "time": "2017-11-09T03:25:25+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -896,12 +907,12 @@ "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "1a2f9df896c8bfa6e22e8e1a78cca637c6f70613" + "reference": "0dbb301100b3312e4c2570f1a6ed70760b8c5e76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/1a2f9df896c8bfa6e22e8e1a78cca637c6f70613", - "reference": "1a2f9df896c8bfa6e22e8e1a78cca637c6f70613", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0dbb301100b3312e4c2570f1a6ed70760b8c5e76", + "reference": "0dbb301100b3312e4c2570f1a6ed70760b8c5e76", "shasum": "" }, "require": { @@ -943,7 +954,7 @@ "mail", "mailer" ], - "time": "2017-08-29 20:44:31" + "time": "2017-11-19T08:49:26+00:00" }, { "name": "symfony/console", @@ -951,12 +962,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "bab3bc775e2b175dcc0ada0169c6b8ae0efb6a6b" + "reference": "72b0921e1c59928b61be8b7a7a98ae5a4f2a02e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/bab3bc775e2b175dcc0ada0169c6b8ae0efb6a6b", - "reference": "bab3bc775e2b175dcc0ada0169c6b8ae0efb6a6b", + "url": "https://api.github.com/repos/symfony/console/zipball/72b0921e1c59928b61be8b7a7a98ae5a4f2a02e1", + "reference": "72b0921e1c59928b61be8b7a7a98ae5a4f2a02e1", "shasum": "" }, "require": { @@ -965,13 +976,13 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.3", + "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.3|~4.0", - "symfony/dependency-injection": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/lock": "~3.4|~4.0", "symfony/process": "~3.3|~4.0" @@ -1012,7 +1023,7 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2017-08-31 09:02:44" + "time": "2017-11-19T18:41:20+00:00" }, { "name": "symfony/css-selector", @@ -1020,12 +1031,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "7857a524c7e23c59be49261e196337d1444f0f02" + "reference": "7134b93e90ea7e7881fcb2da006d21b4c5f31908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7857a524c7e23c59be49261e196337d1444f0f02", - "reference": "7857a524c7e23c59be49261e196337d1444f0f02", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7134b93e90ea7e7881fcb2da006d21b4c5f31908", + "reference": "7134b93e90ea7e7881fcb2da006d21b4c5f31908", "shasum": "" }, "require": { @@ -1065,7 +1076,7 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2017-08-03 09:34:20" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/debug", @@ -1073,12 +1084,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "f43bc2e05d4ac6fb36d6931fe41bd0a6d5c21a2b" + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/f43bc2e05d4ac6fb36d6931fe41bd0a6d5c21a2b", - "reference": "f43bc2e05d4ac6fb36d6931fe41bd0a6d5c21a2b", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", "shasum": "" }, "require": { @@ -1121,7 +1132,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2017-08-29 21:00:42" + "time": "2017-11-21T09:01:46+00:00" }, { "name": "symfony/event-dispatcher", @@ -1129,12 +1140,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "96440b5f3392aa7415ed720a290ceb7dcae3b00c" + "reference": "f14edd74c27abb2f59efb7b8ee41a27e969c5f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/96440b5f3392aa7415ed720a290ceb7dcae3b00c", - "reference": "96440b5f3392aa7415ed720a290ceb7dcae3b00c", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f14edd74c27abb2f59efb7b8ee41a27e969c5f8b", + "reference": "f14edd74c27abb2f59efb7b8ee41a27e969c5f8b", "shasum": "" }, "require": { @@ -1157,7 +1168,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { @@ -1184,7 +1195,7 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2017-06-12 18:12:26" + "time": "2017-11-21T17:31:29+00:00" }, { "name": "symfony/finder", @@ -1192,12 +1203,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "bf0450cfe7282c5f06539c4733ba64273e91e918" + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/bf0450cfe7282c5f06539c4733ba64273e91e918", - "reference": "bf0450cfe7282c5f06539c4733ba64273e91e918", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", "shasum": "" }, "require": { @@ -1233,7 +1244,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2017-08-03 09:34:20" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/http-foundation", @@ -1241,17 +1252,18 @@ "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "9cc8019b5d013f3b0dda7f1ba5596677229562b9" + "reference": "c62265478321efbd21cf6980842aef4745257808" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9cc8019b5d013f3b0dda7f1ba5596677229562b9", - "reference": "9cc8019b5d013f3b0dda7f1ba5596677229562b9", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/c62265478321efbd21cf6980842aef4745257808", + "reference": "c62265478321efbd21cf6980842aef4745257808", "shasum": "" }, "require": { "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-mbstring": "~1.1" + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php70": "~1.6" }, "require-dev": { "symfony/expression-language": "~2.8|~3.0|~4.0" @@ -1286,7 +1298,7 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2017-08-22 20:48:27" + "time": "2017-11-13T18:20:08+00:00" }, { "name": "symfony/http-kernel", @@ -1294,12 +1306,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "22f894031455390a0dd54f80c6592940301caef2" + "reference": "ee44ac332fa835a399459742a06bd19cd0320d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/22f894031455390a0dd54f80c6592940301caef2", - "reference": "22f894031455390a0dd54f80c6592940301caef2", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ee44ac332fa835a399459742a06bd19cd0320d40", + "reference": "ee44ac332fa835a399459742a06bd19cd0320d40", "shasum": "" }, "require": { @@ -1307,7 +1319,7 @@ "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0|~4.0", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "~3.3|~4.0" + "symfony/http-foundation": "^3.3.11|~4.0" }, "conflict": { "symfony/config": "<2.8", @@ -1315,6 +1327,9 @@ "symfony/var-dumper": "<3.3", "twig/twig": "<1.34|<2.4,>=2" }, + "provide": { + "psr/log-implementation": "1.0" + }, "require-dev": { "psr/cache": "~1.0", "symfony/browser-kit": "~2.8|~3.0|~4.0", @@ -1327,7 +1342,7 @@ "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", "symfony/process": "~2.8|~3.0|~4.0", - "symfony/routing": "~2.8|~3.0|~4.0", + "symfony/routing": "~3.4|~4.0", "symfony/stopwatch": "~2.8|~3.0|~4.0", "symfony/templating": "~2.8|~3.0|~4.0", "symfony/translation": "~2.8|~3.0|~4.0", @@ -1371,7 +1386,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2017-08-30 14:25:32" + "time": "2017-11-21T18:27:13+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1379,12 +1394,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7c8fae0ac1d216eb54349e6a8baa57d515fe8803", - "reference": "7c8fae0ac1d216eb54349e6a8baa57d515fe8803", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1396,7 +1411,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1430,7 +1445,66 @@ "portable", "shim" ], - "time": "2017-06-14 15:44:48" + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", + "reference": "0442b9c0596610bd24ae7b5f0a6cdbbc16d9fcff", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", @@ -1438,12 +1512,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "9794f948d9af3be0157185051275d78b24d68b92" + "reference": "c1638ca1865a54e036ec78d209a72660a5d8ec8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9794f948d9af3be0157185051275d78b24d68b92", - "reference": "9794f948d9af3be0157185051275d78b24d68b92", + "url": "https://api.github.com/repos/symfony/process/zipball/c1638ca1865a54e036ec78d209a72660a5d8ec8b", + "reference": "c1638ca1865a54e036ec78d209a72660a5d8ec8b", "shasum": "" }, "require": { @@ -1479,7 +1553,7 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2017-08-03 09:34:20" + "time": "2017-11-13T18:20:08+00:00" }, { "name": "symfony/routing", @@ -1487,12 +1561,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "a7dbe78a94c75b99475aebb0c0d77bfaf434ee4c" + "reference": "fb3865c894f5dd00e7364f2a1cf30f91bd146628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/a7dbe78a94c75b99475aebb0c0d77bfaf434ee4c", - "reference": "a7dbe78a94c75b99475aebb0c0d77bfaf434ee4c", + "url": "https://api.github.com/repos/symfony/routing/zipball/fb3865c894f5dd00e7364f2a1cf30f91bd146628", + "reference": "fb3865c894f5dd00e7364f2a1cf30f91bd146628", "shasum": "" }, "require": { @@ -1501,7 +1575,7 @@ "conflict": { "symfony/config": "<2.8", "symfony/dependency-injection": "<3.3", - "symfony/yaml": "<3.3" + "symfony/yaml": "<3.4" }, "require-dev": { "doctrine/annotations": "~1.0", @@ -1511,7 +1585,7 @@ "symfony/dependency-injection": "~3.3|~4.0", "symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/http-foundation": "~2.8|~3.0|~4.0", - "symfony/yaml": "~3.3|~4.0" + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -1557,7 +1631,7 @@ "uri", "url" ], - "time": "2017-08-29 22:38:20" + "time": "2017-11-19T20:09:36+00:00" }, { "name": "symfony/translation", @@ -1565,12 +1639,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f9448c88e4fee566626d4bea08948535b714ffd4" + "reference": "34c2376013f9e151b2e7f935a77e42586b28d8c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f9448c88e4fee566626d4bea08948535b714ffd4", - "reference": "f9448c88e4fee566626d4bea08948535b714ffd4", + "url": "https://api.github.com/repos/symfony/translation/zipball/34c2376013f9e151b2e7f935a77e42586b28d8c6", + "reference": "34c2376013f9e151b2e7f935a77e42586b28d8c6", "shasum": "" }, "require": { @@ -1580,7 +1654,7 @@ "conflict": { "symfony/config": "<2.8", "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.3" + "symfony/yaml": "<3.4" }, "require-dev": { "psr/log": "~1.0", @@ -1588,7 +1662,7 @@ "symfony/dependency-injection": "~3.4|~4.0", "symfony/finder": "~2.8|~3.0|~4.0", "symfony/intl": "^2.8.18|^3.2.5|~4.0", - "symfony/yaml": "~3.3|~4.0" + "symfony/yaml": "~3.4|~4.0" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -1625,7 +1699,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2017-08-29 14:37:52" + "time": "2017-11-07T14:20:24+00:00" }, { "name": "symfony/var-dumper", @@ -1633,12 +1707,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4e540dbcb5f7872b31504e1b0665893a73fef431" + "reference": "1a4f435b9b9347f8dcf2692f756620dd20d9c1b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4e540dbcb5f7872b31504e1b0665893a73fef431", - "reference": "4e540dbcb5f7872b31504e1b0665893a73fef431", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1a4f435b9b9347f8dcf2692f756620dd20d9c1b4", + "reference": "1a4f435b9b9347f8dcf2692f756620dd20d9c1b4", "shasum": "" }, "require": { @@ -1694,7 +1768,7 @@ "debug", "dump" ], - "time": "2017-08-31 21:57:46" + "time": "2017-11-07T14:28:09+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -1749,24 +1823,24 @@ "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "3dd3d8f90e6604e75cca48ec32b033b50b05135b" + "reference": "fa9d523a4979028c3d8536fcdcf84f00940edc74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3dd3d8f90e6604e75cca48ec32b033b50b05135b", - "reference": "3dd3d8f90e6604e75cca48ec32b033b50b05135b", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/fa9d523a4979028c3d8536fcdcf84f00940edc74", + "reference": "fa9d523a4979028c3d8536fcdcf84f00940edc74", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.5-dev" } }, "autoload": { @@ -1791,7 +1865,7 @@ "env", "environment" ], - "time": "2017-08-08 20:02:34" + "time": "2017-11-18T18:27:11+00:00" } ], "packages-dev": [ @@ -1801,23 +1875,21 @@ "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + "reference": "7af8066e48b8a4cbd90849bbe9234ab444057968" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", - "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/7af8066e48b8a4cbd90849bbe9234ab444057968", + "reference": "7af8066e48b8a4cbd90849bbe9234ab444057968", "shasum": "" }, "require": { "php": "^7.1" }, "require-dev": { - "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "^6.2.3", - "squizlabs/php_codesniffer": "^3.0.2" + "phpunit/phpunit": "^6.2.3" }, "type": "library", "extra": { @@ -1847,7 +1919,7 @@ "constructor", "instantiate" ], - "time": "2017-07-22T11:58:36+00:00" + "time": "2017-09-19T12:41:22+00:00" }, { "name": "fzaninotto/faker", @@ -1855,12 +1927,12 @@ "source": { "type": "git", "url": "https://github.com/fzaninotto/Faker.git", - "reference": "c3f82846fdfd1760b277767ac21426ca030f795e" + "reference": "9cda1a418ca4b2b71c9b921ebaea6c2e61e270b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/c3f82846fdfd1760b277767ac21426ca030f795e", - "reference": "c3f82846fdfd1760b277767ac21426ca030f795e", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/9cda1a418ca4b2b71c9b921ebaea6c2e61e270b4", + "reference": "9cda1a418ca4b2b71c9b921ebaea6c2e61e270b4", "shasum": "" }, "require": { @@ -1868,7 +1940,7 @@ }, "require-dev": { "ext-intl": "*", - "phpunit/phpunit": "^4.0 || ^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", "squizlabs/php_codesniffer": "^1.5" }, "type": "library", @@ -1897,7 +1969,51 @@ "faker", "fixtures" ], - "time": "2017-08-30T09:14:20+00:00" + "time": "2017-11-13T07:51:09+00:00" + }, + { + "name": "mtdowling/cron-expression", + "version": "v1.2.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/mtdowling/cron-expression.git", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad", + "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "time": "2017-01-23T04:29:33+00:00" }, { "name": "myclabs/deep-copy", @@ -1905,33 +2021,36 @@ "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "b270f34b740863c588a3f65f5ab7a3afa38a81e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b270f34b740863c588a3f65f5ab7a3afa38a81e5", + "reference": "b270f34b740863c588a3f65f5ab7a3afa38a81e5", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -1939,7 +2058,7 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2017-10-20T11:34:00+00:00" }, { "name": "orchestra/testbench", @@ -1947,23 +2066,23 @@ "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "d0e35b20a45e6a1805f6f800932f339b5fbbc2ac" + "reference": "7742e765c268066a77fcbe62a7579a1a75b9b407" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/d0e35b20a45e6a1805f6f800932f339b5fbbc2ac", - "reference": "d0e35b20a45e6a1805f6f800932f339b5fbbc2ac", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/7742e765c268066a77fcbe62a7579a1a75b9b407", + "reference": "7742e765c268066a77fcbe62a7579a1a75b9b407", "shasum": "" }, "require": { - "laravel/framework": "dev-master", - "orchestra/testbench-core": "dev-master", - "php": ">=7.0", + "laravel/framework": "~5.6.0", + "orchestra/testbench-core": "~3.6.0", + "php": ">=7.1", "phpunit/phpunit": "~6.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "orchestra/database": "dev-master" + "mockery/mockery": "~1.0", + "orchestra/database": "~3.6.0" }, "suggest": { "orchestra/testbench-browser-kit": "Allow to use legacy BrowserKit for testing (~3.6)." @@ -1995,7 +2114,7 @@ "orchestral", "testing" ], - "time": "2017-08-30T23:25:16+00:00" + "time": "2017-11-09T02:12:37+00:00" }, { "name": "orchestra/testbench-core", @@ -2003,29 +2122,30 @@ "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "42fae0a87c158197ae2bcf675ccf6a81d36dff78" + "reference": "895fcac0411a0af35c6a6d2f89b60e7fa7502d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/42fae0a87c158197ae2bcf675ccf6a81d36dff78", - "reference": "42fae0a87c158197ae2bcf675ccf6a81d36dff78", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/895fcac0411a0af35c6a6d2f89b60e7fa7502d4a", + "reference": "895fcac0411a0af35c6a6d2f89b60e7fa7502d4a", "shasum": "" }, "require": { "fzaninotto/faker": "~1.4", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { - "laravel/framework": "dev-master", - "mockery/mockery": "^0.9.4", - "orchestra/database": "dev-master", + "laravel/framework": "~5.6.0", + "mockery/mockery": "~1.0", + "orchestra/database": "~3.6.0", "phpunit/phpunit": "~6.0" }, "suggest": { - "laravel/framework": "Required for testing (dev-master).", - "mockery/mockery": "Allow to use Mockery for testing (^0.9.4).", - "orchestra/database": "Allow to use --realpath migration for testing (dev-master).", - "orchestra/testbench-browser-kit": "Allow to use legacy BrowserKit for testing (dev-master).", + "laravel/framework": "Required for testing (~5.6.0).", + "mockery/mockery": "Allow to use Mockery for testing (~1.0).", + "orchestra/database": "Allow to use --realpath migration for testing (~3.6).", + "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (~3.6).", + "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (~3.6).", "phpunit/phpunit": "Allow to use PHPUnit for testing (~6.0)." }, "type": "library", @@ -2060,7 +2180,7 @@ "orchestral", "testing" ], - "time": "2017-08-30T23:38:48+00:00" + "time": "2017-11-21T15:21:32+00:00" }, { "name": "phar-io/manifest", @@ -2170,12 +2290,12 @@ "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "a046af61c36e9162372f205de091a1cab7340f1c" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a046af61c36e9162372f205de091a1cab7340f1c", - "reference": "a046af61c36e9162372f205de091a1cab7340f1c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { @@ -2216,25 +2336,25 @@ "reflection", "static analysis" ], - "time": "2017-04-30T11:58:12+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.2.3", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "86e24012a3139b42a7b71155cfaa325389f00f1f" + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/86e24012a3139b42a7b71155cfaa325389f00f1f", - "reference": "86e24012a3139b42a7b71155cfaa325389f00f1f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0@dev", + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, @@ -2261,7 +2381,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-29T19:37:41+00:00" + "time": "2017-11-10T14:09:06+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -2316,24 +2436,24 @@ "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "420d44c5534bbf269e85e6213446e8284d53c6c7" + "reference": "ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/420d44c5534bbf269e85e6213446e8284d53c6c7", - "reference": "420d44c5534bbf269e85e6213446e8284d53c6c7", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace", + "reference": "ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", "sebastian/comparator": "^1.1|^2.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { @@ -2371,7 +2491,7 @@ "spy", "stub" ], - "time": "2017-07-19T07:44:25+00:00" + "time": "2017-11-07T12:00:44+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2379,12 +2499,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "77a1ba8076365f943e2a3d75573b6c9822840ac6" + "reference": "f1f3005e3154546506385f4fc958b9bd799ecbdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/77a1ba8076365f943e2a3d75573b6c9822840ac6", - "reference": "77a1ba8076365f943e2a3d75573b6c9822840ac6", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1f3005e3154546506385f4fc958b9bd799ecbdd", + "reference": "f1f3005e3154546506385f4fc958b9bd799ecbdd", "shasum": "" }, "require": { @@ -2435,7 +2555,7 @@ "testing", "xunit" ], - "time": "2017-08-25T06:32:04+00:00" + "time": "2017-11-16T09:51:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -2452,7 +2572,7 @@ "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "type": "library", "extra": { @@ -2580,12 +2700,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0" + "reference": "7aad36cd1f32bbbd09a9a5efc596d00039ecb224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9a02332089ac48e704c70f6cefed30c224e3c0b0", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7aad36cd1f32bbbd09a9a5efc596d00039ecb224", + "reference": "7aad36cd1f32bbbd09a9a5efc596d00039ecb224", "shasum": "" }, "require": { @@ -2621,7 +2741,7 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20T05:47:52+00:00" + "time": "2017-11-16T09:53:19+00:00" }, { "name": "phpunit/phpunit", @@ -2629,12 +2749,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827" + "reference": "f7c8195d576e2e2eef6be0a0cf9d5dd6852a2220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827", - "reference": "e6e7085fbbd2e25f4ca128ac30c1b0d3dd4ef827", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f7c8195d576e2e2eef6be0a0cf9d5dd6852a2220", + "reference": "f7c8195d576e2e2eef6be0a0cf9d5dd6852a2220", "shasum": "" }, "require": { @@ -2652,8 +2772,8 @@ "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^4.0.3", - "sebastian/comparator": "^2.0.2", + "phpunit/phpunit-mock-objects": "^5.0", + "sebastian/comparator": "^2.1", "sebastian/diff": "^2.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", @@ -2679,7 +2799,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.4.x-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -2705,7 +2825,7 @@ "testing", "xunit" ], - "time": "2017-09-01T08:39:38+00:00" + "time": "2017-11-16T10:00:59+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -2713,12 +2833,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0" + "reference": "9388a2dd1b779d7e9e49802dcb44c0e4e7dc2a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/2f789b59ab89669015ad984afa350c4ec577ade0", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/9388a2dd1b779d7e9e49802dcb44c0e4e7dc2a1a", + "reference": "9388a2dd1b779d7e9e49802dcb44c0e4e7dc2a1a", "shasum": "" }, "require": { @@ -2731,7 +2851,7 @@ "phpunit/phpunit": "<6.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^6.5" }, "suggest": { "ext-soap": "*" @@ -2739,7 +2859,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { @@ -2764,7 +2884,7 @@ "mock", "xunit" ], - "time": "2017-08-03T14:08:16+00:00" + "time": "2017-11-16T15:02:34+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -2817,21 +2937,21 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fb3213355da37bf91569ca7a944af19bc57b80e9" + "reference": "96f0814e52a4266030eac2075ceb56d27f0deddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fb3213355da37bf91569ca7a944af19bc57b80e9", - "reference": "fb3213355da37bf91569ca7a944af19bc57b80e9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/96f0814e52a4266030eac2075ceb56d27f0deddd", + "reference": "96f0814e52a4266030eac2075ceb56d27f0deddd", "shasum": "" }, "require": { "php": "^7.0", "sebastian/diff": "^2.0", - "sebastian/exporter": "^3.0" + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { @@ -2873,7 +2993,7 @@ "compare", "equality" ], - "time": "2017-08-20T14:03:32+00:00" + "time": "2017-11-16T09:46:37+00:00" }, { "name": "sebastian/diff", @@ -2881,12 +3001,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "52a3981380ae504aa493579408fe4bc3ba3894d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/52a3981380ae504aa493579408fe4bc3ba3894d6", + "reference": "52a3981380ae504aa493579408fe4bc3ba3894d6", "shasum": "" }, "require": { @@ -2925,7 +3045,7 @@ "keywords": [ "diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2017-11-16T09:47:25+00:00" }, { "name": "sebastian/environment", @@ -2933,12 +3053,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "reference": "ceaeb5d93eb3cf16184957e7141bd34a1edd44e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/ceaeb5d93eb3cf16184957e7141bd34a1edd44e1", + "reference": "ceaeb5d93eb3cf16184957e7141bd34a1edd44e1", "shasum": "" }, "require": { @@ -2975,7 +3095,7 @@ "environment", "hhvm" ], - "time": "2017-07-01T08:51:00+00:00" + "time": "2017-11-16T09:47:49+00:00" }, { "name": "sebastian/exporter", @@ -2983,12 +3103,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "573f8b71a29cc8afa5f8285d1aee4b4d52717637" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/573f8b71a29cc8afa5f8285d1aee4b4d52717637", + "reference": "573f8b71a29cc8afa5f8285d1aee4b4d52717637", "shasum": "" }, "require": { @@ -3042,7 +3162,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2017-11-16T09:48:09+00:00" }, { "name": "sebastian/global-state", @@ -3050,12 +3170,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "a27e666314b2df0ab686c2abdee43ffbda48ac10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a27e666314b2df0ab686c2abdee43ffbda48ac10", + "reference": "a27e666314b2df0ab686c2abdee43ffbda48ac10", "shasum": "" }, "require": { @@ -3093,7 +3213,7 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "time": "2017-11-16T09:49:42+00:00" }, { "name": "sebastian/object-enumerator", @@ -3101,12 +3221,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "a496797f3bd6821bfe2acb594e0901dfb00572dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/a496797f3bd6821bfe2acb594e0901dfb00572dd", + "reference": "a496797f3bd6821bfe2acb594e0901dfb00572dd", "shasum": "" }, "require": { @@ -3140,7 +3260,7 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "time": "2017-11-16T09:50:04+00:00" }, { "name": "sebastian/object-reflector", @@ -3148,12 +3268,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "e1b86d7bde734bd7d05454ea964eb8283a3259b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/e1b86d7bde734bd7d05454ea964eb8283a3259b6", + "reference": "e1b86d7bde734bd7d05454ea964eb8283a3259b6", "shasum": "" }, "require": { @@ -3185,7 +3305,7 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "time": "2017-11-16T09:51:26+00:00" }, { "name": "sebastian/recursion-context", @@ -3193,12 +3313,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "a0e54bc9bf04e2c5b302236984cebc277631f0f1" + "reference": "0f7f5eb7697036c570aff6812a8efe60c417725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/a0e54bc9bf04e2c5b302236984cebc277631f0f1", - "reference": "a0e54bc9bf04e2c5b302236984cebc277631f0f1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0f7f5eb7697036c570aff6812a8efe60c417725e", + "reference": "0f7f5eb7697036c570aff6812a8efe60c417725e", "shasum": "" }, "require": { @@ -3238,7 +3358,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-07T15:09:59+00:00" + "time": "2017-11-16T10:04:08+00:00" }, { "name": "sebastian/resource-operations", diff --git a/readme.md b/readme.md index 55d4c85..14eb8be 100644 --- a/readme.md +++ b/readme.md @@ -1,11 +1,6 @@ # Laravel HTML Cache -

- - - - -

+[ ![Build](https://travis-ci.com/jkniest/HTMLCache.svg?token=V2HFFCLc6NVnxsqjqD9v&branch=develop) ](https://travis-ci.com/jkniest/HTMLCache) [![Latest Stable Version](https://poser.pugx.org/jkniest/htmlcache/v/stable)](https://packagist.org/packages/jkniest/htmlcache) [![Total Downloads](https://poser.pugx.org/jkniest/htmlcache/downloads)](https://packagist.org/packages/jkniest/htmlcache) [![License](https://poser.pugx.org/jkniest/htmlcache/license)](https://packagist.org/packages/jkniest/htmlcache) --- @@ -24,14 +19,17 @@ __One benefit against much other html caches:__ It will also cache the pages bas 2. [Using](#using) 2.1. [For all web routes](#for-all-web-routes) 2.2. [Only for specific routes](#only-for-specific-routes) -3. [Configuration](#configuration) -3.1. [Enable / Disable cache](#enable--disable-cache) -3.2. [Caching prefix](#caching-prefix) -3.3. [Caching time](#caching-time) -3.4. [User specific caching](#user-specific) -4. [Ignoring routes](#ignoring-routes) -5. [Clear cache](#clear-cache) -6. [Override middlware](#override-middlware) +3. [When will pages not be cached?](#when-will-pages-not-be-cached) +4. [Configuration](#configuration) +4.1. [Enable / Disable cache](#enable--disable-cache) +4.2. [Caching prefix](#caching-prefix) +4.3. [Caching time](#caching-time) +4.4. [User specific caching](#user-specific) +5. [Ignoring routes](#ignoring-routes) +6. [Clear cache](#clear-cache) +7. [Override middlware](#override-middlware) +8. [Roadmap](#roadmap) +9. [License](#license) --- @@ -44,16 +42,12 @@ The installation process is very straight-forward. It's like any other laravel p composer require jkniest/htmlcache ``` -> If you are using __laravel 5.5 or higher__, that's it. The package is now fully installed. Now see [Using](#using) - -### Laravel < 5.5: - 2) Add the package service provider in your packages configuration. Open up the `config/app.php` file and the following into your `providers` array: ```php 'providers' => [ - // ... - JKniest\HtmlCache\HtmlCacheServiceProvider::class, - // ... + // ... + JKniest\HtmlCache\HtmlCacheServiceProvider::class, + // ... ] ``` @@ -116,6 +110,19 @@ public function __construct() } ``` +--- + +## When will pages not be cached? + +In a few cases the pages will not be cached: + +1. If the HTTP method is not `GET` +2. If the HTMLCache is disabled in the configuration +3. If the path of the current page is ignored in the configuration +4. If there are validation errors +5. If the status code is not 200 + + --- ## Configuration @@ -262,6 +269,15 @@ Of course you can always override any other method (like the `Handle` method its --- +## Roadmap + +These are features that are planned for to upcoming versions. If you have any suggestion please let me know via issues or e-mail me at `contact@jkniest.de` + +### Version 1.1.0 +- Add native pagination support (so that the page GET parameter will also be cached) + +--- + ## License Copyright 2017 Jordan Kniest diff --git a/src/Http/Middleware/CacheHtml.php b/src/Http/Middleware/CacheHtml.php index eb51226..ebb34cc 100644 --- a/src/Http/Middleware/CacheHtml.php +++ b/src/Http/Middleware/CacheHtml.php @@ -35,12 +35,11 @@ class CacheHtml public function handle(Request $request, $next) { if ($this->isEnabled($request)) { - $key = $this->getCacheKey($request->path()); - $time = config('htmlcache.minutes'); + $content = $this->getContent($request, $next); - $content = Cache::remember($key, $time, function () use ($next, $request) { - return ($next($request))->getContent(); - }); + if ($content === null) { + return $next($request); + } return response($content); } @@ -71,6 +70,7 @@ protected function getCacheKey(string $page) if (config('htmlcache.user_specific')) { $id = Auth::check() ? Auth::id() : -1; + return "{$prefix}{$page}_{$locale}_{$id}"; } @@ -89,6 +89,7 @@ protected function getIgnored() if ($value === '/') { return $value; } + return trim($value, '/'); }, config('htmlcache.ignored')); } @@ -113,4 +114,35 @@ protected function isEnabled(Request $request) !$request->is(... $this->getIgnored()) ); } + + /** + * Get the original or the cached response. If there is now cached version for the + * current page it will run the full request cycle and cache the given response, if + * the returned status code is equals to 200. + * + * Otherwise, if there is a cache version, it will not run the whole request cycle + * and simply return the cached html / response. + * + * @param Request $request The incoming request + * @param callable $next The next middleware + * + * @return null|string + */ + protected function getContent(Request $request, callable $next) + { + $key = $this->getCacheKey($request->path()); + $time = config('htmlcache.minutes'); + + $content = Cache::remember($key, $time, function () use ($next, $request) { + $response = $next($request); + + if ($response->getStatusCode() !== 200) { + return null; + } + + return $response->getContent(); + }); + + return $content; + } } diff --git a/tests/BaseTestCase.php b/tests/BaseTestCase.php index f727fe7..2f76b7d 100644 --- a/tests/BaseTestCase.php +++ b/tests/BaseTestCase.php @@ -21,6 +21,14 @@ protected function setUp() Route::get('/another', function () { return 'Another value: ' . request('test'); }); + Route::get('/error', function () { + return response('Error: ' . request('test'), 500); + }); + Route::get('/validation', function () { + request()->validate([ + 'name' => 'required' + ]); + }); }); } diff --git a/tests/Feature/CacheTest.php b/tests/Feature/CacheTest.php index 7f606d9..0adc0c5 100644 --- a/tests/Feature/CacheTest.php +++ b/tests/Feature/CacheTest.php @@ -156,4 +156,72 @@ public function it_can_ignore_specific_routes() $response->assertStatus(200)->assertSee('world'); $response->assertDontSee('hello'); } + + /** @test */ + public function it_will_ignore_routes_that_are_not_returning_a_200_status_code() + { + // When: The user sends a GET request to a page which returns a 500 status code + $response = $this->get('/error?test=Hello'); + + // Then: They should see the word 'Hello' + $response->assertSee('Hello'); + + // When: The user makes another request to the same url with another parameter + $responseB = $this->get('/error?test=World'); + + // Then: They should not see Hello, but World + $responseB->assertDontSee('Hello'); + $responseB->assertSee('World'); + + // Also: The cache key should not have been generated (or at least with the null content) + $this->assertNull(cache('test_error_en')); + } + + /** @test */ + public function it_will_not_cache_any_pages_if_the_error_bag_is_not_empty() + { + // Given: The user was earlier on the example page + session()->setPreviousUrl(url('/example')); + + // When: The user sends a GET request to a page which will throw an validation exception + $response = $this->get('/validation'); + + // Then: The session should have an validation error + $response->assertSessionHasErrors(['name']); + + // And: The user should be redirected to the example page again + $response->assertRedirect('/example'); + + // And: The cache key should not have been generated (or at least with the null content) + $this->assertNull(cache('test_example_en')); + } + + /** @test */ + public function it_will_not_load_the_cache_of_a_page_if_the_error_bag_is_not_empty() + { + // Given: The user visited the example before + $response = $this->get('/example?test=Hello'); + + // And: This page was being cached + $this->assertNotNull(cache('test_example_en')); + + // Also: The user should see Hello + $response->assertSee('Hello'); + + // Given: The user was earlier on the example page + session()->setPreviousUrl(url('/example')); + + // When: The user sends a GET request to a page which will throw an validation exception + $response = $this->get('/validation'); + + // Then: The session should have an validation error + $response->assertSessionHasErrors(['name']); + + // And: The user should be redirected to the example page again + $response->assertRedirect('/example'); + + // And: The user should not see the Hello + $response->assertDontSee('Hello'); + } + } \ No newline at end of file