├── .coveralls.yml ├── .gitignore ├── .travis.yml ├── README.md ├── codeception.yml ├── composer.json ├── composer.lock ├── phpcs.sh ├── src ├── interfaces │ ├── BusinessObject.php │ └── FormObject.php └── models │ └── AbstractService.php └── tests ├── _data └── .gitkeep ├── _output └── .gitignore ├── _support ├── AcceptanceTester.php ├── FunctionalTester.php ├── Helper │ ├── Acceptance.php │ ├── Functional.php │ └── Unit.php ├── UnitTester.php ├── _generated │ └── .gitignore └── base │ ├── AbstractFormTest.php │ ├── AbstractServiceTest.php │ ├── MockConfig.php │ ├── MockTrait.php │ ├── StubbedForm.php │ ├── StubbedModel.php │ ├── StubbedService.php │ └── Unit.php ├── acceptance.suite.yml ├── functional.suite.yml ├── unit.suite.yml └── unit ├── MockConfigTest.php ├── MockTraitTest.php ├── _bootstrap.php └── models └── AbstractServiceTest.php /.coveralls.yml: -------------------------------------------------------------------------------- 1 | service_name: travis-ci 2 | 3 | coverage_clover: tests/_output/coverage.xml 4 | json_path: tests/_output/unit.json -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /tests/runtime/web/assets/ 3 | !/tests/runtime/web/assets/.gitkeep 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.1 5 | - 7.2 6 | - 7.3 7 | 8 | # to support hhvm 9 | dist: trusty 10 | 11 | # faster builds on new travis setup not using sudo 12 | sudo: false 13 | 14 | # cache vendor dirs 15 | cache: 16 | directories: 17 | - $HOME/.composer/cache 18 | 19 | env: 20 | matrix: 21 | - COMPOSER_OPTIONS="--prefer-lowest --prefer-stable" 22 | - COMPOSER_OPTIONS="" 23 | 24 | install: 25 | - travis_retry composer self-update && composer --version 26 | - export PATH="$HOME/.composer/vendor/bin:$PATH" 27 | - travis_retry composer install --prefer-dist --no-interaction 28 | 29 | script: 30 | - sh ./phpcs.sh 31 | - php ./vendor/bin/codecept run unit -d --coverage --coverage-xml 32 | 33 | after_success: 34 | - php ./vendor/bin/php-coveralls -v --exclude-no-stmt -c .coveralls.yml 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/albertborsos/yii2-ddd.svg?branch=master)](https://travis-ci.org/albertborsos/yii2-ddd) 2 | [![Coverage Status](https://coveralls.io/repos/github/albertborsos/yii2-ddd/badge.svg)](https://coveralls.io/github/albertborsos/yii2-ddd) 3 | 4 | DDD Classes for Yii 2.0 5 | ======================= 6 | Classes for a Domain-Driven Design inspired workflow with Yii 2.0 Framework 7 | 8 | Installation 9 | ------------ 10 | 11 | The preferred way to install this extension is through [composer](http://getcomposer.org/download/). 12 | 13 | Run 14 | 15 | ``` 16 | php composer.phar require --prefer-dist albertborsos/yii2-ddd 17 | ``` 18 | 19 | to the require section of your `composer.json` file. 20 | 21 | Usage 22 | ----- 23 | 24 | Lets see an example with a standard `App` model which is an implementation of `\yii\db\ActiveRecord` and generated via `gii`. 25 | I recommend to do not make any modification with this class, but make it `abstract` to prevent direct usages. 26 | 27 | Then create a business model which extends our abstract active record class and implements `BusinessObject` interface. 28 | Every business logic will be implemented in this class. 29 | 30 | ```php 31 | ['in', 'range' => ['en', 'de', 'hu']]], 70 | ]; 71 | } 72 | } 73 | 74 | ``` 75 | 76 | And a simple example for a `service`. Services are expecting that the values in the `FormObject` are valid values. 77 | That is why it is just store the values. The validation will be handled in the controller. 78 | 79 | ```php 80 | load($this->getForm()->attributes, ''); 101 | 102 | if ($model->save()) { 103 | $this->assignLanguages($model->id, $this->getForm()->languages); 104 | $this->setId($model->id); 105 | 106 | return true; 107 | } 108 | } catch(\yii\db\Exception $e) { 109 | $this->getForm()->addErrors(['exception' => $e->getMessage()]); 110 | } 111 | return false; 112 | } 113 | 114 | private function assignLanguages($appId, $languageIds) 115 | { 116 | foreach ($languageIds as $languageId) { 117 | $form = new CreateAppLanguageForm([ 118 | 'app_id' => $appId, 119 | 'language_id' => $languageId, 120 | ]); 121 | 122 | if ($form->validate() === false) { 123 | throw new Exception('Unable to validate language for this app'); 124 | } 125 | 126 | $service = new CreateAppLanguageService($form); 127 | if ($service->execute() === false) { 128 | throw new Exception('Unable to save language for this app'); 129 | } 130 | } 131 | } 132 | } 133 | 134 | ``` 135 | 136 | And this is how you can use it in the controller 137 | 138 | ```php 139 | load(Yii::$app->request->post()) && $form->validate()) { 154 | $service = new CreateAppService($form); 155 | if ($service->execute()) { 156 | AlertWidget::addSuccess('App created successfully!'); 157 | return $this->redirect(['view', 'id' => $service->getId()]); 158 | } 159 | } 160 | 161 | return $this->render('create', [ 162 | 'model' => $form, 163 | ]); 164 | } 165 | } 166 | 167 | ``` 168 | -------------------------------------------------------------------------------- /codeception.yml: -------------------------------------------------------------------------------- 1 | paths: 2 | tests: tests 3 | output: tests/_output 4 | data: tests/_data 5 | support: tests/_support 6 | envs: tests/_envs 7 | actor_suffix: Tester 8 | settings: 9 | bootstrap: _bootstrap.php 10 | extensions: 11 | enabled: 12 | - Codeception\Extension\RunFailed 13 | coverage: 14 | enabled: true 15 | include: 16 | - src/* 17 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "albertborsos/yii2-ddd", 3 | "description": "Classes for Domain-Driven Development with Yii 2.0 Framework", 4 | "type": "library", 5 | "keywords": ["yii2","extension"], 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Abert Borsos", 10 | "email": "hello@borsosalbert.hu" 11 | } 12 | ], 13 | "require": { 14 | "php": ">=7.1.0", 15 | "yiisoft/yii2": "~2.0.0" 16 | }, 17 | "require-dev": { 18 | "codeception/base": "~3.0", 19 | "codeception/verify": "~1.0", 20 | "codeception/specify": "~1.0", 21 | "codeception/mockery-module": "^0.3.0", 22 | "satooshi/php-coveralls": "^2.1", 23 | "mito/yii2-coding-standards": "~2.0.0@beta" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "albertborsos\\ddd\\": "src/", 28 | "albertborsos\\ddd\\tests\\": "tests/", 29 | "albertborsos\\ddd\\tests\\support\\base\\": "tests/_support/base/" 30 | } 31 | }, 32 | "repositories": [ 33 | { 34 | "type": "composer", 35 | "url": "https://asset-packagist.org" 36 | } 37 | ] 38 | } 39 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "4bc534048e49c307bcac3f95a0b50611", 8 | "packages": [ 9 | { 10 | "name": "bower-asset/inputmask", 11 | "version": "3.3.11", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/RobinHerbots/Inputmask.git", 15 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b", 20 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b" 21 | }, 22 | "require": { 23 | "bower-asset/jquery": ">=1.7" 24 | }, 25 | "type": "bower-asset", 26 | "license": [ 27 | "http://opensource.org/licenses/mit-license.php" 28 | ] 29 | }, 30 | { 31 | "name": "bower-asset/jquery", 32 | "version": "3.4.1", 33 | "source": { 34 | "type": "git", 35 | "url": "https://github.com/jquery/jquery-dist.git", 36 | "reference": "15bc73803f76bc53b654b9fdbbbc096f56d7c03d" 37 | }, 38 | "dist": { 39 | "type": "zip", 40 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/15bc73803f76bc53b654b9fdbbbc096f56d7c03d", 41 | "reference": "15bc73803f76bc53b654b9fdbbbc096f56d7c03d" 42 | }, 43 | "type": "bower-asset", 44 | "license": [ 45 | "MIT" 46 | ] 47 | }, 48 | { 49 | "name": "bower-asset/punycode", 50 | "version": "v1.3.2", 51 | "source": { 52 | "type": "git", 53 | "url": "git@github.com:bestiejs/punycode.js.git", 54 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 55 | }, 56 | "dist": { 57 | "type": "zip", 58 | "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3", 59 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3" 60 | }, 61 | "type": "bower-asset" 62 | }, 63 | { 64 | "name": "bower-asset/yii2-pjax", 65 | "version": "2.0.7.1", 66 | "source": { 67 | "type": "git", 68 | "url": "git@github.com:yiisoft/jquery-pjax.git", 69 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 70 | }, 71 | "dist": { 72 | "type": "zip", 73 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be", 74 | "reference": "aef7b953107264f00234902a3880eb50dafc48be" 75 | }, 76 | "require": { 77 | "bower-asset/jquery": ">=1.8" 78 | }, 79 | "type": "bower-asset", 80 | "license": [ 81 | "MIT" 82 | ] 83 | }, 84 | { 85 | "name": "cebe/markdown", 86 | "version": "1.2.1", 87 | "source": { 88 | "type": "git", 89 | "url": "https://github.com/cebe/markdown.git", 90 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" 91 | }, 92 | "dist": { 93 | "type": "zip", 94 | "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", 95 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", 96 | "shasum": "" 97 | }, 98 | "require": { 99 | "lib-pcre": "*", 100 | "php": ">=5.4.0" 101 | }, 102 | "require-dev": { 103 | "cebe/indent": "*", 104 | "facebook/xhprof": "*@dev", 105 | "phpunit/phpunit": "4.1.*" 106 | }, 107 | "bin": [ 108 | "bin/markdown" 109 | ], 110 | "type": "library", 111 | "extra": { 112 | "branch-alias": { 113 | "dev-master": "1.2.x-dev" 114 | } 115 | }, 116 | "autoload": { 117 | "psr-4": { 118 | "cebe\\markdown\\": "" 119 | } 120 | }, 121 | "notification-url": "https://packagist.org/downloads/", 122 | "license": [ 123 | "MIT" 124 | ], 125 | "authors": [ 126 | { 127 | "name": "Carsten Brandt", 128 | "email": "mail@cebe.cc", 129 | "homepage": "http://cebe.cc/", 130 | "role": "Creator" 131 | } 132 | ], 133 | "description": "A super fast, highly extensible markdown parser for PHP", 134 | "homepage": "https://github.com/cebe/markdown#readme", 135 | "keywords": [ 136 | "extensible", 137 | "fast", 138 | "gfm", 139 | "markdown", 140 | "markdown-extra" 141 | ], 142 | "time": "2018-03-26T11:24:36+00:00" 143 | }, 144 | { 145 | "name": "ezyang/htmlpurifier", 146 | "version": "v4.10.0", 147 | "source": { 148 | "type": "git", 149 | "url": "https://github.com/ezyang/htmlpurifier.git", 150 | "reference": "d85d39da4576a6934b72480be6978fb10c860021" 151 | }, 152 | "dist": { 153 | "type": "zip", 154 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d85d39da4576a6934b72480be6978fb10c860021", 155 | "reference": "d85d39da4576a6934b72480be6978fb10c860021", 156 | "shasum": "" 157 | }, 158 | "require": { 159 | "php": ">=5.2" 160 | }, 161 | "require-dev": { 162 | "simpletest/simpletest": "^1.1" 163 | }, 164 | "type": "library", 165 | "autoload": { 166 | "psr-0": { 167 | "HTMLPurifier": "library/" 168 | }, 169 | "files": [ 170 | "library/HTMLPurifier.composer.php" 171 | ] 172 | }, 173 | "notification-url": "https://packagist.org/downloads/", 174 | "license": [ 175 | "LGPL" 176 | ], 177 | "authors": [ 178 | { 179 | "name": "Edward Z. Yang", 180 | "email": "admin@htmlpurifier.org", 181 | "homepage": "http://ezyang.com" 182 | } 183 | ], 184 | "description": "Standards compliant HTML filter written in PHP", 185 | "homepage": "http://htmlpurifier.org/", 186 | "keywords": [ 187 | "html" 188 | ], 189 | "time": "2018-02-23T01:58:20+00:00" 190 | }, 191 | { 192 | "name": "yiisoft/yii2", 193 | "version": "2.0.21", 194 | "source": { 195 | "type": "git", 196 | "url": "https://github.com/yiisoft/yii2-framework.git", 197 | "reference": "7e4622252c5f272373e1339a47d331e4a55e9591" 198 | }, 199 | "dist": { 200 | "type": "zip", 201 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/7e4622252c5f272373e1339a47d331e4a55e9591", 202 | "reference": "7e4622252c5f272373e1339a47d331e4a55e9591", 203 | "shasum": "" 204 | }, 205 | "require": { 206 | "bower-asset/inputmask": "~3.2.2 | ~3.3.5", 207 | "bower-asset/jquery": "3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", 208 | "bower-asset/punycode": "1.3.*", 209 | "bower-asset/yii2-pjax": "~2.0.1", 210 | "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0", 211 | "ext-ctype": "*", 212 | "ext-mbstring": "*", 213 | "ezyang/htmlpurifier": "~4.6", 214 | "lib-pcre": "*", 215 | "php": ">=5.4.0", 216 | "yiisoft/yii2-composer": "~2.0.4" 217 | }, 218 | "bin": [ 219 | "yii" 220 | ], 221 | "type": "library", 222 | "extra": { 223 | "branch-alias": { 224 | "dev-master": "2.0.x-dev" 225 | } 226 | }, 227 | "autoload": { 228 | "psr-4": { 229 | "yii\\": "" 230 | } 231 | }, 232 | "notification-url": "https://packagist.org/downloads/", 233 | "license": [ 234 | "BSD-3-Clause" 235 | ], 236 | "authors": [ 237 | { 238 | "name": "Qiang Xue", 239 | "email": "qiang.xue@gmail.com", 240 | "homepage": "http://www.yiiframework.com/", 241 | "role": "Founder and project lead" 242 | }, 243 | { 244 | "name": "Alexander Makarov", 245 | "email": "sam@rmcreative.ru", 246 | "homepage": "http://rmcreative.ru/", 247 | "role": "Core framework development" 248 | }, 249 | { 250 | "name": "Maurizio Domba", 251 | "homepage": "http://mdomba.info/", 252 | "role": "Core framework development" 253 | }, 254 | { 255 | "name": "Carsten Brandt", 256 | "email": "mail@cebe.cc", 257 | "homepage": "http://cebe.cc/", 258 | "role": "Core framework development" 259 | }, 260 | { 261 | "name": "Timur Ruziev", 262 | "email": "resurtm@gmail.com", 263 | "homepage": "http://resurtm.com/", 264 | "role": "Core framework development" 265 | }, 266 | { 267 | "name": "Paul Klimov", 268 | "email": "klimov.paul@gmail.com", 269 | "role": "Core framework development" 270 | }, 271 | { 272 | "name": "Dmitry Naumenko", 273 | "email": "d.naumenko.a@gmail.com", 274 | "role": "Core framework development" 275 | }, 276 | { 277 | "name": "Boudewijn Vahrmeijer", 278 | "email": "info@dynasource.eu", 279 | "homepage": "http://dynasource.eu", 280 | "role": "Core framework development" 281 | } 282 | ], 283 | "description": "Yii PHP Framework Version 2", 284 | "homepage": "http://www.yiiframework.com/", 285 | "keywords": [ 286 | "framework", 287 | "yii2" 288 | ], 289 | "time": "2019-06-18T14:25:08+00:00" 290 | }, 291 | { 292 | "name": "yiisoft/yii2-composer", 293 | "version": "2.0.7", 294 | "source": { 295 | "type": "git", 296 | "url": "https://github.com/yiisoft/yii2-composer.git", 297 | "reference": "1439e78be1218c492e6cde251ed87d3f128b9534" 298 | }, 299 | "dist": { 300 | "type": "zip", 301 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/1439e78be1218c492e6cde251ed87d3f128b9534", 302 | "reference": "1439e78be1218c492e6cde251ed87d3f128b9534", 303 | "shasum": "" 304 | }, 305 | "require": { 306 | "composer-plugin-api": "^1.0" 307 | }, 308 | "require-dev": { 309 | "composer/composer": "^1.0" 310 | }, 311 | "type": "composer-plugin", 312 | "extra": { 313 | "class": "yii\\composer\\Plugin", 314 | "branch-alias": { 315 | "dev-master": "2.0.x-dev" 316 | } 317 | }, 318 | "autoload": { 319 | "psr-4": { 320 | "yii\\composer\\": "" 321 | } 322 | }, 323 | "notification-url": "https://packagist.org/downloads/", 324 | "license": [ 325 | "BSD-3-Clause" 326 | ], 327 | "authors": [ 328 | { 329 | "name": "Qiang Xue", 330 | "email": "qiang.xue@gmail.com" 331 | }, 332 | { 333 | "name": "Carsten Brandt", 334 | "email": "mail@cebe.cc" 335 | } 336 | ], 337 | "description": "The composer plugin for Yii extension installer", 338 | "keywords": [ 339 | "composer", 340 | "extension installer", 341 | "yii2" 342 | ], 343 | "time": "2018-07-05T15:44:47+00:00" 344 | } 345 | ], 346 | "packages-dev": [ 347 | { 348 | "name": "behat/gherkin", 349 | "version": "v4.6.0", 350 | "source": { 351 | "type": "git", 352 | "url": "https://github.com/Behat/Gherkin.git", 353 | "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07" 354 | }, 355 | "dist": { 356 | "type": "zip", 357 | "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07", 358 | "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07", 359 | "shasum": "" 360 | }, 361 | "require": { 362 | "php": ">=5.3.1" 363 | }, 364 | "require-dev": { 365 | "phpunit/phpunit": "~4.5|~5", 366 | "symfony/phpunit-bridge": "~2.7|~3|~4", 367 | "symfony/yaml": "~2.3|~3|~4" 368 | }, 369 | "suggest": { 370 | "symfony/yaml": "If you want to parse features, represented in YAML files" 371 | }, 372 | "type": "library", 373 | "extra": { 374 | "branch-alias": { 375 | "dev-master": "4.4-dev" 376 | } 377 | }, 378 | "autoload": { 379 | "psr-0": { 380 | "Behat\\Gherkin": "src/" 381 | } 382 | }, 383 | "notification-url": "https://packagist.org/downloads/", 384 | "license": [ 385 | "MIT" 386 | ], 387 | "authors": [ 388 | { 389 | "name": "Konstantin Kudryashov", 390 | "email": "ever.zet@gmail.com", 391 | "homepage": "http://everzet.com" 392 | } 393 | ], 394 | "description": "Gherkin DSL parser for PHP 5.3", 395 | "homepage": "http://behat.org/", 396 | "keywords": [ 397 | "BDD", 398 | "Behat", 399 | "Cucumber", 400 | "DSL", 401 | "gherkin", 402 | "parser" 403 | ], 404 | "time": "2019-01-16T14:22:17+00:00" 405 | }, 406 | { 407 | "name": "codeception/base", 408 | "version": "3.0.0", 409 | "source": { 410 | "type": "git", 411 | "url": "https://github.com/Codeception/base.git", 412 | "reference": "86f10d5dcb05895e76711e6d25e5eb8ead354a09" 413 | }, 414 | "dist": { 415 | "type": "zip", 416 | "url": "https://api.github.com/repos/Codeception/base/zipball/86f10d5dcb05895e76711e6d25e5eb8ead354a09", 417 | "reference": "86f10d5dcb05895e76711e6d25e5eb8ead354a09", 418 | "shasum": "" 419 | }, 420 | "require": { 421 | "behat/gherkin": "^4.4.0", 422 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3", 423 | "codeception/stub": "^2.0", 424 | "ext-curl": "*", 425 | "ext-json": "*", 426 | "ext-mbstring": "*", 427 | "guzzlehttp/psr7": "~1.4", 428 | "hoa/console": "~3.0", 429 | "php": ">=5.6.0 <8.0", 430 | "symfony/browser-kit": ">=2.7 <5.0", 431 | "symfony/console": ">=2.7 <5.0", 432 | "symfony/css-selector": ">=2.7 <5.0", 433 | "symfony/dom-crawler": ">=2.7 <5.0", 434 | "symfony/event-dispatcher": ">=2.7 <5.0", 435 | "symfony/finder": ">=2.7 <5.0", 436 | "symfony/yaml": ">=2.7 <5.0" 437 | }, 438 | "require-dev": { 439 | "codeception/specify": "~0.3", 440 | "flow/jsonpath": "~0.2", 441 | "monolog/monolog": "~1.8", 442 | "pda/pheanstalk": "~3.0", 443 | "php-amqplib/php-amqplib": "~2.4", 444 | "predis/predis": "^1.0", 445 | "squizlabs/php_codesniffer": "~2.0", 446 | "symfony/process": ">=2.7 <5.0", 447 | "vlucas/phpdotenv": "^3.0" 448 | }, 449 | "suggest": { 450 | "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", 451 | "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", 452 | "codeception/specify": "BDD-style code blocks", 453 | "codeception/verify": "BDD-style assertions", 454 | "flow/jsonpath": "For using JSONPath in REST module", 455 | "league/factory-muffin": "For DataFactory module", 456 | "league/factory-muffin-faker": "For Faker support in DataFactory module", 457 | "phpseclib/phpseclib": "for SFTP option in FTP Module", 458 | "stecman/symfony-console-completion": "For BASH autocompletion", 459 | "symfony/phpunit-bridge": "For phpunit-bridge support" 460 | }, 461 | "bin": [ 462 | "codecept" 463 | ], 464 | "type": "library", 465 | "extra": { 466 | "branch-alias": [] 467 | }, 468 | "autoload": { 469 | "psr-4": { 470 | "Codeception\\": "src/Codeception", 471 | "Codeception\\Extension\\": "ext" 472 | } 473 | }, 474 | "notification-url": "https://packagist.org/downloads/", 475 | "license": [ 476 | "MIT" 477 | ], 478 | "authors": [ 479 | { 480 | "name": "Michael Bodnarchuk", 481 | "email": "davert@mail.ua", 482 | "homepage": "http://codegyre.com" 483 | } 484 | ], 485 | "description": "BDD-style testing framework", 486 | "homepage": "http://codeception.com/", 487 | "keywords": [ 488 | "BDD", 489 | "TDD", 490 | "acceptance testing", 491 | "functional testing", 492 | "unit testing" 493 | ], 494 | "time": "2019-04-24T12:13:51+00:00" 495 | }, 496 | { 497 | "name": "codeception/codeception", 498 | "version": "3.0.1", 499 | "source": { 500 | "type": "git", 501 | "url": "https://github.com/Codeception/Codeception.git", 502 | "reference": "52dfbb5f31b74d042100a8836bbde792326ebb64" 503 | }, 504 | "dist": { 505 | "type": "zip", 506 | "url": "https://api.github.com/repos/Codeception/Codeception/zipball/52dfbb5f31b74d042100a8836bbde792326ebb64", 507 | "reference": "52dfbb5f31b74d042100a8836bbde792326ebb64", 508 | "shasum": "" 509 | }, 510 | "require": { 511 | "behat/gherkin": "^4.4.0", 512 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3", 513 | "codeception/stub": "^2.0", 514 | "ext-curl": "*", 515 | "ext-json": "*", 516 | "ext-mbstring": "*", 517 | "facebook/webdriver": "^1.6.0", 518 | "guzzlehttp/guzzle": "^6.3.0", 519 | "guzzlehttp/psr7": "~1.4", 520 | "hoa/console": "~3.0", 521 | "php": ">=5.6.0 <8.0", 522 | "symfony/browser-kit": ">=2.7 <5.0", 523 | "symfony/console": ">=2.7 <5.0", 524 | "symfony/css-selector": ">=2.7 <5.0", 525 | "symfony/dom-crawler": ">=2.7 <5.0", 526 | "symfony/event-dispatcher": ">=2.7 <5.0", 527 | "symfony/finder": ">=2.7 <5.0", 528 | "symfony/yaml": ">=2.7 <5.0" 529 | }, 530 | "require-dev": { 531 | "codeception/specify": "~0.3", 532 | "flow/jsonpath": "~0.2", 533 | "monolog/monolog": "~1.8", 534 | "pda/pheanstalk": "~3.0", 535 | "php-amqplib/php-amqplib": "~2.4", 536 | "predis/predis": "^1.0", 537 | "squizlabs/php_codesniffer": "~2.0", 538 | "symfony/process": ">=2.7 <5.0", 539 | "vlucas/phpdotenv": "^3.0" 540 | }, 541 | "suggest": { 542 | "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", 543 | "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", 544 | "codeception/specify": "BDD-style code blocks", 545 | "codeception/verify": "BDD-style assertions", 546 | "flow/jsonpath": "For using JSONPath in REST module", 547 | "league/factory-muffin": "For DataFactory module", 548 | "league/factory-muffin-faker": "For Faker support in DataFactory module", 549 | "phpseclib/phpseclib": "for SFTP option in FTP Module", 550 | "stecman/symfony-console-completion": "For BASH autocompletion", 551 | "symfony/phpunit-bridge": "For phpunit-bridge support" 552 | }, 553 | "bin": [ 554 | "codecept" 555 | ], 556 | "type": "library", 557 | "extra": { 558 | "branch-alias": [] 559 | }, 560 | "autoload": { 561 | "psr-4": { 562 | "Codeception\\": "src/Codeception", 563 | "Codeception\\Extension\\": "ext" 564 | } 565 | }, 566 | "notification-url": "https://packagist.org/downloads/", 567 | "license": [ 568 | "MIT" 569 | ], 570 | "authors": [ 571 | { 572 | "name": "Michael Bodnarchuk", 573 | "email": "davert@mail.ua", 574 | "homepage": "http://codegyre.com" 575 | } 576 | ], 577 | "description": "BDD-style testing framework", 578 | "homepage": "http://codeception.com/", 579 | "keywords": [ 580 | "BDD", 581 | "TDD", 582 | "acceptance testing", 583 | "functional testing", 584 | "unit testing" 585 | ], 586 | "time": "2019-05-20T17:02:37+00:00" 587 | }, 588 | { 589 | "name": "codeception/mockery-module", 590 | "version": "0.3.0", 591 | "source": { 592 | "type": "git", 593 | "url": "https://github.com/Codeception/MockeryModule.git", 594 | "reference": "19cc51ae4123031d7c93c56a9abbde40697dbc24" 595 | }, 596 | "dist": { 597 | "type": "zip", 598 | "url": "https://api.github.com/repos/Codeception/MockeryModule/zipball/19cc51ae4123031d7c93c56a9abbde40697dbc24", 599 | "reference": "19cc51ae4123031d7c93c56a9abbde40697dbc24", 600 | "shasum": "" 601 | }, 602 | "require": { 603 | "codeception/codeception": "^2.0|^3.0", 604 | "mockery/mockery": "^0.8|^0.9|^1.0" 605 | }, 606 | "type": "library", 607 | "autoload": { 608 | "psr-4": { 609 | "Codeception\\": "src" 610 | } 611 | }, 612 | "notification-url": "https://packagist.org/downloads/", 613 | "license": [ 614 | "MIT" 615 | ], 616 | "authors": [ 617 | { 618 | "name": "Michael Bodnarchuk", 619 | "email": "davert.php@mailican.com" 620 | }, 621 | { 622 | "name": "Jáchym Toušek", 623 | "email": "enumag@gmail.com" 624 | } 625 | ], 626 | "description": "Mockery Module for Codeception", 627 | "time": "2019-04-26T19:47:46+00:00" 628 | }, 629 | { 630 | "name": "codeception/phpunit-wrapper", 631 | "version": "7.7.1", 632 | "source": { 633 | "type": "git", 634 | "url": "https://github.com/Codeception/phpunit-wrapper.git", 635 | "reference": "ab04a956264291505ea84998f43cf91639b4575d" 636 | }, 637 | "dist": { 638 | "type": "zip", 639 | "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/ab04a956264291505ea84998f43cf91639b4575d", 640 | "reference": "ab04a956264291505ea84998f43cf91639b4575d", 641 | "shasum": "" 642 | }, 643 | "require": { 644 | "phpunit/php-code-coverage": "^6.0", 645 | "phpunit/phpunit": "7.5.*", 646 | "sebastian/comparator": "^3.0", 647 | "sebastian/diff": "^3.0" 648 | }, 649 | "require-dev": { 650 | "codeception/specify": "*", 651 | "vlucas/phpdotenv": "^3.0" 652 | }, 653 | "type": "library", 654 | "autoload": { 655 | "psr-4": { 656 | "Codeception\\PHPUnit\\": "src\\" 657 | } 658 | }, 659 | "notification-url": "https://packagist.org/downloads/", 660 | "license": [ 661 | "MIT" 662 | ], 663 | "authors": [ 664 | { 665 | "name": "Davert", 666 | "email": "davert.php@resend.cc" 667 | } 668 | ], 669 | "description": "PHPUnit classes used by Codeception", 670 | "time": "2019-02-26T20:35:32+00:00" 671 | }, 672 | { 673 | "name": "codeception/specify", 674 | "version": "1.1", 675 | "source": { 676 | "type": "git", 677 | "url": "https://github.com/Codeception/Specify.git", 678 | "reference": "504ac7a882e6f7226b0cff44c72a6c0bbd0bad95" 679 | }, 680 | "dist": { 681 | "type": "zip", 682 | "url": "https://api.github.com/repos/Codeception/Specify/zipball/504ac7a882e6f7226b0cff44c72a6c0bbd0bad95", 683 | "reference": "504ac7a882e6f7226b0cff44c72a6c0bbd0bad95", 684 | "shasum": "" 685 | }, 686 | "require": { 687 | "myclabs/deep-copy": "~1.1", 688 | "php": ">=7.1.0", 689 | "phpunit/phpunit": "^7.0" 690 | }, 691 | "type": "library", 692 | "autoload": { 693 | "psr-0": { 694 | "Codeception\\": "src/" 695 | } 696 | }, 697 | "notification-url": "https://packagist.org/downloads/", 698 | "license": [ 699 | "MIT" 700 | ], 701 | "authors": [ 702 | { 703 | "name": "Michael Bodnarchuk", 704 | "email": "davert@codeception.com" 705 | } 706 | ], 707 | "description": "BDD code blocks for PHPUnit and Codeception", 708 | "time": "2018-03-12T23:55:10+00:00" 709 | }, 710 | { 711 | "name": "codeception/stub", 712 | "version": "2.1.0", 713 | "source": { 714 | "type": "git", 715 | "url": "https://github.com/Codeception/Stub.git", 716 | "reference": "853657f988942f7afb69becf3fd0059f192c705a" 717 | }, 718 | "dist": { 719 | "type": "zip", 720 | "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", 721 | "reference": "853657f988942f7afb69becf3fd0059f192c705a", 722 | "shasum": "" 723 | }, 724 | "require": { 725 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" 726 | }, 727 | "type": "library", 728 | "autoload": { 729 | "psr-4": { 730 | "Codeception\\": "src/" 731 | } 732 | }, 733 | "notification-url": "https://packagist.org/downloads/", 734 | "license": [ 735 | "MIT" 736 | ], 737 | "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", 738 | "time": "2019-03-02T15:35:10+00:00" 739 | }, 740 | { 741 | "name": "codeception/verify", 742 | "version": "1.0.0", 743 | "source": { 744 | "type": "git", 745 | "url": "https://github.com/Codeception/Verify.git", 746 | "reference": "f45b39025b3f5cfd9a9d8fb992432885ff5380c1" 747 | }, 748 | "dist": { 749 | "type": "zip", 750 | "url": "https://api.github.com/repos/Codeception/Verify/zipball/f45b39025b3f5cfd9a9d8fb992432885ff5380c1", 751 | "reference": "f45b39025b3f5cfd9a9d8fb992432885ff5380c1", 752 | "shasum": "" 753 | }, 754 | "require": { 755 | "php": ">= 7.0", 756 | "phpunit/phpunit": "> 6.0" 757 | }, 758 | "type": "library", 759 | "autoload": { 760 | "files": [ 761 | "src/Codeception/function.php" 762 | ], 763 | "psr-4": { 764 | "Codeception\\": "src\\Codeception" 765 | } 766 | }, 767 | "notification-url": "https://packagist.org/downloads/", 768 | "license": [ 769 | "MIT" 770 | ], 771 | "authors": [ 772 | { 773 | "name": "Michael Bodnarchuk", 774 | "email": "davert@codeception.com" 775 | } 776 | ], 777 | "description": "BDD assertion library for PHPUnit", 778 | "time": "2017-11-12T01:51:59+00:00" 779 | }, 780 | { 781 | "name": "doctrine/instantiator", 782 | "version": "1.2.0", 783 | "source": { 784 | "type": "git", 785 | "url": "https://github.com/doctrine/instantiator.git", 786 | "reference": "a2c590166b2133a4633738648b6b064edae0814a" 787 | }, 788 | "dist": { 789 | "type": "zip", 790 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", 791 | "reference": "a2c590166b2133a4633738648b6b064edae0814a", 792 | "shasum": "" 793 | }, 794 | "require": { 795 | "php": "^7.1" 796 | }, 797 | "require-dev": { 798 | "doctrine/coding-standard": "^6.0", 799 | "ext-pdo": "*", 800 | "ext-phar": "*", 801 | "phpbench/phpbench": "^0.13", 802 | "phpstan/phpstan-phpunit": "^0.11", 803 | "phpstan/phpstan-shim": "^0.11", 804 | "phpunit/phpunit": "^7.0" 805 | }, 806 | "type": "library", 807 | "extra": { 808 | "branch-alias": { 809 | "dev-master": "1.2.x-dev" 810 | } 811 | }, 812 | "autoload": { 813 | "psr-4": { 814 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 815 | } 816 | }, 817 | "notification-url": "https://packagist.org/downloads/", 818 | "license": [ 819 | "MIT" 820 | ], 821 | "authors": [ 822 | { 823 | "name": "Marco Pivetta", 824 | "email": "ocramius@gmail.com", 825 | "homepage": "http://ocramius.github.com/" 826 | } 827 | ], 828 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 829 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 830 | "keywords": [ 831 | "constructor", 832 | "instantiate" 833 | ], 834 | "time": "2019-03-17T17:37:11+00:00" 835 | }, 836 | { 837 | "name": "facebook/webdriver", 838 | "version": "1.7.1", 839 | "source": { 840 | "type": "git", 841 | "url": "https://github.com/facebook/php-webdriver.git", 842 | "reference": "e43de70f3c7166169d0f14a374505392734160e5" 843 | }, 844 | "dist": { 845 | "type": "zip", 846 | "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5", 847 | "reference": "e43de70f3c7166169d0f14a374505392734160e5", 848 | "shasum": "" 849 | }, 850 | "require": { 851 | "ext-curl": "*", 852 | "ext-json": "*", 853 | "ext-mbstring": "*", 854 | "ext-zip": "*", 855 | "php": "^5.6 || ~7.0", 856 | "symfony/process": "^2.8 || ^3.1 || ^4.0" 857 | }, 858 | "require-dev": { 859 | "friendsofphp/php-cs-fixer": "^2.0", 860 | "jakub-onderka/php-parallel-lint": "^0.9.2", 861 | "php-coveralls/php-coveralls": "^2.0", 862 | "php-mock/php-mock-phpunit": "^1.1", 863 | "phpunit/phpunit": "^5.7", 864 | "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0", 865 | "squizlabs/php_codesniffer": "^2.6", 866 | "symfony/var-dumper": "^3.3 || ^4.0" 867 | }, 868 | "suggest": { 869 | "ext-SimpleXML": "For Firefox profile creation" 870 | }, 871 | "type": "library", 872 | "extra": { 873 | "branch-alias": { 874 | "dev-community": "1.5-dev" 875 | } 876 | }, 877 | "autoload": { 878 | "psr-4": { 879 | "Facebook\\WebDriver\\": "lib/" 880 | } 881 | }, 882 | "notification-url": "https://packagist.org/downloads/", 883 | "license": [ 884 | "Apache-2.0" 885 | ], 886 | "description": "A PHP client for Selenium WebDriver", 887 | "homepage": "https://github.com/facebook/php-webdriver", 888 | "keywords": [ 889 | "facebook", 890 | "php", 891 | "selenium", 892 | "webdriver" 893 | ], 894 | "time": "2019-06-13T08:02:18+00:00" 895 | }, 896 | { 897 | "name": "guzzlehttp/guzzle", 898 | "version": "6.3.3", 899 | "source": { 900 | "type": "git", 901 | "url": "https://github.com/guzzle/guzzle.git", 902 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" 903 | }, 904 | "dist": { 905 | "type": "zip", 906 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", 907 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", 908 | "shasum": "" 909 | }, 910 | "require": { 911 | "guzzlehttp/promises": "^1.0", 912 | "guzzlehttp/psr7": "^1.4", 913 | "php": ">=5.5" 914 | }, 915 | "require-dev": { 916 | "ext-curl": "*", 917 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 918 | "psr/log": "^1.0" 919 | }, 920 | "suggest": { 921 | "psr/log": "Required for using the Log middleware" 922 | }, 923 | "type": "library", 924 | "extra": { 925 | "branch-alias": { 926 | "dev-master": "6.3-dev" 927 | } 928 | }, 929 | "autoload": { 930 | "files": [ 931 | "src/functions_include.php" 932 | ], 933 | "psr-4": { 934 | "GuzzleHttp\\": "src/" 935 | } 936 | }, 937 | "notification-url": "https://packagist.org/downloads/", 938 | "license": [ 939 | "MIT" 940 | ], 941 | "authors": [ 942 | { 943 | "name": "Michael Dowling", 944 | "email": "mtdowling@gmail.com", 945 | "homepage": "https://github.com/mtdowling" 946 | } 947 | ], 948 | "description": "Guzzle is a PHP HTTP client library", 949 | "homepage": "http://guzzlephp.org/", 950 | "keywords": [ 951 | "client", 952 | "curl", 953 | "framework", 954 | "http", 955 | "http client", 956 | "rest", 957 | "web service" 958 | ], 959 | "time": "2018-04-22T15:46:56+00:00" 960 | }, 961 | { 962 | "name": "guzzlehttp/promises", 963 | "version": "v1.3.1", 964 | "source": { 965 | "type": "git", 966 | "url": "https://github.com/guzzle/promises.git", 967 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 968 | }, 969 | "dist": { 970 | "type": "zip", 971 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 972 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 973 | "shasum": "" 974 | }, 975 | "require": { 976 | "php": ">=5.5.0" 977 | }, 978 | "require-dev": { 979 | "phpunit/phpunit": "^4.0" 980 | }, 981 | "type": "library", 982 | "extra": { 983 | "branch-alias": { 984 | "dev-master": "1.4-dev" 985 | } 986 | }, 987 | "autoload": { 988 | "psr-4": { 989 | "GuzzleHttp\\Promise\\": "src/" 990 | }, 991 | "files": [ 992 | "src/functions_include.php" 993 | ] 994 | }, 995 | "notification-url": "https://packagist.org/downloads/", 996 | "license": [ 997 | "MIT" 998 | ], 999 | "authors": [ 1000 | { 1001 | "name": "Michael Dowling", 1002 | "email": "mtdowling@gmail.com", 1003 | "homepage": "https://github.com/mtdowling" 1004 | } 1005 | ], 1006 | "description": "Guzzle promises library", 1007 | "keywords": [ 1008 | "promise" 1009 | ], 1010 | "time": "2016-12-20T10:07:11+00:00" 1011 | }, 1012 | { 1013 | "name": "guzzlehttp/psr7", 1014 | "version": "1.5.2", 1015 | "source": { 1016 | "type": "git", 1017 | "url": "https://github.com/guzzle/psr7.git", 1018 | "reference": "9f83dded91781a01c63574e387eaa769be769115" 1019 | }, 1020 | "dist": { 1021 | "type": "zip", 1022 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/9f83dded91781a01c63574e387eaa769be769115", 1023 | "reference": "9f83dded91781a01c63574e387eaa769be769115", 1024 | "shasum": "" 1025 | }, 1026 | "require": { 1027 | "php": ">=5.4.0", 1028 | "psr/http-message": "~1.0", 1029 | "ralouphie/getallheaders": "^2.0.5" 1030 | }, 1031 | "provide": { 1032 | "psr/http-message-implementation": "1.0" 1033 | }, 1034 | "require-dev": { 1035 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 1036 | }, 1037 | "type": "library", 1038 | "extra": { 1039 | "branch-alias": { 1040 | "dev-master": "1.5-dev" 1041 | } 1042 | }, 1043 | "autoload": { 1044 | "psr-4": { 1045 | "GuzzleHttp\\Psr7\\": "src/" 1046 | }, 1047 | "files": [ 1048 | "src/functions_include.php" 1049 | ] 1050 | }, 1051 | "notification-url": "https://packagist.org/downloads/", 1052 | "license": [ 1053 | "MIT" 1054 | ], 1055 | "authors": [ 1056 | { 1057 | "name": "Michael Dowling", 1058 | "email": "mtdowling@gmail.com", 1059 | "homepage": "https://github.com/mtdowling" 1060 | }, 1061 | { 1062 | "name": "Tobias Schultze", 1063 | "homepage": "https://github.com/Tobion" 1064 | } 1065 | ], 1066 | "description": "PSR-7 message implementation that also provides common utility methods", 1067 | "keywords": [ 1068 | "http", 1069 | "message", 1070 | "psr-7", 1071 | "request", 1072 | "response", 1073 | "stream", 1074 | "uri", 1075 | "url" 1076 | ], 1077 | "time": "2018-12-04T20:46:45+00:00" 1078 | }, 1079 | { 1080 | "name": "hamcrest/hamcrest-php", 1081 | "version": "v2.0.0", 1082 | "source": { 1083 | "type": "git", 1084 | "url": "https://github.com/hamcrest/hamcrest-php.git", 1085 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" 1086 | }, 1087 | "dist": { 1088 | "type": "zip", 1089 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", 1090 | "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", 1091 | "shasum": "" 1092 | }, 1093 | "require": { 1094 | "php": "^5.3|^7.0" 1095 | }, 1096 | "replace": { 1097 | "cordoval/hamcrest-php": "*", 1098 | "davedevelopment/hamcrest-php": "*", 1099 | "kodova/hamcrest-php": "*" 1100 | }, 1101 | "require-dev": { 1102 | "phpunit/php-file-iterator": "1.3.3", 1103 | "phpunit/phpunit": "~4.0", 1104 | "satooshi/php-coveralls": "^1.0" 1105 | }, 1106 | "type": "library", 1107 | "extra": { 1108 | "branch-alias": { 1109 | "dev-master": "2.0-dev" 1110 | } 1111 | }, 1112 | "autoload": { 1113 | "classmap": [ 1114 | "hamcrest" 1115 | ] 1116 | }, 1117 | "notification-url": "https://packagist.org/downloads/", 1118 | "license": [ 1119 | "BSD" 1120 | ], 1121 | "description": "This is the PHP port of Hamcrest Matchers", 1122 | "keywords": [ 1123 | "test" 1124 | ], 1125 | "time": "2016-01-20T08:20:44+00:00" 1126 | }, 1127 | { 1128 | "name": "hoa/consistency", 1129 | "version": "1.17.05.02", 1130 | "source": { 1131 | "type": "git", 1132 | "url": "https://github.com/hoaproject/Consistency.git", 1133 | "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f" 1134 | }, 1135 | "dist": { 1136 | "type": "zip", 1137 | "url": "https://api.github.com/repos/hoaproject/Consistency/zipball/fd7d0adc82410507f332516faf655b6ed22e4c2f", 1138 | "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f", 1139 | "shasum": "" 1140 | }, 1141 | "require": { 1142 | "hoa/exception": "~1.0", 1143 | "php": ">=5.5.0" 1144 | }, 1145 | "require-dev": { 1146 | "hoa/stream": "~1.0", 1147 | "hoa/test": "~2.0" 1148 | }, 1149 | "type": "library", 1150 | "extra": { 1151 | "branch-alias": { 1152 | "dev-master": "1.x-dev" 1153 | } 1154 | }, 1155 | "autoload": { 1156 | "psr-4": { 1157 | "Hoa\\Consistency\\": "." 1158 | }, 1159 | "files": [ 1160 | "Prelude.php" 1161 | ] 1162 | }, 1163 | "notification-url": "https://packagist.org/downloads/", 1164 | "license": [ 1165 | "BSD-3-Clause" 1166 | ], 1167 | "authors": [ 1168 | { 1169 | "name": "Ivan Enderlin", 1170 | "email": "ivan.enderlin@hoa-project.net" 1171 | }, 1172 | { 1173 | "name": "Hoa community", 1174 | "homepage": "https://hoa-project.net/" 1175 | } 1176 | ], 1177 | "description": "The Hoa\\Consistency library.", 1178 | "homepage": "https://hoa-project.net/", 1179 | "keywords": [ 1180 | "autoloader", 1181 | "callable", 1182 | "consistency", 1183 | "entity", 1184 | "flex", 1185 | "keyword", 1186 | "library" 1187 | ], 1188 | "time": "2017-05-02T12:18:12+00:00" 1189 | }, 1190 | { 1191 | "name": "hoa/console", 1192 | "version": "3.17.05.02", 1193 | "source": { 1194 | "type": "git", 1195 | "url": "https://github.com/hoaproject/Console.git", 1196 | "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66" 1197 | }, 1198 | "dist": { 1199 | "type": "zip", 1200 | "url": "https://api.github.com/repos/hoaproject/Console/zipball/e231fd3ea70e6d773576ae78de0bdc1daf331a66", 1201 | "reference": "e231fd3ea70e6d773576ae78de0bdc1daf331a66", 1202 | "shasum": "" 1203 | }, 1204 | "require": { 1205 | "hoa/consistency": "~1.0", 1206 | "hoa/event": "~1.0", 1207 | "hoa/exception": "~1.0", 1208 | "hoa/file": "~1.0", 1209 | "hoa/protocol": "~1.0", 1210 | "hoa/stream": "~1.0", 1211 | "hoa/ustring": "~4.0" 1212 | }, 1213 | "require-dev": { 1214 | "hoa/test": "~2.0" 1215 | }, 1216 | "suggest": { 1217 | "ext-pcntl": "To enable hoa://Event/Console/Window:resize.", 1218 | "hoa/dispatcher": "To use the console kit.", 1219 | "hoa/router": "To use the console kit." 1220 | }, 1221 | "type": "library", 1222 | "extra": { 1223 | "branch-alias": { 1224 | "dev-master": "3.x-dev" 1225 | } 1226 | }, 1227 | "autoload": { 1228 | "psr-4": { 1229 | "Hoa\\Console\\": "." 1230 | } 1231 | }, 1232 | "notification-url": "https://packagist.org/downloads/", 1233 | "license": [ 1234 | "BSD-3-Clause" 1235 | ], 1236 | "authors": [ 1237 | { 1238 | "name": "Ivan Enderlin", 1239 | "email": "ivan.enderlin@hoa-project.net" 1240 | }, 1241 | { 1242 | "name": "Hoa community", 1243 | "homepage": "https://hoa-project.net/" 1244 | } 1245 | ], 1246 | "description": "The Hoa\\Console library.", 1247 | "homepage": "https://hoa-project.net/", 1248 | "keywords": [ 1249 | "autocompletion", 1250 | "chrome", 1251 | "cli", 1252 | "console", 1253 | "cursor", 1254 | "getoption", 1255 | "library", 1256 | "option", 1257 | "parser", 1258 | "processus", 1259 | "readline", 1260 | "terminfo", 1261 | "tput", 1262 | "window" 1263 | ], 1264 | "time": "2017-05-02T12:26:19+00:00" 1265 | }, 1266 | { 1267 | "name": "hoa/event", 1268 | "version": "1.17.01.13", 1269 | "source": { 1270 | "type": "git", 1271 | "url": "https://github.com/hoaproject/Event.git", 1272 | "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54" 1273 | }, 1274 | "dist": { 1275 | "type": "zip", 1276 | "url": "https://api.github.com/repos/hoaproject/Event/zipball/6c0060dced212ffa3af0e34bb46624f990b29c54", 1277 | "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54", 1278 | "shasum": "" 1279 | }, 1280 | "require": { 1281 | "hoa/consistency": "~1.0", 1282 | "hoa/exception": "~1.0" 1283 | }, 1284 | "require-dev": { 1285 | "hoa/test": "~2.0" 1286 | }, 1287 | "type": "library", 1288 | "extra": { 1289 | "branch-alias": { 1290 | "dev-master": "1.x-dev" 1291 | } 1292 | }, 1293 | "autoload": { 1294 | "psr-4": { 1295 | "Hoa\\Event\\": "." 1296 | } 1297 | }, 1298 | "notification-url": "https://packagist.org/downloads/", 1299 | "license": [ 1300 | "BSD-3-Clause" 1301 | ], 1302 | "authors": [ 1303 | { 1304 | "name": "Ivan Enderlin", 1305 | "email": "ivan.enderlin@hoa-project.net" 1306 | }, 1307 | { 1308 | "name": "Hoa community", 1309 | "homepage": "https://hoa-project.net/" 1310 | } 1311 | ], 1312 | "description": "The Hoa\\Event library.", 1313 | "homepage": "https://hoa-project.net/", 1314 | "keywords": [ 1315 | "event", 1316 | "library", 1317 | "listener", 1318 | "observer" 1319 | ], 1320 | "time": "2017-01-13T15:30:50+00:00" 1321 | }, 1322 | { 1323 | "name": "hoa/exception", 1324 | "version": "1.17.01.16", 1325 | "source": { 1326 | "type": "git", 1327 | "url": "https://github.com/hoaproject/Exception.git", 1328 | "reference": "091727d46420a3d7468ef0595651488bfc3a458f" 1329 | }, 1330 | "dist": { 1331 | "type": "zip", 1332 | "url": "https://api.github.com/repos/hoaproject/Exception/zipball/091727d46420a3d7468ef0595651488bfc3a458f", 1333 | "reference": "091727d46420a3d7468ef0595651488bfc3a458f", 1334 | "shasum": "" 1335 | }, 1336 | "require": { 1337 | "hoa/consistency": "~1.0", 1338 | "hoa/event": "~1.0" 1339 | }, 1340 | "require-dev": { 1341 | "hoa/test": "~2.0" 1342 | }, 1343 | "type": "library", 1344 | "extra": { 1345 | "branch-alias": { 1346 | "dev-master": "1.x-dev" 1347 | } 1348 | }, 1349 | "autoload": { 1350 | "psr-4": { 1351 | "Hoa\\Exception\\": "." 1352 | } 1353 | }, 1354 | "notification-url": "https://packagist.org/downloads/", 1355 | "license": [ 1356 | "BSD-3-Clause" 1357 | ], 1358 | "authors": [ 1359 | { 1360 | "name": "Ivan Enderlin", 1361 | "email": "ivan.enderlin@hoa-project.net" 1362 | }, 1363 | { 1364 | "name": "Hoa community", 1365 | "homepage": "https://hoa-project.net/" 1366 | } 1367 | ], 1368 | "description": "The Hoa\\Exception library.", 1369 | "homepage": "https://hoa-project.net/", 1370 | "keywords": [ 1371 | "exception", 1372 | "library" 1373 | ], 1374 | "time": "2017-01-16T07:53:27+00:00" 1375 | }, 1376 | { 1377 | "name": "hoa/file", 1378 | "version": "1.17.07.11", 1379 | "source": { 1380 | "type": "git", 1381 | "url": "https://github.com/hoaproject/File.git", 1382 | "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca" 1383 | }, 1384 | "dist": { 1385 | "type": "zip", 1386 | "url": "https://api.github.com/repos/hoaproject/File/zipball/35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", 1387 | "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", 1388 | "shasum": "" 1389 | }, 1390 | "require": { 1391 | "hoa/consistency": "~1.0", 1392 | "hoa/event": "~1.0", 1393 | "hoa/exception": "~1.0", 1394 | "hoa/iterator": "~2.0", 1395 | "hoa/stream": "~1.0" 1396 | }, 1397 | "require-dev": { 1398 | "hoa/test": "~2.0" 1399 | }, 1400 | "type": "library", 1401 | "extra": { 1402 | "branch-alias": { 1403 | "dev-master": "1.x-dev" 1404 | } 1405 | }, 1406 | "autoload": { 1407 | "psr-4": { 1408 | "Hoa\\File\\": "." 1409 | } 1410 | }, 1411 | "notification-url": "https://packagist.org/downloads/", 1412 | "license": [ 1413 | "BSD-3-Clause" 1414 | ], 1415 | "authors": [ 1416 | { 1417 | "name": "Ivan Enderlin", 1418 | "email": "ivan.enderlin@hoa-project.net" 1419 | }, 1420 | { 1421 | "name": "Hoa community", 1422 | "homepage": "https://hoa-project.net/" 1423 | } 1424 | ], 1425 | "description": "The Hoa\\File library.", 1426 | "homepage": "https://hoa-project.net/", 1427 | "keywords": [ 1428 | "Socket", 1429 | "directory", 1430 | "file", 1431 | "finder", 1432 | "library", 1433 | "link", 1434 | "temporary" 1435 | ], 1436 | "time": "2017-07-11T07:42:15+00:00" 1437 | }, 1438 | { 1439 | "name": "hoa/iterator", 1440 | "version": "2.17.01.10", 1441 | "source": { 1442 | "type": "git", 1443 | "url": "https://github.com/hoaproject/Iterator.git", 1444 | "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc" 1445 | }, 1446 | "dist": { 1447 | "type": "zip", 1448 | "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/d1120ba09cb4ccd049c86d10058ab94af245f0cc", 1449 | "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc", 1450 | "shasum": "" 1451 | }, 1452 | "require": { 1453 | "hoa/consistency": "~1.0", 1454 | "hoa/exception": "~1.0" 1455 | }, 1456 | "require-dev": { 1457 | "hoa/test": "~2.0" 1458 | }, 1459 | "type": "library", 1460 | "extra": { 1461 | "branch-alias": { 1462 | "dev-master": "2.x-dev" 1463 | } 1464 | }, 1465 | "autoload": { 1466 | "psr-4": { 1467 | "Hoa\\Iterator\\": "." 1468 | } 1469 | }, 1470 | "notification-url": "https://packagist.org/downloads/", 1471 | "license": [ 1472 | "BSD-3-Clause" 1473 | ], 1474 | "authors": [ 1475 | { 1476 | "name": "Ivan Enderlin", 1477 | "email": "ivan.enderlin@hoa-project.net" 1478 | }, 1479 | { 1480 | "name": "Hoa community", 1481 | "homepage": "https://hoa-project.net/" 1482 | } 1483 | ], 1484 | "description": "The Hoa\\Iterator library.", 1485 | "homepage": "https://hoa-project.net/", 1486 | "keywords": [ 1487 | "iterator", 1488 | "library" 1489 | ], 1490 | "time": "2017-01-10T10:34:47+00:00" 1491 | }, 1492 | { 1493 | "name": "hoa/protocol", 1494 | "version": "1.17.01.14", 1495 | "source": { 1496 | "type": "git", 1497 | "url": "https://github.com/hoaproject/Protocol.git", 1498 | "reference": "5c2cf972151c45f373230da170ea015deecf19e2" 1499 | }, 1500 | "dist": { 1501 | "type": "zip", 1502 | "url": "https://api.github.com/repos/hoaproject/Protocol/zipball/5c2cf972151c45f373230da170ea015deecf19e2", 1503 | "reference": "5c2cf972151c45f373230da170ea015deecf19e2", 1504 | "shasum": "" 1505 | }, 1506 | "require": { 1507 | "hoa/consistency": "~1.0", 1508 | "hoa/exception": "~1.0" 1509 | }, 1510 | "require-dev": { 1511 | "hoa/test": "~2.0" 1512 | }, 1513 | "type": "library", 1514 | "extra": { 1515 | "branch-alias": { 1516 | "dev-master": "1.x-dev" 1517 | } 1518 | }, 1519 | "autoload": { 1520 | "psr-4": { 1521 | "Hoa\\Protocol\\": "." 1522 | }, 1523 | "files": [ 1524 | "Wrapper.php" 1525 | ] 1526 | }, 1527 | "notification-url": "https://packagist.org/downloads/", 1528 | "license": [ 1529 | "BSD-3-Clause" 1530 | ], 1531 | "authors": [ 1532 | { 1533 | "name": "Ivan Enderlin", 1534 | "email": "ivan.enderlin@hoa-project.net" 1535 | }, 1536 | { 1537 | "name": "Hoa community", 1538 | "homepage": "https://hoa-project.net/" 1539 | } 1540 | ], 1541 | "description": "The Hoa\\Protocol library.", 1542 | "homepage": "https://hoa-project.net/", 1543 | "keywords": [ 1544 | "library", 1545 | "protocol", 1546 | "resource", 1547 | "stream", 1548 | "wrapper" 1549 | ], 1550 | "time": "2017-01-14T12:26:10+00:00" 1551 | }, 1552 | { 1553 | "name": "hoa/stream", 1554 | "version": "1.17.02.21", 1555 | "source": { 1556 | "type": "git", 1557 | "url": "https://github.com/hoaproject/Stream.git", 1558 | "reference": "3293cfffca2de10525df51436adf88a559151d82" 1559 | }, 1560 | "dist": { 1561 | "type": "zip", 1562 | "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3293cfffca2de10525df51436adf88a559151d82", 1563 | "reference": "3293cfffca2de10525df51436adf88a559151d82", 1564 | "shasum": "" 1565 | }, 1566 | "require": { 1567 | "hoa/consistency": "~1.0", 1568 | "hoa/event": "~1.0", 1569 | "hoa/exception": "~1.0", 1570 | "hoa/protocol": "~1.0" 1571 | }, 1572 | "require-dev": { 1573 | "hoa/test": "~2.0" 1574 | }, 1575 | "type": "library", 1576 | "extra": { 1577 | "branch-alias": { 1578 | "dev-master": "1.x-dev" 1579 | } 1580 | }, 1581 | "autoload": { 1582 | "psr-4": { 1583 | "Hoa\\Stream\\": "." 1584 | } 1585 | }, 1586 | "notification-url": "https://packagist.org/downloads/", 1587 | "license": [ 1588 | "BSD-3-Clause" 1589 | ], 1590 | "authors": [ 1591 | { 1592 | "name": "Ivan Enderlin", 1593 | "email": "ivan.enderlin@hoa-project.net" 1594 | }, 1595 | { 1596 | "name": "Hoa community", 1597 | "homepage": "https://hoa-project.net/" 1598 | } 1599 | ], 1600 | "description": "The Hoa\\Stream library.", 1601 | "homepage": "https://hoa-project.net/", 1602 | "keywords": [ 1603 | "Context", 1604 | "bucket", 1605 | "composite", 1606 | "filter", 1607 | "in", 1608 | "library", 1609 | "out", 1610 | "protocol", 1611 | "stream", 1612 | "wrapper" 1613 | ], 1614 | "time": "2017-02-21T16:01:06+00:00" 1615 | }, 1616 | { 1617 | "name": "hoa/ustring", 1618 | "version": "4.17.01.16", 1619 | "source": { 1620 | "type": "git", 1621 | "url": "https://github.com/hoaproject/Ustring.git", 1622 | "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0" 1623 | }, 1624 | "dist": { 1625 | "type": "zip", 1626 | "url": "https://api.github.com/repos/hoaproject/Ustring/zipball/e6326e2739178799b1fe3fdd92029f9517fa17a0", 1627 | "reference": "e6326e2739178799b1fe3fdd92029f9517fa17a0", 1628 | "shasum": "" 1629 | }, 1630 | "require": { 1631 | "hoa/consistency": "~1.0", 1632 | "hoa/exception": "~1.0" 1633 | }, 1634 | "require-dev": { 1635 | "hoa/test": "~2.0" 1636 | }, 1637 | "suggest": { 1638 | "ext-iconv": "ext/iconv must be present (or a third implementation) to use Hoa\\Ustring::transcode().", 1639 | "ext-intl": "To get a better Hoa\\Ustring::toAscii() and Hoa\\Ustring::compareTo()." 1640 | }, 1641 | "type": "library", 1642 | "extra": { 1643 | "branch-alias": { 1644 | "dev-master": "4.x-dev" 1645 | } 1646 | }, 1647 | "autoload": { 1648 | "psr-4": { 1649 | "Hoa\\Ustring\\": "." 1650 | } 1651 | }, 1652 | "notification-url": "https://packagist.org/downloads/", 1653 | "license": [ 1654 | "BSD-3-Clause" 1655 | ], 1656 | "authors": [ 1657 | { 1658 | "name": "Ivan Enderlin", 1659 | "email": "ivan.enderlin@hoa-project.net" 1660 | }, 1661 | { 1662 | "name": "Hoa community", 1663 | "homepage": "https://hoa-project.net/" 1664 | } 1665 | ], 1666 | "description": "The Hoa\\Ustring library.", 1667 | "homepage": "https://hoa-project.net/", 1668 | "keywords": [ 1669 | "library", 1670 | "search", 1671 | "string", 1672 | "unicode" 1673 | ], 1674 | "time": "2017-01-16T07:08:25+00:00" 1675 | }, 1676 | { 1677 | "name": "mito/yii2-coding-standards", 1678 | "version": "2.0.0-beta16", 1679 | "source": { 1680 | "type": "git", 1681 | "url": "https://github.com/hellowearemito/yii2-coding-standards.git", 1682 | "reference": "41f1fcc48c34722a0cb82b3259e279e580019421" 1683 | }, 1684 | "dist": { 1685 | "type": "zip", 1686 | "url": "https://api.github.com/repos/hellowearemito/yii2-coding-standards/zipball/41f1fcc48c34722a0cb82b3259e279e580019421", 1687 | "reference": "41f1fcc48c34722a0cb82b3259e279e580019421", 1688 | "shasum": "" 1689 | }, 1690 | "require": { 1691 | "php": ">=5.4.0", 1692 | "squizlabs/php_codesniffer": "~2.7" 1693 | }, 1694 | "require-dev": { 1695 | "phpunit/phpunit": "^5.3", 1696 | "satooshi/php-coveralls": "^1.0" 1697 | }, 1698 | "type": "library", 1699 | "notification-url": "https://packagist.org/downloads/", 1700 | "license": [ 1701 | "BSD-3-Clause" 1702 | ], 1703 | "authors": [ 1704 | { 1705 | "name": "Qiang Xue", 1706 | "email": "qiang.xue@gmail.com", 1707 | "homepage": "http://www.yiiframework.com/", 1708 | "role": "Founder and project lead" 1709 | }, 1710 | { 1711 | "name": "Alexander Makarov", 1712 | "email": "sam@rmcreative.ru", 1713 | "homepage": "http://rmcreative.ru/", 1714 | "role": "Core framework development" 1715 | }, 1716 | { 1717 | "name": "Maurizio Domba", 1718 | "homepage": "http://mdomba.info/", 1719 | "role": "Core framework development" 1720 | }, 1721 | { 1722 | "name": "Carsten Brandt", 1723 | "email": "mail@cebe.cc", 1724 | "homepage": "http://cebe.cc/", 1725 | "role": "Core framework development" 1726 | }, 1727 | { 1728 | "name": "Timur Ruziev", 1729 | "email": "resurtm@gmail.com", 1730 | "homepage": "http://resurtm.com/", 1731 | "role": "Core framework development" 1732 | }, 1733 | { 1734 | "name": "Paul Klimov", 1735 | "email": "klimov.paul@gmail.com", 1736 | "role": "Core framework development" 1737 | }, 1738 | { 1739 | "name": "Nikola Kovacs", 1740 | "email": "nikola.kovacs@gmail.com" 1741 | } 1742 | ], 1743 | "description": "Mito Yii 2 coding standards", 1744 | "homepage": "https://mito.hu/", 1745 | "keywords": [ 1746 | "codesniffer", 1747 | "framework", 1748 | "yii" 1749 | ], 1750 | "time": "2017-11-20T15:57:26+00:00" 1751 | }, 1752 | { 1753 | "name": "mockery/mockery", 1754 | "version": "1.2.2", 1755 | "source": { 1756 | "type": "git", 1757 | "url": "https://github.com/mockery/mockery.git", 1758 | "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" 1759 | }, 1760 | "dist": { 1761 | "type": "zip", 1762 | "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", 1763 | "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", 1764 | "shasum": "" 1765 | }, 1766 | "require": { 1767 | "hamcrest/hamcrest-php": "~2.0", 1768 | "lib-pcre": ">=7.0", 1769 | "php": ">=5.6.0" 1770 | }, 1771 | "require-dev": { 1772 | "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" 1773 | }, 1774 | "type": "library", 1775 | "extra": { 1776 | "branch-alias": { 1777 | "dev-master": "1.0.x-dev" 1778 | } 1779 | }, 1780 | "autoload": { 1781 | "psr-0": { 1782 | "Mockery": "library/" 1783 | } 1784 | }, 1785 | "notification-url": "https://packagist.org/downloads/", 1786 | "license": [ 1787 | "BSD-3-Clause" 1788 | ], 1789 | "authors": [ 1790 | { 1791 | "name": "Pádraic Brady", 1792 | "email": "padraic.brady@gmail.com", 1793 | "homepage": "http://blog.astrumfutura.com" 1794 | }, 1795 | { 1796 | "name": "Dave Marshall", 1797 | "email": "dave.marshall@atstsolutions.co.uk", 1798 | "homepage": "http://davedevelopment.co.uk" 1799 | } 1800 | ], 1801 | "description": "Mockery is a simple yet flexible PHP mock object framework", 1802 | "homepage": "https://github.com/mockery/mockery", 1803 | "keywords": [ 1804 | "BDD", 1805 | "TDD", 1806 | "library", 1807 | "mock", 1808 | "mock objects", 1809 | "mockery", 1810 | "stub", 1811 | "test", 1812 | "test double", 1813 | "testing" 1814 | ], 1815 | "time": "2019-02-13T09:37:52+00:00" 1816 | }, 1817 | { 1818 | "name": "myclabs/deep-copy", 1819 | "version": "1.9.1", 1820 | "source": { 1821 | "type": "git", 1822 | "url": "https://github.com/myclabs/DeepCopy.git", 1823 | "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" 1824 | }, 1825 | "dist": { 1826 | "type": "zip", 1827 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", 1828 | "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", 1829 | "shasum": "" 1830 | }, 1831 | "require": { 1832 | "php": "^7.1" 1833 | }, 1834 | "replace": { 1835 | "myclabs/deep-copy": "self.version" 1836 | }, 1837 | "require-dev": { 1838 | "doctrine/collections": "^1.0", 1839 | "doctrine/common": "^2.6", 1840 | "phpunit/phpunit": "^7.1" 1841 | }, 1842 | "type": "library", 1843 | "autoload": { 1844 | "psr-4": { 1845 | "DeepCopy\\": "src/DeepCopy/" 1846 | }, 1847 | "files": [ 1848 | "src/DeepCopy/deep_copy.php" 1849 | ] 1850 | }, 1851 | "notification-url": "https://packagist.org/downloads/", 1852 | "license": [ 1853 | "MIT" 1854 | ], 1855 | "description": "Create deep copies (clones) of your objects", 1856 | "keywords": [ 1857 | "clone", 1858 | "copy", 1859 | "duplicate", 1860 | "object", 1861 | "object graph" 1862 | ], 1863 | "time": "2019-04-07T13:18:21+00:00" 1864 | }, 1865 | { 1866 | "name": "phar-io/manifest", 1867 | "version": "1.0.3", 1868 | "source": { 1869 | "type": "git", 1870 | "url": "https://github.com/phar-io/manifest.git", 1871 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 1872 | }, 1873 | "dist": { 1874 | "type": "zip", 1875 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 1876 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 1877 | "shasum": "" 1878 | }, 1879 | "require": { 1880 | "ext-dom": "*", 1881 | "ext-phar": "*", 1882 | "phar-io/version": "^2.0", 1883 | "php": "^5.6 || ^7.0" 1884 | }, 1885 | "type": "library", 1886 | "extra": { 1887 | "branch-alias": { 1888 | "dev-master": "1.0.x-dev" 1889 | } 1890 | }, 1891 | "autoload": { 1892 | "classmap": [ 1893 | "src/" 1894 | ] 1895 | }, 1896 | "notification-url": "https://packagist.org/downloads/", 1897 | "license": [ 1898 | "BSD-3-Clause" 1899 | ], 1900 | "authors": [ 1901 | { 1902 | "name": "Arne Blankerts", 1903 | "email": "arne@blankerts.de", 1904 | "role": "Developer" 1905 | }, 1906 | { 1907 | "name": "Sebastian Heuer", 1908 | "email": "sebastian@phpeople.de", 1909 | "role": "Developer" 1910 | }, 1911 | { 1912 | "name": "Sebastian Bergmann", 1913 | "email": "sebastian@phpunit.de", 1914 | "role": "Developer" 1915 | } 1916 | ], 1917 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1918 | "time": "2018-07-08T19:23:20+00:00" 1919 | }, 1920 | { 1921 | "name": "phar-io/version", 1922 | "version": "2.0.1", 1923 | "source": { 1924 | "type": "git", 1925 | "url": "https://github.com/phar-io/version.git", 1926 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 1927 | }, 1928 | "dist": { 1929 | "type": "zip", 1930 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1931 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 1932 | "shasum": "" 1933 | }, 1934 | "require": { 1935 | "php": "^5.6 || ^7.0" 1936 | }, 1937 | "type": "library", 1938 | "autoload": { 1939 | "classmap": [ 1940 | "src/" 1941 | ] 1942 | }, 1943 | "notification-url": "https://packagist.org/downloads/", 1944 | "license": [ 1945 | "BSD-3-Clause" 1946 | ], 1947 | "authors": [ 1948 | { 1949 | "name": "Arne Blankerts", 1950 | "email": "arne@blankerts.de", 1951 | "role": "Developer" 1952 | }, 1953 | { 1954 | "name": "Sebastian Heuer", 1955 | "email": "sebastian@phpeople.de", 1956 | "role": "Developer" 1957 | }, 1958 | { 1959 | "name": "Sebastian Bergmann", 1960 | "email": "sebastian@phpunit.de", 1961 | "role": "Developer" 1962 | } 1963 | ], 1964 | "description": "Library for handling version information and constraints", 1965 | "time": "2018-07-08T19:19:57+00:00" 1966 | }, 1967 | { 1968 | "name": "phpdocumentor/reflection-common", 1969 | "version": "1.0.1", 1970 | "source": { 1971 | "type": "git", 1972 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1973 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 1974 | }, 1975 | "dist": { 1976 | "type": "zip", 1977 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1978 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 1979 | "shasum": "" 1980 | }, 1981 | "require": { 1982 | "php": ">=5.5" 1983 | }, 1984 | "require-dev": { 1985 | "phpunit/phpunit": "^4.6" 1986 | }, 1987 | "type": "library", 1988 | "extra": { 1989 | "branch-alias": { 1990 | "dev-master": "1.0.x-dev" 1991 | } 1992 | }, 1993 | "autoload": { 1994 | "psr-4": { 1995 | "phpDocumentor\\Reflection\\": [ 1996 | "src" 1997 | ] 1998 | } 1999 | }, 2000 | "notification-url": "https://packagist.org/downloads/", 2001 | "license": [ 2002 | "MIT" 2003 | ], 2004 | "authors": [ 2005 | { 2006 | "name": "Jaap van Otterdijk", 2007 | "email": "opensource@ijaap.nl" 2008 | } 2009 | ], 2010 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 2011 | "homepage": "http://www.phpdoc.org", 2012 | "keywords": [ 2013 | "FQSEN", 2014 | "phpDocumentor", 2015 | "phpdoc", 2016 | "reflection", 2017 | "static analysis" 2018 | ], 2019 | "time": "2017-09-11T18:02:19+00:00" 2020 | }, 2021 | { 2022 | "name": "phpdocumentor/reflection-docblock", 2023 | "version": "4.3.1", 2024 | "source": { 2025 | "type": "git", 2026 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 2027 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" 2028 | }, 2029 | "dist": { 2030 | "type": "zip", 2031 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", 2032 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", 2033 | "shasum": "" 2034 | }, 2035 | "require": { 2036 | "php": "^7.0", 2037 | "phpdocumentor/reflection-common": "^1.0.0", 2038 | "phpdocumentor/type-resolver": "^0.4.0", 2039 | "webmozart/assert": "^1.0" 2040 | }, 2041 | "require-dev": { 2042 | "doctrine/instantiator": "~1.0.5", 2043 | "mockery/mockery": "^1.0", 2044 | "phpunit/phpunit": "^6.4" 2045 | }, 2046 | "type": "library", 2047 | "extra": { 2048 | "branch-alias": { 2049 | "dev-master": "4.x-dev" 2050 | } 2051 | }, 2052 | "autoload": { 2053 | "psr-4": { 2054 | "phpDocumentor\\Reflection\\": [ 2055 | "src/" 2056 | ] 2057 | } 2058 | }, 2059 | "notification-url": "https://packagist.org/downloads/", 2060 | "license": [ 2061 | "MIT" 2062 | ], 2063 | "authors": [ 2064 | { 2065 | "name": "Mike van Riel", 2066 | "email": "me@mikevanriel.com" 2067 | } 2068 | ], 2069 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 2070 | "time": "2019-04-30T17:48:53+00:00" 2071 | }, 2072 | { 2073 | "name": "phpdocumentor/type-resolver", 2074 | "version": "0.4.0", 2075 | "source": { 2076 | "type": "git", 2077 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 2078 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 2079 | }, 2080 | "dist": { 2081 | "type": "zip", 2082 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 2083 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 2084 | "shasum": "" 2085 | }, 2086 | "require": { 2087 | "php": "^5.5 || ^7.0", 2088 | "phpdocumentor/reflection-common": "^1.0" 2089 | }, 2090 | "require-dev": { 2091 | "mockery/mockery": "^0.9.4", 2092 | "phpunit/phpunit": "^5.2||^4.8.24" 2093 | }, 2094 | "type": "library", 2095 | "extra": { 2096 | "branch-alias": { 2097 | "dev-master": "1.0.x-dev" 2098 | } 2099 | }, 2100 | "autoload": { 2101 | "psr-4": { 2102 | "phpDocumentor\\Reflection\\": [ 2103 | "src/" 2104 | ] 2105 | } 2106 | }, 2107 | "notification-url": "https://packagist.org/downloads/", 2108 | "license": [ 2109 | "MIT" 2110 | ], 2111 | "authors": [ 2112 | { 2113 | "name": "Mike van Riel", 2114 | "email": "me@mikevanriel.com" 2115 | } 2116 | ], 2117 | "time": "2017-07-14T14:27:02+00:00" 2118 | }, 2119 | { 2120 | "name": "phpspec/prophecy", 2121 | "version": "1.8.1", 2122 | "source": { 2123 | "type": "git", 2124 | "url": "https://github.com/phpspec/prophecy.git", 2125 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" 2126 | }, 2127 | "dist": { 2128 | "type": "zip", 2129 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 2130 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 2131 | "shasum": "" 2132 | }, 2133 | "require": { 2134 | "doctrine/instantiator": "^1.0.2", 2135 | "php": "^5.3|^7.0", 2136 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 2137 | "sebastian/comparator": "^1.1|^2.0|^3.0", 2138 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 2139 | }, 2140 | "require-dev": { 2141 | "phpspec/phpspec": "^2.5|^3.2", 2142 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 2143 | }, 2144 | "type": "library", 2145 | "extra": { 2146 | "branch-alias": { 2147 | "dev-master": "1.8.x-dev" 2148 | } 2149 | }, 2150 | "autoload": { 2151 | "psr-4": { 2152 | "Prophecy\\": "src/Prophecy" 2153 | } 2154 | }, 2155 | "notification-url": "https://packagist.org/downloads/", 2156 | "license": [ 2157 | "MIT" 2158 | ], 2159 | "authors": [ 2160 | { 2161 | "name": "Konstantin Kudryashov", 2162 | "email": "ever.zet@gmail.com", 2163 | "homepage": "http://everzet.com" 2164 | }, 2165 | { 2166 | "name": "Marcello Duarte", 2167 | "email": "marcello.duarte@gmail.com" 2168 | } 2169 | ], 2170 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2171 | "homepage": "https://github.com/phpspec/prophecy", 2172 | "keywords": [ 2173 | "Double", 2174 | "Dummy", 2175 | "fake", 2176 | "mock", 2177 | "spy", 2178 | "stub" 2179 | ], 2180 | "time": "2019-06-13T12:50:23+00:00" 2181 | }, 2182 | { 2183 | "name": "phpunit/php-code-coverage", 2184 | "version": "6.1.4", 2185 | "source": { 2186 | "type": "git", 2187 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2188 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" 2189 | }, 2190 | "dist": { 2191 | "type": "zip", 2192 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2193 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 2194 | "shasum": "" 2195 | }, 2196 | "require": { 2197 | "ext-dom": "*", 2198 | "ext-xmlwriter": "*", 2199 | "php": "^7.1", 2200 | "phpunit/php-file-iterator": "^2.0", 2201 | "phpunit/php-text-template": "^1.2.1", 2202 | "phpunit/php-token-stream": "^3.0", 2203 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 2204 | "sebastian/environment": "^3.1 || ^4.0", 2205 | "sebastian/version": "^2.0.1", 2206 | "theseer/tokenizer": "^1.1" 2207 | }, 2208 | "require-dev": { 2209 | "phpunit/phpunit": "^7.0" 2210 | }, 2211 | "suggest": { 2212 | "ext-xdebug": "^2.6.0" 2213 | }, 2214 | "type": "library", 2215 | "extra": { 2216 | "branch-alias": { 2217 | "dev-master": "6.1-dev" 2218 | } 2219 | }, 2220 | "autoload": { 2221 | "classmap": [ 2222 | "src/" 2223 | ] 2224 | }, 2225 | "notification-url": "https://packagist.org/downloads/", 2226 | "license": [ 2227 | "BSD-3-Clause" 2228 | ], 2229 | "authors": [ 2230 | { 2231 | "name": "Sebastian Bergmann", 2232 | "email": "sebastian@phpunit.de", 2233 | "role": "lead" 2234 | } 2235 | ], 2236 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 2237 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 2238 | "keywords": [ 2239 | "coverage", 2240 | "testing", 2241 | "xunit" 2242 | ], 2243 | "time": "2018-10-31T16:06:48+00:00" 2244 | }, 2245 | { 2246 | "name": "phpunit/php-file-iterator", 2247 | "version": "2.0.2", 2248 | "source": { 2249 | "type": "git", 2250 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 2251 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 2252 | }, 2253 | "dist": { 2254 | "type": "zip", 2255 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 2256 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 2257 | "shasum": "" 2258 | }, 2259 | "require": { 2260 | "php": "^7.1" 2261 | }, 2262 | "require-dev": { 2263 | "phpunit/phpunit": "^7.1" 2264 | }, 2265 | "type": "library", 2266 | "extra": { 2267 | "branch-alias": { 2268 | "dev-master": "2.0.x-dev" 2269 | } 2270 | }, 2271 | "autoload": { 2272 | "classmap": [ 2273 | "src/" 2274 | ] 2275 | }, 2276 | "notification-url": "https://packagist.org/downloads/", 2277 | "license": [ 2278 | "BSD-3-Clause" 2279 | ], 2280 | "authors": [ 2281 | { 2282 | "name": "Sebastian Bergmann", 2283 | "email": "sebastian@phpunit.de", 2284 | "role": "lead" 2285 | } 2286 | ], 2287 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2288 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2289 | "keywords": [ 2290 | "filesystem", 2291 | "iterator" 2292 | ], 2293 | "time": "2018-09-13T20:33:42+00:00" 2294 | }, 2295 | { 2296 | "name": "phpunit/php-text-template", 2297 | "version": "1.2.1", 2298 | "source": { 2299 | "type": "git", 2300 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2301 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2302 | }, 2303 | "dist": { 2304 | "type": "zip", 2305 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2306 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2307 | "shasum": "" 2308 | }, 2309 | "require": { 2310 | "php": ">=5.3.3" 2311 | }, 2312 | "type": "library", 2313 | "autoload": { 2314 | "classmap": [ 2315 | "src/" 2316 | ] 2317 | }, 2318 | "notification-url": "https://packagist.org/downloads/", 2319 | "license": [ 2320 | "BSD-3-Clause" 2321 | ], 2322 | "authors": [ 2323 | { 2324 | "name": "Sebastian Bergmann", 2325 | "email": "sebastian@phpunit.de", 2326 | "role": "lead" 2327 | } 2328 | ], 2329 | "description": "Simple template engine.", 2330 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2331 | "keywords": [ 2332 | "template" 2333 | ], 2334 | "time": "2015-06-21T13:50:34+00:00" 2335 | }, 2336 | { 2337 | "name": "phpunit/php-timer", 2338 | "version": "2.1.2", 2339 | "source": { 2340 | "type": "git", 2341 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2342 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 2343 | }, 2344 | "dist": { 2345 | "type": "zip", 2346 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 2347 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 2348 | "shasum": "" 2349 | }, 2350 | "require": { 2351 | "php": "^7.1" 2352 | }, 2353 | "require-dev": { 2354 | "phpunit/phpunit": "^7.0" 2355 | }, 2356 | "type": "library", 2357 | "extra": { 2358 | "branch-alias": { 2359 | "dev-master": "2.1-dev" 2360 | } 2361 | }, 2362 | "autoload": { 2363 | "classmap": [ 2364 | "src/" 2365 | ] 2366 | }, 2367 | "notification-url": "https://packagist.org/downloads/", 2368 | "license": [ 2369 | "BSD-3-Clause" 2370 | ], 2371 | "authors": [ 2372 | { 2373 | "name": "Sebastian Bergmann", 2374 | "email": "sebastian@phpunit.de", 2375 | "role": "lead" 2376 | } 2377 | ], 2378 | "description": "Utility class for timing", 2379 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2380 | "keywords": [ 2381 | "timer" 2382 | ], 2383 | "time": "2019-06-07T04:22:29+00:00" 2384 | }, 2385 | { 2386 | "name": "phpunit/php-token-stream", 2387 | "version": "3.0.1", 2388 | "source": { 2389 | "type": "git", 2390 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2391 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" 2392 | }, 2393 | "dist": { 2394 | "type": "zip", 2395 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", 2396 | "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", 2397 | "shasum": "" 2398 | }, 2399 | "require": { 2400 | "ext-tokenizer": "*", 2401 | "php": "^7.1" 2402 | }, 2403 | "require-dev": { 2404 | "phpunit/phpunit": "^7.0" 2405 | }, 2406 | "type": "library", 2407 | "extra": { 2408 | "branch-alias": { 2409 | "dev-master": "3.0-dev" 2410 | } 2411 | }, 2412 | "autoload": { 2413 | "classmap": [ 2414 | "src/" 2415 | ] 2416 | }, 2417 | "notification-url": "https://packagist.org/downloads/", 2418 | "license": [ 2419 | "BSD-3-Clause" 2420 | ], 2421 | "authors": [ 2422 | { 2423 | "name": "Sebastian Bergmann", 2424 | "email": "sebastian@phpunit.de" 2425 | } 2426 | ], 2427 | "description": "Wrapper around PHP's tokenizer extension.", 2428 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 2429 | "keywords": [ 2430 | "tokenizer" 2431 | ], 2432 | "time": "2018-10-30T05:52:18+00:00" 2433 | }, 2434 | { 2435 | "name": "phpunit/phpunit", 2436 | "version": "7.5.13", 2437 | "source": { 2438 | "type": "git", 2439 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2440 | "reference": "b9278591caa8630127f96c63b598712b699e671c" 2441 | }, 2442 | "dist": { 2443 | "type": "zip", 2444 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b9278591caa8630127f96c63b598712b699e671c", 2445 | "reference": "b9278591caa8630127f96c63b598712b699e671c", 2446 | "shasum": "" 2447 | }, 2448 | "require": { 2449 | "doctrine/instantiator": "^1.1", 2450 | "ext-dom": "*", 2451 | "ext-json": "*", 2452 | "ext-libxml": "*", 2453 | "ext-mbstring": "*", 2454 | "ext-xml": "*", 2455 | "myclabs/deep-copy": "^1.7", 2456 | "phar-io/manifest": "^1.0.2", 2457 | "phar-io/version": "^2.0", 2458 | "php": "^7.1", 2459 | "phpspec/prophecy": "^1.7", 2460 | "phpunit/php-code-coverage": "^6.0.7", 2461 | "phpunit/php-file-iterator": "^2.0.1", 2462 | "phpunit/php-text-template": "^1.2.1", 2463 | "phpunit/php-timer": "^2.1", 2464 | "sebastian/comparator": "^3.0", 2465 | "sebastian/diff": "^3.0", 2466 | "sebastian/environment": "^4.0", 2467 | "sebastian/exporter": "^3.1", 2468 | "sebastian/global-state": "^2.0", 2469 | "sebastian/object-enumerator": "^3.0.3", 2470 | "sebastian/resource-operations": "^2.0", 2471 | "sebastian/version": "^2.0.1" 2472 | }, 2473 | "conflict": { 2474 | "phpunit/phpunit-mock-objects": "*" 2475 | }, 2476 | "require-dev": { 2477 | "ext-pdo": "*" 2478 | }, 2479 | "suggest": { 2480 | "ext-soap": "*", 2481 | "ext-xdebug": "*", 2482 | "phpunit/php-invoker": "^2.0" 2483 | }, 2484 | "bin": [ 2485 | "phpunit" 2486 | ], 2487 | "type": "library", 2488 | "extra": { 2489 | "branch-alias": { 2490 | "dev-master": "7.5-dev" 2491 | } 2492 | }, 2493 | "autoload": { 2494 | "classmap": [ 2495 | "src/" 2496 | ] 2497 | }, 2498 | "notification-url": "https://packagist.org/downloads/", 2499 | "license": [ 2500 | "BSD-3-Clause" 2501 | ], 2502 | "authors": [ 2503 | { 2504 | "name": "Sebastian Bergmann", 2505 | "email": "sebastian@phpunit.de", 2506 | "role": "lead" 2507 | } 2508 | ], 2509 | "description": "The PHP Unit Testing framework.", 2510 | "homepage": "https://phpunit.de/", 2511 | "keywords": [ 2512 | "phpunit", 2513 | "testing", 2514 | "xunit" 2515 | ], 2516 | "time": "2019-06-19T12:01:51+00:00" 2517 | }, 2518 | { 2519 | "name": "psr/container", 2520 | "version": "1.0.0", 2521 | "source": { 2522 | "type": "git", 2523 | "url": "https://github.com/php-fig/container.git", 2524 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 2525 | }, 2526 | "dist": { 2527 | "type": "zip", 2528 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 2529 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 2530 | "shasum": "" 2531 | }, 2532 | "require": { 2533 | "php": ">=5.3.0" 2534 | }, 2535 | "type": "library", 2536 | "extra": { 2537 | "branch-alias": { 2538 | "dev-master": "1.0.x-dev" 2539 | } 2540 | }, 2541 | "autoload": { 2542 | "psr-4": { 2543 | "Psr\\Container\\": "src/" 2544 | } 2545 | }, 2546 | "notification-url": "https://packagist.org/downloads/", 2547 | "license": [ 2548 | "MIT" 2549 | ], 2550 | "authors": [ 2551 | { 2552 | "name": "PHP-FIG", 2553 | "homepage": "http://www.php-fig.org/" 2554 | } 2555 | ], 2556 | "description": "Common Container Interface (PHP FIG PSR-11)", 2557 | "homepage": "https://github.com/php-fig/container", 2558 | "keywords": [ 2559 | "PSR-11", 2560 | "container", 2561 | "container-interface", 2562 | "container-interop", 2563 | "psr" 2564 | ], 2565 | "time": "2017-02-14T16:28:37+00:00" 2566 | }, 2567 | { 2568 | "name": "psr/http-message", 2569 | "version": "1.0.1", 2570 | "source": { 2571 | "type": "git", 2572 | "url": "https://github.com/php-fig/http-message.git", 2573 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 2574 | }, 2575 | "dist": { 2576 | "type": "zip", 2577 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 2578 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 2579 | "shasum": "" 2580 | }, 2581 | "require": { 2582 | "php": ">=5.3.0" 2583 | }, 2584 | "type": "library", 2585 | "extra": { 2586 | "branch-alias": { 2587 | "dev-master": "1.0.x-dev" 2588 | } 2589 | }, 2590 | "autoload": { 2591 | "psr-4": { 2592 | "Psr\\Http\\Message\\": "src/" 2593 | } 2594 | }, 2595 | "notification-url": "https://packagist.org/downloads/", 2596 | "license": [ 2597 | "MIT" 2598 | ], 2599 | "authors": [ 2600 | { 2601 | "name": "PHP-FIG", 2602 | "homepage": "http://www.php-fig.org/" 2603 | } 2604 | ], 2605 | "description": "Common interface for HTTP messages", 2606 | "homepage": "https://github.com/php-fig/http-message", 2607 | "keywords": [ 2608 | "http", 2609 | "http-message", 2610 | "psr", 2611 | "psr-7", 2612 | "request", 2613 | "response" 2614 | ], 2615 | "time": "2016-08-06T14:39:51+00:00" 2616 | }, 2617 | { 2618 | "name": "psr/log", 2619 | "version": "1.1.0", 2620 | "source": { 2621 | "type": "git", 2622 | "url": "https://github.com/php-fig/log.git", 2623 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" 2624 | }, 2625 | "dist": { 2626 | "type": "zip", 2627 | "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 2628 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", 2629 | "shasum": "" 2630 | }, 2631 | "require": { 2632 | "php": ">=5.3.0" 2633 | }, 2634 | "type": "library", 2635 | "extra": { 2636 | "branch-alias": { 2637 | "dev-master": "1.0.x-dev" 2638 | } 2639 | }, 2640 | "autoload": { 2641 | "psr-4": { 2642 | "Psr\\Log\\": "Psr/Log/" 2643 | } 2644 | }, 2645 | "notification-url": "https://packagist.org/downloads/", 2646 | "license": [ 2647 | "MIT" 2648 | ], 2649 | "authors": [ 2650 | { 2651 | "name": "PHP-FIG", 2652 | "homepage": "http://www.php-fig.org/" 2653 | } 2654 | ], 2655 | "description": "Common interface for logging libraries", 2656 | "homepage": "https://github.com/php-fig/log", 2657 | "keywords": [ 2658 | "log", 2659 | "psr", 2660 | "psr-3" 2661 | ], 2662 | "time": "2018-11-20T15:27:04+00:00" 2663 | }, 2664 | { 2665 | "name": "ralouphie/getallheaders", 2666 | "version": "2.0.5", 2667 | "source": { 2668 | "type": "git", 2669 | "url": "https://github.com/ralouphie/getallheaders.git", 2670 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa" 2671 | }, 2672 | "dist": { 2673 | "type": "zip", 2674 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 2675 | "reference": "5601c8a83fbba7ef674a7369456d12f1e0d0eafa", 2676 | "shasum": "" 2677 | }, 2678 | "require": { 2679 | "php": ">=5.3" 2680 | }, 2681 | "require-dev": { 2682 | "phpunit/phpunit": "~3.7.0", 2683 | "satooshi/php-coveralls": ">=1.0" 2684 | }, 2685 | "type": "library", 2686 | "autoload": { 2687 | "files": [ 2688 | "src/getallheaders.php" 2689 | ] 2690 | }, 2691 | "notification-url": "https://packagist.org/downloads/", 2692 | "license": [ 2693 | "MIT" 2694 | ], 2695 | "authors": [ 2696 | { 2697 | "name": "Ralph Khattar", 2698 | "email": "ralph.khattar@gmail.com" 2699 | } 2700 | ], 2701 | "description": "A polyfill for getallheaders.", 2702 | "time": "2016-02-11T07:05:27+00:00" 2703 | }, 2704 | { 2705 | "name": "satooshi/php-coveralls", 2706 | "version": "v2.1.0", 2707 | "source": { 2708 | "type": "git", 2709 | "url": "https://github.com/php-coveralls/php-coveralls.git", 2710 | "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d" 2711 | }, 2712 | "dist": { 2713 | "type": "zip", 2714 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3b00c229726f892bfdadeaf01ea430ffd04a939d", 2715 | "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d", 2716 | "shasum": "" 2717 | }, 2718 | "require": { 2719 | "ext-json": "*", 2720 | "ext-simplexml": "*", 2721 | "guzzlehttp/guzzle": "^6.0", 2722 | "php": "^5.5 || ^7.0", 2723 | "psr/log": "^1.0", 2724 | "symfony/config": "^2.1 || ^3.0 || ^4.0", 2725 | "symfony/console": "^2.1 || ^3.0 || ^4.0", 2726 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", 2727 | "symfony/yaml": "^2.0 || ^3.0 || ^4.0" 2728 | }, 2729 | "require-dev": { 2730 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" 2731 | }, 2732 | "suggest": { 2733 | "symfony/http-kernel": "Allows Symfony integration" 2734 | }, 2735 | "bin": [ 2736 | "bin/php-coveralls" 2737 | ], 2738 | "type": "library", 2739 | "extra": { 2740 | "branch-alias": { 2741 | "dev-master": "2.1-dev" 2742 | } 2743 | }, 2744 | "autoload": { 2745 | "psr-4": { 2746 | "PhpCoveralls\\": "src/" 2747 | } 2748 | }, 2749 | "notification-url": "https://packagist.org/downloads/", 2750 | "license": [ 2751 | "MIT" 2752 | ], 2753 | "authors": [ 2754 | { 2755 | "name": "Kitamura Satoshi", 2756 | "email": "with.no.parachute@gmail.com", 2757 | "homepage": "https://www.facebook.com/satooshi.jp", 2758 | "role": "Original creator" 2759 | }, 2760 | { 2761 | "name": "Takashi Matsuo", 2762 | "email": "tmatsuo@google.com" 2763 | }, 2764 | { 2765 | "name": "Google Inc" 2766 | }, 2767 | { 2768 | "name": "Dariusz Ruminski", 2769 | "email": "dariusz.ruminski@gmail.com", 2770 | "homepage": "https://github.com/keradus" 2771 | }, 2772 | { 2773 | "name": "Contributors", 2774 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" 2775 | } 2776 | ], 2777 | "description": "PHP client library for Coveralls API", 2778 | "homepage": "https://github.com/php-coveralls/php-coveralls", 2779 | "keywords": [ 2780 | "ci", 2781 | "coverage", 2782 | "github", 2783 | "test" 2784 | ], 2785 | "abandoned": "php-coveralls/php-coveralls", 2786 | "time": "2018-05-22T23:11:08+00:00" 2787 | }, 2788 | { 2789 | "name": "sebastian/code-unit-reverse-lookup", 2790 | "version": "1.0.1", 2791 | "source": { 2792 | "type": "git", 2793 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2794 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 2795 | }, 2796 | "dist": { 2797 | "type": "zip", 2798 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2799 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2800 | "shasum": "" 2801 | }, 2802 | "require": { 2803 | "php": "^5.6 || ^7.0" 2804 | }, 2805 | "require-dev": { 2806 | "phpunit/phpunit": "^5.7 || ^6.0" 2807 | }, 2808 | "type": "library", 2809 | "extra": { 2810 | "branch-alias": { 2811 | "dev-master": "1.0.x-dev" 2812 | } 2813 | }, 2814 | "autoload": { 2815 | "classmap": [ 2816 | "src/" 2817 | ] 2818 | }, 2819 | "notification-url": "https://packagist.org/downloads/", 2820 | "license": [ 2821 | "BSD-3-Clause" 2822 | ], 2823 | "authors": [ 2824 | { 2825 | "name": "Sebastian Bergmann", 2826 | "email": "sebastian@phpunit.de" 2827 | } 2828 | ], 2829 | "description": "Looks up which function or method a line of code belongs to", 2830 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2831 | "time": "2017-03-04T06:30:41+00:00" 2832 | }, 2833 | { 2834 | "name": "sebastian/comparator", 2835 | "version": "3.0.2", 2836 | "source": { 2837 | "type": "git", 2838 | "url": "https://github.com/sebastianbergmann/comparator.git", 2839 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 2840 | }, 2841 | "dist": { 2842 | "type": "zip", 2843 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 2844 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 2845 | "shasum": "" 2846 | }, 2847 | "require": { 2848 | "php": "^7.1", 2849 | "sebastian/diff": "^3.0", 2850 | "sebastian/exporter": "^3.1" 2851 | }, 2852 | "require-dev": { 2853 | "phpunit/phpunit": "^7.1" 2854 | }, 2855 | "type": "library", 2856 | "extra": { 2857 | "branch-alias": { 2858 | "dev-master": "3.0-dev" 2859 | } 2860 | }, 2861 | "autoload": { 2862 | "classmap": [ 2863 | "src/" 2864 | ] 2865 | }, 2866 | "notification-url": "https://packagist.org/downloads/", 2867 | "license": [ 2868 | "BSD-3-Clause" 2869 | ], 2870 | "authors": [ 2871 | { 2872 | "name": "Jeff Welch", 2873 | "email": "whatthejeff@gmail.com" 2874 | }, 2875 | { 2876 | "name": "Volker Dusch", 2877 | "email": "github@wallbash.com" 2878 | }, 2879 | { 2880 | "name": "Bernhard Schussek", 2881 | "email": "bschussek@2bepublished.at" 2882 | }, 2883 | { 2884 | "name": "Sebastian Bergmann", 2885 | "email": "sebastian@phpunit.de" 2886 | } 2887 | ], 2888 | "description": "Provides the functionality to compare PHP values for equality", 2889 | "homepage": "https://github.com/sebastianbergmann/comparator", 2890 | "keywords": [ 2891 | "comparator", 2892 | "compare", 2893 | "equality" 2894 | ], 2895 | "time": "2018-07-12T15:12:46+00:00" 2896 | }, 2897 | { 2898 | "name": "sebastian/diff", 2899 | "version": "3.0.2", 2900 | "source": { 2901 | "type": "git", 2902 | "url": "https://github.com/sebastianbergmann/diff.git", 2903 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 2904 | }, 2905 | "dist": { 2906 | "type": "zip", 2907 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 2908 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 2909 | "shasum": "" 2910 | }, 2911 | "require": { 2912 | "php": "^7.1" 2913 | }, 2914 | "require-dev": { 2915 | "phpunit/phpunit": "^7.5 || ^8.0", 2916 | "symfony/process": "^2 || ^3.3 || ^4" 2917 | }, 2918 | "type": "library", 2919 | "extra": { 2920 | "branch-alias": { 2921 | "dev-master": "3.0-dev" 2922 | } 2923 | }, 2924 | "autoload": { 2925 | "classmap": [ 2926 | "src/" 2927 | ] 2928 | }, 2929 | "notification-url": "https://packagist.org/downloads/", 2930 | "license": [ 2931 | "BSD-3-Clause" 2932 | ], 2933 | "authors": [ 2934 | { 2935 | "name": "Kore Nordmann", 2936 | "email": "mail@kore-nordmann.de" 2937 | }, 2938 | { 2939 | "name": "Sebastian Bergmann", 2940 | "email": "sebastian@phpunit.de" 2941 | } 2942 | ], 2943 | "description": "Diff implementation", 2944 | "homepage": "https://github.com/sebastianbergmann/diff", 2945 | "keywords": [ 2946 | "diff", 2947 | "udiff", 2948 | "unidiff", 2949 | "unified diff" 2950 | ], 2951 | "time": "2019-02-04T06:01:07+00:00" 2952 | }, 2953 | { 2954 | "name": "sebastian/environment", 2955 | "version": "4.2.2", 2956 | "source": { 2957 | "type": "git", 2958 | "url": "https://github.com/sebastianbergmann/environment.git", 2959 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" 2960 | }, 2961 | "dist": { 2962 | "type": "zip", 2963 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 2964 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 2965 | "shasum": "" 2966 | }, 2967 | "require": { 2968 | "php": "^7.1" 2969 | }, 2970 | "require-dev": { 2971 | "phpunit/phpunit": "^7.5" 2972 | }, 2973 | "suggest": { 2974 | "ext-posix": "*" 2975 | }, 2976 | "type": "library", 2977 | "extra": { 2978 | "branch-alias": { 2979 | "dev-master": "4.2-dev" 2980 | } 2981 | }, 2982 | "autoload": { 2983 | "classmap": [ 2984 | "src/" 2985 | ] 2986 | }, 2987 | "notification-url": "https://packagist.org/downloads/", 2988 | "license": [ 2989 | "BSD-3-Clause" 2990 | ], 2991 | "authors": [ 2992 | { 2993 | "name": "Sebastian Bergmann", 2994 | "email": "sebastian@phpunit.de" 2995 | } 2996 | ], 2997 | "description": "Provides functionality to handle HHVM/PHP environments", 2998 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2999 | "keywords": [ 3000 | "Xdebug", 3001 | "environment", 3002 | "hhvm" 3003 | ], 3004 | "time": "2019-05-05T09:05:15+00:00" 3005 | }, 3006 | { 3007 | "name": "sebastian/exporter", 3008 | "version": "3.1.0", 3009 | "source": { 3010 | "type": "git", 3011 | "url": "https://github.com/sebastianbergmann/exporter.git", 3012 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 3013 | }, 3014 | "dist": { 3015 | "type": "zip", 3016 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 3017 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 3018 | "shasum": "" 3019 | }, 3020 | "require": { 3021 | "php": "^7.0", 3022 | "sebastian/recursion-context": "^3.0" 3023 | }, 3024 | "require-dev": { 3025 | "ext-mbstring": "*", 3026 | "phpunit/phpunit": "^6.0" 3027 | }, 3028 | "type": "library", 3029 | "extra": { 3030 | "branch-alias": { 3031 | "dev-master": "3.1.x-dev" 3032 | } 3033 | }, 3034 | "autoload": { 3035 | "classmap": [ 3036 | "src/" 3037 | ] 3038 | }, 3039 | "notification-url": "https://packagist.org/downloads/", 3040 | "license": [ 3041 | "BSD-3-Clause" 3042 | ], 3043 | "authors": [ 3044 | { 3045 | "name": "Jeff Welch", 3046 | "email": "whatthejeff@gmail.com" 3047 | }, 3048 | { 3049 | "name": "Volker Dusch", 3050 | "email": "github@wallbash.com" 3051 | }, 3052 | { 3053 | "name": "Bernhard Schussek", 3054 | "email": "bschussek@2bepublished.at" 3055 | }, 3056 | { 3057 | "name": "Sebastian Bergmann", 3058 | "email": "sebastian@phpunit.de" 3059 | }, 3060 | { 3061 | "name": "Adam Harvey", 3062 | "email": "aharvey@php.net" 3063 | } 3064 | ], 3065 | "description": "Provides the functionality to export PHP variables for visualization", 3066 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 3067 | "keywords": [ 3068 | "export", 3069 | "exporter" 3070 | ], 3071 | "time": "2017-04-03T13:19:02+00:00" 3072 | }, 3073 | { 3074 | "name": "sebastian/global-state", 3075 | "version": "2.0.0", 3076 | "source": { 3077 | "type": "git", 3078 | "url": "https://github.com/sebastianbergmann/global-state.git", 3079 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 3080 | }, 3081 | "dist": { 3082 | "type": "zip", 3083 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3084 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 3085 | "shasum": "" 3086 | }, 3087 | "require": { 3088 | "php": "^7.0" 3089 | }, 3090 | "require-dev": { 3091 | "phpunit/phpunit": "^6.0" 3092 | }, 3093 | "suggest": { 3094 | "ext-uopz": "*" 3095 | }, 3096 | "type": "library", 3097 | "extra": { 3098 | "branch-alias": { 3099 | "dev-master": "2.0-dev" 3100 | } 3101 | }, 3102 | "autoload": { 3103 | "classmap": [ 3104 | "src/" 3105 | ] 3106 | }, 3107 | "notification-url": "https://packagist.org/downloads/", 3108 | "license": [ 3109 | "BSD-3-Clause" 3110 | ], 3111 | "authors": [ 3112 | { 3113 | "name": "Sebastian Bergmann", 3114 | "email": "sebastian@phpunit.de" 3115 | } 3116 | ], 3117 | "description": "Snapshotting of global state", 3118 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3119 | "keywords": [ 3120 | "global state" 3121 | ], 3122 | "time": "2017-04-27T15:39:26+00:00" 3123 | }, 3124 | { 3125 | "name": "sebastian/object-enumerator", 3126 | "version": "3.0.3", 3127 | "source": { 3128 | "type": "git", 3129 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3130 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 3131 | }, 3132 | "dist": { 3133 | "type": "zip", 3134 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3135 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 3136 | "shasum": "" 3137 | }, 3138 | "require": { 3139 | "php": "^7.0", 3140 | "sebastian/object-reflector": "^1.1.1", 3141 | "sebastian/recursion-context": "^3.0" 3142 | }, 3143 | "require-dev": { 3144 | "phpunit/phpunit": "^6.0" 3145 | }, 3146 | "type": "library", 3147 | "extra": { 3148 | "branch-alias": { 3149 | "dev-master": "3.0.x-dev" 3150 | } 3151 | }, 3152 | "autoload": { 3153 | "classmap": [ 3154 | "src/" 3155 | ] 3156 | }, 3157 | "notification-url": "https://packagist.org/downloads/", 3158 | "license": [ 3159 | "BSD-3-Clause" 3160 | ], 3161 | "authors": [ 3162 | { 3163 | "name": "Sebastian Bergmann", 3164 | "email": "sebastian@phpunit.de" 3165 | } 3166 | ], 3167 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3168 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3169 | "time": "2017-08-03T12:35:26+00:00" 3170 | }, 3171 | { 3172 | "name": "sebastian/object-reflector", 3173 | "version": "1.1.1", 3174 | "source": { 3175 | "type": "git", 3176 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3177 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 3178 | }, 3179 | "dist": { 3180 | "type": "zip", 3181 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 3182 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 3183 | "shasum": "" 3184 | }, 3185 | "require": { 3186 | "php": "^7.0" 3187 | }, 3188 | "require-dev": { 3189 | "phpunit/phpunit": "^6.0" 3190 | }, 3191 | "type": "library", 3192 | "extra": { 3193 | "branch-alias": { 3194 | "dev-master": "1.1-dev" 3195 | } 3196 | }, 3197 | "autoload": { 3198 | "classmap": [ 3199 | "src/" 3200 | ] 3201 | }, 3202 | "notification-url": "https://packagist.org/downloads/", 3203 | "license": [ 3204 | "BSD-3-Clause" 3205 | ], 3206 | "authors": [ 3207 | { 3208 | "name": "Sebastian Bergmann", 3209 | "email": "sebastian@phpunit.de" 3210 | } 3211 | ], 3212 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3213 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3214 | "time": "2017-03-29T09:07:27+00:00" 3215 | }, 3216 | { 3217 | "name": "sebastian/recursion-context", 3218 | "version": "3.0.0", 3219 | "source": { 3220 | "type": "git", 3221 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3222 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 3223 | }, 3224 | "dist": { 3225 | "type": "zip", 3226 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3227 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 3228 | "shasum": "" 3229 | }, 3230 | "require": { 3231 | "php": "^7.0" 3232 | }, 3233 | "require-dev": { 3234 | "phpunit/phpunit": "^6.0" 3235 | }, 3236 | "type": "library", 3237 | "extra": { 3238 | "branch-alias": { 3239 | "dev-master": "3.0.x-dev" 3240 | } 3241 | }, 3242 | "autoload": { 3243 | "classmap": [ 3244 | "src/" 3245 | ] 3246 | }, 3247 | "notification-url": "https://packagist.org/downloads/", 3248 | "license": [ 3249 | "BSD-3-Clause" 3250 | ], 3251 | "authors": [ 3252 | { 3253 | "name": "Jeff Welch", 3254 | "email": "whatthejeff@gmail.com" 3255 | }, 3256 | { 3257 | "name": "Sebastian Bergmann", 3258 | "email": "sebastian@phpunit.de" 3259 | }, 3260 | { 3261 | "name": "Adam Harvey", 3262 | "email": "aharvey@php.net" 3263 | } 3264 | ], 3265 | "description": "Provides functionality to recursively process PHP variables", 3266 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3267 | "time": "2017-03-03T06:23:57+00:00" 3268 | }, 3269 | { 3270 | "name": "sebastian/resource-operations", 3271 | "version": "2.0.1", 3272 | "source": { 3273 | "type": "git", 3274 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3275 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 3276 | }, 3277 | "dist": { 3278 | "type": "zip", 3279 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3280 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 3281 | "shasum": "" 3282 | }, 3283 | "require": { 3284 | "php": "^7.1" 3285 | }, 3286 | "type": "library", 3287 | "extra": { 3288 | "branch-alias": { 3289 | "dev-master": "2.0-dev" 3290 | } 3291 | }, 3292 | "autoload": { 3293 | "classmap": [ 3294 | "src/" 3295 | ] 3296 | }, 3297 | "notification-url": "https://packagist.org/downloads/", 3298 | "license": [ 3299 | "BSD-3-Clause" 3300 | ], 3301 | "authors": [ 3302 | { 3303 | "name": "Sebastian Bergmann", 3304 | "email": "sebastian@phpunit.de" 3305 | } 3306 | ], 3307 | "description": "Provides a list of PHP built-in functions that operate on resources", 3308 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3309 | "time": "2018-10-04T04:07:39+00:00" 3310 | }, 3311 | { 3312 | "name": "sebastian/version", 3313 | "version": "2.0.1", 3314 | "source": { 3315 | "type": "git", 3316 | "url": "https://github.com/sebastianbergmann/version.git", 3317 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 3318 | }, 3319 | "dist": { 3320 | "type": "zip", 3321 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 3322 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 3323 | "shasum": "" 3324 | }, 3325 | "require": { 3326 | "php": ">=5.6" 3327 | }, 3328 | "type": "library", 3329 | "extra": { 3330 | "branch-alias": { 3331 | "dev-master": "2.0.x-dev" 3332 | } 3333 | }, 3334 | "autoload": { 3335 | "classmap": [ 3336 | "src/" 3337 | ] 3338 | }, 3339 | "notification-url": "https://packagist.org/downloads/", 3340 | "license": [ 3341 | "BSD-3-Clause" 3342 | ], 3343 | "authors": [ 3344 | { 3345 | "name": "Sebastian Bergmann", 3346 | "email": "sebastian@phpunit.de", 3347 | "role": "lead" 3348 | } 3349 | ], 3350 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3351 | "homepage": "https://github.com/sebastianbergmann/version", 3352 | "time": "2016-10-03T07:35:21+00:00" 3353 | }, 3354 | { 3355 | "name": "squizlabs/php_codesniffer", 3356 | "version": "2.9.2", 3357 | "source": { 3358 | "type": "git", 3359 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 3360 | "reference": "2acf168de78487db620ab4bc524135a13cfe6745" 3361 | }, 3362 | "dist": { 3363 | "type": "zip", 3364 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745", 3365 | "reference": "2acf168de78487db620ab4bc524135a13cfe6745", 3366 | "shasum": "" 3367 | }, 3368 | "require": { 3369 | "ext-simplexml": "*", 3370 | "ext-tokenizer": "*", 3371 | "ext-xmlwriter": "*", 3372 | "php": ">=5.1.2" 3373 | }, 3374 | "require-dev": { 3375 | "phpunit/phpunit": "~4.0" 3376 | }, 3377 | "bin": [ 3378 | "scripts/phpcs", 3379 | "scripts/phpcbf" 3380 | ], 3381 | "type": "library", 3382 | "extra": { 3383 | "branch-alias": { 3384 | "dev-master": "2.x-dev" 3385 | } 3386 | }, 3387 | "autoload": { 3388 | "classmap": [ 3389 | "CodeSniffer.php", 3390 | "CodeSniffer/CLI.php", 3391 | "CodeSniffer/Exception.php", 3392 | "CodeSniffer/File.php", 3393 | "CodeSniffer/Fixer.php", 3394 | "CodeSniffer/Report.php", 3395 | "CodeSniffer/Reporting.php", 3396 | "CodeSniffer/Sniff.php", 3397 | "CodeSniffer/Tokens.php", 3398 | "CodeSniffer/Reports/", 3399 | "CodeSniffer/Tokenizers/", 3400 | "CodeSniffer/DocGenerators/", 3401 | "CodeSniffer/Standards/AbstractPatternSniff.php", 3402 | "CodeSniffer/Standards/AbstractScopeSniff.php", 3403 | "CodeSniffer/Standards/AbstractVariableSniff.php", 3404 | "CodeSniffer/Standards/IncorrectPatternException.php", 3405 | "CodeSniffer/Standards/Generic/Sniffs/", 3406 | "CodeSniffer/Standards/MySource/Sniffs/", 3407 | "CodeSniffer/Standards/PEAR/Sniffs/", 3408 | "CodeSniffer/Standards/PSR1/Sniffs/", 3409 | "CodeSniffer/Standards/PSR2/Sniffs/", 3410 | "CodeSniffer/Standards/Squiz/Sniffs/", 3411 | "CodeSniffer/Standards/Zend/Sniffs/" 3412 | ] 3413 | }, 3414 | "notification-url": "https://packagist.org/downloads/", 3415 | "license": [ 3416 | "BSD-3-Clause" 3417 | ], 3418 | "authors": [ 3419 | { 3420 | "name": "Greg Sherwood", 3421 | "role": "lead" 3422 | } 3423 | ], 3424 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 3425 | "homepage": "http://www.squizlabs.com/php-codesniffer", 3426 | "keywords": [ 3427 | "phpcs", 3428 | "standards" 3429 | ], 3430 | "time": "2018-11-07T22:31:41+00:00" 3431 | }, 3432 | { 3433 | "name": "symfony/browser-kit", 3434 | "version": "v4.3.1", 3435 | "source": { 3436 | "type": "git", 3437 | "url": "https://github.com/symfony/browser-kit.git", 3438 | "reference": "e07d50e84b8cf489590f22244f4f609579b4a2c4" 3439 | }, 3440 | "dist": { 3441 | "type": "zip", 3442 | "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e07d50e84b8cf489590f22244f4f609579b4a2c4", 3443 | "reference": "e07d50e84b8cf489590f22244f4f609579b4a2c4", 3444 | "shasum": "" 3445 | }, 3446 | "require": { 3447 | "php": "^7.1.3", 3448 | "symfony/dom-crawler": "~3.4|~4.0" 3449 | }, 3450 | "require-dev": { 3451 | "symfony/css-selector": "~3.4|~4.0", 3452 | "symfony/http-client": "^4.3", 3453 | "symfony/mime": "^4.3", 3454 | "symfony/process": "~3.4|~4.0" 3455 | }, 3456 | "suggest": { 3457 | "symfony/process": "" 3458 | }, 3459 | "type": "library", 3460 | "extra": { 3461 | "branch-alias": { 3462 | "dev-master": "4.3-dev" 3463 | } 3464 | }, 3465 | "autoload": { 3466 | "psr-4": { 3467 | "Symfony\\Component\\BrowserKit\\": "" 3468 | }, 3469 | "exclude-from-classmap": [ 3470 | "/Tests/" 3471 | ] 3472 | }, 3473 | "notification-url": "https://packagist.org/downloads/", 3474 | "license": [ 3475 | "MIT" 3476 | ], 3477 | "authors": [ 3478 | { 3479 | "name": "Fabien Potencier", 3480 | "email": "fabien@symfony.com" 3481 | }, 3482 | { 3483 | "name": "Symfony Community", 3484 | "homepage": "https://symfony.com/contributors" 3485 | } 3486 | ], 3487 | "description": "Symfony BrowserKit Component", 3488 | "homepage": "https://symfony.com", 3489 | "time": "2019-05-30T16:10:05+00:00" 3490 | }, 3491 | { 3492 | "name": "symfony/config", 3493 | "version": "v4.3.1", 3494 | "source": { 3495 | "type": "git", 3496 | "url": "https://github.com/symfony/config.git", 3497 | "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb" 3498 | }, 3499 | "dist": { 3500 | "type": "zip", 3501 | "url": "https://api.github.com/repos/symfony/config/zipball/6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", 3502 | "reference": "6379ee07398643e09e6ed1e87d9c62dfcad7f4eb", 3503 | "shasum": "" 3504 | }, 3505 | "require": { 3506 | "php": "^7.1.3", 3507 | "symfony/filesystem": "~3.4|~4.0", 3508 | "symfony/polyfill-ctype": "~1.8" 3509 | }, 3510 | "conflict": { 3511 | "symfony/finder": "<3.4" 3512 | }, 3513 | "require-dev": { 3514 | "symfony/dependency-injection": "~3.4|~4.0", 3515 | "symfony/event-dispatcher": "~3.4|~4.0", 3516 | "symfony/finder": "~3.4|~4.0", 3517 | "symfony/messenger": "~4.1", 3518 | "symfony/yaml": "~3.4|~4.0" 3519 | }, 3520 | "suggest": { 3521 | "symfony/yaml": "To use the yaml reference dumper" 3522 | }, 3523 | "type": "library", 3524 | "extra": { 3525 | "branch-alias": { 3526 | "dev-master": "4.3-dev" 3527 | } 3528 | }, 3529 | "autoload": { 3530 | "psr-4": { 3531 | "Symfony\\Component\\Config\\": "" 3532 | }, 3533 | "exclude-from-classmap": [ 3534 | "/Tests/" 3535 | ] 3536 | }, 3537 | "notification-url": "https://packagist.org/downloads/", 3538 | "license": [ 3539 | "MIT" 3540 | ], 3541 | "authors": [ 3542 | { 3543 | "name": "Fabien Potencier", 3544 | "email": "fabien@symfony.com" 3545 | }, 3546 | { 3547 | "name": "Symfony Community", 3548 | "homepage": "https://symfony.com/contributors" 3549 | } 3550 | ], 3551 | "description": "Symfony Config Component", 3552 | "homepage": "https://symfony.com", 3553 | "time": "2019-05-30T16:10:05+00:00" 3554 | }, 3555 | { 3556 | "name": "symfony/console", 3557 | "version": "v4.3.1", 3558 | "source": { 3559 | "type": "git", 3560 | "url": "https://github.com/symfony/console.git", 3561 | "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64" 3562 | }, 3563 | "dist": { 3564 | "type": "zip", 3565 | "url": "https://api.github.com/repos/symfony/console/zipball/d50bbeeb0e17e6dd4124ea391eff235e932cbf64", 3566 | "reference": "d50bbeeb0e17e6dd4124ea391eff235e932cbf64", 3567 | "shasum": "" 3568 | }, 3569 | "require": { 3570 | "php": "^7.1.3", 3571 | "symfony/polyfill-mbstring": "~1.0", 3572 | "symfony/polyfill-php73": "^1.8", 3573 | "symfony/service-contracts": "^1.1" 3574 | }, 3575 | "conflict": { 3576 | "symfony/dependency-injection": "<3.4", 3577 | "symfony/event-dispatcher": "<4.3", 3578 | "symfony/process": "<3.3" 3579 | }, 3580 | "provide": { 3581 | "psr/log-implementation": "1.0" 3582 | }, 3583 | "require-dev": { 3584 | "psr/log": "~1.0", 3585 | "symfony/config": "~3.4|~4.0", 3586 | "symfony/dependency-injection": "~3.4|~4.0", 3587 | "symfony/event-dispatcher": "^4.3", 3588 | "symfony/lock": "~3.4|~4.0", 3589 | "symfony/process": "~3.4|~4.0", 3590 | "symfony/var-dumper": "^4.3" 3591 | }, 3592 | "suggest": { 3593 | "psr/log": "For using the console logger", 3594 | "symfony/event-dispatcher": "", 3595 | "symfony/lock": "", 3596 | "symfony/process": "" 3597 | }, 3598 | "type": "library", 3599 | "extra": { 3600 | "branch-alias": { 3601 | "dev-master": "4.3-dev" 3602 | } 3603 | }, 3604 | "autoload": { 3605 | "psr-4": { 3606 | "Symfony\\Component\\Console\\": "" 3607 | }, 3608 | "exclude-from-classmap": [ 3609 | "/Tests/" 3610 | ] 3611 | }, 3612 | "notification-url": "https://packagist.org/downloads/", 3613 | "license": [ 3614 | "MIT" 3615 | ], 3616 | "authors": [ 3617 | { 3618 | "name": "Fabien Potencier", 3619 | "email": "fabien@symfony.com" 3620 | }, 3621 | { 3622 | "name": "Symfony Community", 3623 | "homepage": "https://symfony.com/contributors" 3624 | } 3625 | ], 3626 | "description": "Symfony Console Component", 3627 | "homepage": "https://symfony.com", 3628 | "time": "2019-06-05T13:25:51+00:00" 3629 | }, 3630 | { 3631 | "name": "symfony/css-selector", 3632 | "version": "v4.3.1", 3633 | "source": { 3634 | "type": "git", 3635 | "url": "https://github.com/symfony/css-selector.git", 3636 | "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" 3637 | }, 3638 | "dist": { 3639 | "type": "zip", 3640 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", 3641 | "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", 3642 | "shasum": "" 3643 | }, 3644 | "require": { 3645 | "php": "^7.1.3" 3646 | }, 3647 | "type": "library", 3648 | "extra": { 3649 | "branch-alias": { 3650 | "dev-master": "4.3-dev" 3651 | } 3652 | }, 3653 | "autoload": { 3654 | "psr-4": { 3655 | "Symfony\\Component\\CssSelector\\": "" 3656 | }, 3657 | "exclude-from-classmap": [ 3658 | "/Tests/" 3659 | ] 3660 | }, 3661 | "notification-url": "https://packagist.org/downloads/", 3662 | "license": [ 3663 | "MIT" 3664 | ], 3665 | "authors": [ 3666 | { 3667 | "name": "Jean-François Simon", 3668 | "email": "jeanfrancois.simon@sensiolabs.com" 3669 | }, 3670 | { 3671 | "name": "Fabien Potencier", 3672 | "email": "fabien@symfony.com" 3673 | }, 3674 | { 3675 | "name": "Symfony Community", 3676 | "homepage": "https://symfony.com/contributors" 3677 | } 3678 | ], 3679 | "description": "Symfony CssSelector Component", 3680 | "homepage": "https://symfony.com", 3681 | "time": "2019-01-16T21:53:39+00:00" 3682 | }, 3683 | { 3684 | "name": "symfony/dom-crawler", 3685 | "version": "v4.3.1", 3686 | "source": { 3687 | "type": "git", 3688 | "url": "https://github.com/symfony/dom-crawler.git", 3689 | "reference": "06ee58fbc9a8130f1d35b5280e15235a0515d457" 3690 | }, 3691 | "dist": { 3692 | "type": "zip", 3693 | "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/06ee58fbc9a8130f1d35b5280e15235a0515d457", 3694 | "reference": "06ee58fbc9a8130f1d35b5280e15235a0515d457", 3695 | "shasum": "" 3696 | }, 3697 | "require": { 3698 | "php": "^7.1.3", 3699 | "symfony/polyfill-ctype": "~1.8", 3700 | "symfony/polyfill-mbstring": "~1.0" 3701 | }, 3702 | "conflict": { 3703 | "masterminds/html5": "<2.6" 3704 | }, 3705 | "require-dev": { 3706 | "masterminds/html5": "^2.6", 3707 | "symfony/css-selector": "~3.4|~4.0" 3708 | }, 3709 | "suggest": { 3710 | "symfony/css-selector": "" 3711 | }, 3712 | "type": "library", 3713 | "extra": { 3714 | "branch-alias": { 3715 | "dev-master": "4.3-dev" 3716 | } 3717 | }, 3718 | "autoload": { 3719 | "psr-4": { 3720 | "Symfony\\Component\\DomCrawler\\": "" 3721 | }, 3722 | "exclude-from-classmap": [ 3723 | "/Tests/" 3724 | ] 3725 | }, 3726 | "notification-url": "https://packagist.org/downloads/", 3727 | "license": [ 3728 | "MIT" 3729 | ], 3730 | "authors": [ 3731 | { 3732 | "name": "Fabien Potencier", 3733 | "email": "fabien@symfony.com" 3734 | }, 3735 | { 3736 | "name": "Symfony Community", 3737 | "homepage": "https://symfony.com/contributors" 3738 | } 3739 | ], 3740 | "description": "Symfony DomCrawler Component", 3741 | "homepage": "https://symfony.com", 3742 | "time": "2019-05-31T18:55:30+00:00" 3743 | }, 3744 | { 3745 | "name": "symfony/event-dispatcher", 3746 | "version": "v4.3.1", 3747 | "source": { 3748 | "type": "git", 3749 | "url": "https://github.com/symfony/event-dispatcher.git", 3750 | "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f" 3751 | }, 3752 | "dist": { 3753 | "type": "zip", 3754 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4e6c670af81c4fb0b6c08b035530a9915d0b691f", 3755 | "reference": "4e6c670af81c4fb0b6c08b035530a9915d0b691f", 3756 | "shasum": "" 3757 | }, 3758 | "require": { 3759 | "php": "^7.1.3", 3760 | "symfony/event-dispatcher-contracts": "^1.1" 3761 | }, 3762 | "conflict": { 3763 | "symfony/dependency-injection": "<3.4" 3764 | }, 3765 | "provide": { 3766 | "psr/event-dispatcher-implementation": "1.0", 3767 | "symfony/event-dispatcher-implementation": "1.1" 3768 | }, 3769 | "require-dev": { 3770 | "psr/log": "~1.0", 3771 | "symfony/config": "~3.4|~4.0", 3772 | "symfony/dependency-injection": "~3.4|~4.0", 3773 | "symfony/expression-language": "~3.4|~4.0", 3774 | "symfony/http-foundation": "^3.4|^4.0", 3775 | "symfony/service-contracts": "^1.1", 3776 | "symfony/stopwatch": "~3.4|~4.0" 3777 | }, 3778 | "suggest": { 3779 | "symfony/dependency-injection": "", 3780 | "symfony/http-kernel": "" 3781 | }, 3782 | "type": "library", 3783 | "extra": { 3784 | "branch-alias": { 3785 | "dev-master": "4.3-dev" 3786 | } 3787 | }, 3788 | "autoload": { 3789 | "psr-4": { 3790 | "Symfony\\Component\\EventDispatcher\\": "" 3791 | }, 3792 | "exclude-from-classmap": [ 3793 | "/Tests/" 3794 | ] 3795 | }, 3796 | "notification-url": "https://packagist.org/downloads/", 3797 | "license": [ 3798 | "MIT" 3799 | ], 3800 | "authors": [ 3801 | { 3802 | "name": "Fabien Potencier", 3803 | "email": "fabien@symfony.com" 3804 | }, 3805 | { 3806 | "name": "Symfony Community", 3807 | "homepage": "https://symfony.com/contributors" 3808 | } 3809 | ], 3810 | "description": "Symfony EventDispatcher Component", 3811 | "homepage": "https://symfony.com", 3812 | "time": "2019-05-30T16:10:05+00:00" 3813 | }, 3814 | { 3815 | "name": "symfony/event-dispatcher-contracts", 3816 | "version": "v1.1.5", 3817 | "source": { 3818 | "type": "git", 3819 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 3820 | "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" 3821 | }, 3822 | "dist": { 3823 | "type": "zip", 3824 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", 3825 | "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", 3826 | "shasum": "" 3827 | }, 3828 | "require": { 3829 | "php": "^7.1.3" 3830 | }, 3831 | "suggest": { 3832 | "psr/event-dispatcher": "", 3833 | "symfony/event-dispatcher-implementation": "" 3834 | }, 3835 | "type": "library", 3836 | "extra": { 3837 | "branch-alias": { 3838 | "dev-master": "1.1-dev" 3839 | } 3840 | }, 3841 | "autoload": { 3842 | "psr-4": { 3843 | "Symfony\\Contracts\\EventDispatcher\\": "" 3844 | } 3845 | }, 3846 | "notification-url": "https://packagist.org/downloads/", 3847 | "license": [ 3848 | "MIT" 3849 | ], 3850 | "authors": [ 3851 | { 3852 | "name": "Nicolas Grekas", 3853 | "email": "p@tchwork.com" 3854 | }, 3855 | { 3856 | "name": "Symfony Community", 3857 | "homepage": "https://symfony.com/contributors" 3858 | } 3859 | ], 3860 | "description": "Generic abstractions related to dispatching event", 3861 | "homepage": "https://symfony.com", 3862 | "keywords": [ 3863 | "abstractions", 3864 | "contracts", 3865 | "decoupling", 3866 | "interfaces", 3867 | "interoperability", 3868 | "standards" 3869 | ], 3870 | "time": "2019-06-20T06:46:26+00:00" 3871 | }, 3872 | { 3873 | "name": "symfony/filesystem", 3874 | "version": "v4.3.1", 3875 | "source": { 3876 | "type": "git", 3877 | "url": "https://github.com/symfony/filesystem.git", 3878 | "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf" 3879 | }, 3880 | "dist": { 3881 | "type": "zip", 3882 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/bf2af40d738dec5e433faea7b00daa4431d0a4cf", 3883 | "reference": "bf2af40d738dec5e433faea7b00daa4431d0a4cf", 3884 | "shasum": "" 3885 | }, 3886 | "require": { 3887 | "php": "^7.1.3", 3888 | "symfony/polyfill-ctype": "~1.8" 3889 | }, 3890 | "type": "library", 3891 | "extra": { 3892 | "branch-alias": { 3893 | "dev-master": "4.3-dev" 3894 | } 3895 | }, 3896 | "autoload": { 3897 | "psr-4": { 3898 | "Symfony\\Component\\Filesystem\\": "" 3899 | }, 3900 | "exclude-from-classmap": [ 3901 | "/Tests/" 3902 | ] 3903 | }, 3904 | "notification-url": "https://packagist.org/downloads/", 3905 | "license": [ 3906 | "MIT" 3907 | ], 3908 | "authors": [ 3909 | { 3910 | "name": "Fabien Potencier", 3911 | "email": "fabien@symfony.com" 3912 | }, 3913 | { 3914 | "name": "Symfony Community", 3915 | "homepage": "https://symfony.com/contributors" 3916 | } 3917 | ], 3918 | "description": "Symfony Filesystem Component", 3919 | "homepage": "https://symfony.com", 3920 | "time": "2019-06-03T20:27:40+00:00" 3921 | }, 3922 | { 3923 | "name": "symfony/finder", 3924 | "version": "v4.3.1", 3925 | "source": { 3926 | "type": "git", 3927 | "url": "https://github.com/symfony/finder.git", 3928 | "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176" 3929 | }, 3930 | "dist": { 3931 | "type": "zip", 3932 | "url": "https://api.github.com/repos/symfony/finder/zipball/b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", 3933 | "reference": "b3d4f4c0e4eadfdd8b296af9ca637cfbf51d8176", 3934 | "shasum": "" 3935 | }, 3936 | "require": { 3937 | "php": "^7.1.3" 3938 | }, 3939 | "type": "library", 3940 | "extra": { 3941 | "branch-alias": { 3942 | "dev-master": "4.3-dev" 3943 | } 3944 | }, 3945 | "autoload": { 3946 | "psr-4": { 3947 | "Symfony\\Component\\Finder\\": "" 3948 | }, 3949 | "exclude-from-classmap": [ 3950 | "/Tests/" 3951 | ] 3952 | }, 3953 | "notification-url": "https://packagist.org/downloads/", 3954 | "license": [ 3955 | "MIT" 3956 | ], 3957 | "authors": [ 3958 | { 3959 | "name": "Fabien Potencier", 3960 | "email": "fabien@symfony.com" 3961 | }, 3962 | { 3963 | "name": "Symfony Community", 3964 | "homepage": "https://symfony.com/contributors" 3965 | } 3966 | ], 3967 | "description": "Symfony Finder Component", 3968 | "homepage": "https://symfony.com", 3969 | "time": "2019-05-26T20:47:49+00:00" 3970 | }, 3971 | { 3972 | "name": "symfony/polyfill-ctype", 3973 | "version": "v1.11.0", 3974 | "source": { 3975 | "type": "git", 3976 | "url": "https://github.com/symfony/polyfill-ctype.git", 3977 | "reference": "82ebae02209c21113908c229e9883c419720738a" 3978 | }, 3979 | "dist": { 3980 | "type": "zip", 3981 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", 3982 | "reference": "82ebae02209c21113908c229e9883c419720738a", 3983 | "shasum": "" 3984 | }, 3985 | "require": { 3986 | "php": ">=5.3.3" 3987 | }, 3988 | "suggest": { 3989 | "ext-ctype": "For best performance" 3990 | }, 3991 | "type": "library", 3992 | "extra": { 3993 | "branch-alias": { 3994 | "dev-master": "1.11-dev" 3995 | } 3996 | }, 3997 | "autoload": { 3998 | "psr-4": { 3999 | "Symfony\\Polyfill\\Ctype\\": "" 4000 | }, 4001 | "files": [ 4002 | "bootstrap.php" 4003 | ] 4004 | }, 4005 | "notification-url": "https://packagist.org/downloads/", 4006 | "license": [ 4007 | "MIT" 4008 | ], 4009 | "authors": [ 4010 | { 4011 | "name": "Symfony Community", 4012 | "homepage": "https://symfony.com/contributors" 4013 | }, 4014 | { 4015 | "name": "Gert de Pagter", 4016 | "email": "BackEndTea@gmail.com" 4017 | } 4018 | ], 4019 | "description": "Symfony polyfill for ctype functions", 4020 | "homepage": "https://symfony.com", 4021 | "keywords": [ 4022 | "compatibility", 4023 | "ctype", 4024 | "polyfill", 4025 | "portable" 4026 | ], 4027 | "time": "2019-02-06T07:57:58+00:00" 4028 | }, 4029 | { 4030 | "name": "symfony/polyfill-mbstring", 4031 | "version": "v1.11.0", 4032 | "source": { 4033 | "type": "git", 4034 | "url": "https://github.com/symfony/polyfill-mbstring.git", 4035 | "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" 4036 | }, 4037 | "dist": { 4038 | "type": "zip", 4039 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", 4040 | "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", 4041 | "shasum": "" 4042 | }, 4043 | "require": { 4044 | "php": ">=5.3.3" 4045 | }, 4046 | "suggest": { 4047 | "ext-mbstring": "For best performance" 4048 | }, 4049 | "type": "library", 4050 | "extra": { 4051 | "branch-alias": { 4052 | "dev-master": "1.11-dev" 4053 | } 4054 | }, 4055 | "autoload": { 4056 | "psr-4": { 4057 | "Symfony\\Polyfill\\Mbstring\\": "" 4058 | }, 4059 | "files": [ 4060 | "bootstrap.php" 4061 | ] 4062 | }, 4063 | "notification-url": "https://packagist.org/downloads/", 4064 | "license": [ 4065 | "MIT" 4066 | ], 4067 | "authors": [ 4068 | { 4069 | "name": "Nicolas Grekas", 4070 | "email": "p@tchwork.com" 4071 | }, 4072 | { 4073 | "name": "Symfony Community", 4074 | "homepage": "https://symfony.com/contributors" 4075 | } 4076 | ], 4077 | "description": "Symfony polyfill for the Mbstring extension", 4078 | "homepage": "https://symfony.com", 4079 | "keywords": [ 4080 | "compatibility", 4081 | "mbstring", 4082 | "polyfill", 4083 | "portable", 4084 | "shim" 4085 | ], 4086 | "time": "2019-02-06T07:57:58+00:00" 4087 | }, 4088 | { 4089 | "name": "symfony/polyfill-php73", 4090 | "version": "v1.11.0", 4091 | "source": { 4092 | "type": "git", 4093 | "url": "https://github.com/symfony/polyfill-php73.git", 4094 | "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" 4095 | }, 4096 | "dist": { 4097 | "type": "zip", 4098 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", 4099 | "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", 4100 | "shasum": "" 4101 | }, 4102 | "require": { 4103 | "php": ">=5.3.3" 4104 | }, 4105 | "type": "library", 4106 | "extra": { 4107 | "branch-alias": { 4108 | "dev-master": "1.11-dev" 4109 | } 4110 | }, 4111 | "autoload": { 4112 | "psr-4": { 4113 | "Symfony\\Polyfill\\Php73\\": "" 4114 | }, 4115 | "files": [ 4116 | "bootstrap.php" 4117 | ], 4118 | "classmap": [ 4119 | "Resources/stubs" 4120 | ] 4121 | }, 4122 | "notification-url": "https://packagist.org/downloads/", 4123 | "license": [ 4124 | "MIT" 4125 | ], 4126 | "authors": [ 4127 | { 4128 | "name": "Nicolas Grekas", 4129 | "email": "p@tchwork.com" 4130 | }, 4131 | { 4132 | "name": "Symfony Community", 4133 | "homepage": "https://symfony.com/contributors" 4134 | } 4135 | ], 4136 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 4137 | "homepage": "https://symfony.com", 4138 | "keywords": [ 4139 | "compatibility", 4140 | "polyfill", 4141 | "portable", 4142 | "shim" 4143 | ], 4144 | "time": "2019-02-06T07:57:58+00:00" 4145 | }, 4146 | { 4147 | "name": "symfony/process", 4148 | "version": "v4.3.1", 4149 | "source": { 4150 | "type": "git", 4151 | "url": "https://github.com/symfony/process.git", 4152 | "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" 4153 | }, 4154 | "dist": { 4155 | "type": "zip", 4156 | "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", 4157 | "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", 4158 | "shasum": "" 4159 | }, 4160 | "require": { 4161 | "php": "^7.1.3" 4162 | }, 4163 | "type": "library", 4164 | "extra": { 4165 | "branch-alias": { 4166 | "dev-master": "4.3-dev" 4167 | } 4168 | }, 4169 | "autoload": { 4170 | "psr-4": { 4171 | "Symfony\\Component\\Process\\": "" 4172 | }, 4173 | "exclude-from-classmap": [ 4174 | "/Tests/" 4175 | ] 4176 | }, 4177 | "notification-url": "https://packagist.org/downloads/", 4178 | "license": [ 4179 | "MIT" 4180 | ], 4181 | "authors": [ 4182 | { 4183 | "name": "Fabien Potencier", 4184 | "email": "fabien@symfony.com" 4185 | }, 4186 | { 4187 | "name": "Symfony Community", 4188 | "homepage": "https://symfony.com/contributors" 4189 | } 4190 | ], 4191 | "description": "Symfony Process Component", 4192 | "homepage": "https://symfony.com", 4193 | "time": "2019-05-30T16:10:05+00:00" 4194 | }, 4195 | { 4196 | "name": "symfony/service-contracts", 4197 | "version": "v1.1.5", 4198 | "source": { 4199 | "type": "git", 4200 | "url": "https://github.com/symfony/service-contracts.git", 4201 | "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" 4202 | }, 4203 | "dist": { 4204 | "type": "zip", 4205 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", 4206 | "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", 4207 | "shasum": "" 4208 | }, 4209 | "require": { 4210 | "php": "^7.1.3", 4211 | "psr/container": "^1.0" 4212 | }, 4213 | "suggest": { 4214 | "symfony/service-implementation": "" 4215 | }, 4216 | "type": "library", 4217 | "extra": { 4218 | "branch-alias": { 4219 | "dev-master": "1.1-dev" 4220 | } 4221 | }, 4222 | "autoload": { 4223 | "psr-4": { 4224 | "Symfony\\Contracts\\Service\\": "" 4225 | } 4226 | }, 4227 | "notification-url": "https://packagist.org/downloads/", 4228 | "license": [ 4229 | "MIT" 4230 | ], 4231 | "authors": [ 4232 | { 4233 | "name": "Nicolas Grekas", 4234 | "email": "p@tchwork.com" 4235 | }, 4236 | { 4237 | "name": "Symfony Community", 4238 | "homepage": "https://symfony.com/contributors" 4239 | } 4240 | ], 4241 | "description": "Generic abstractions related to writing services", 4242 | "homepage": "https://symfony.com", 4243 | "keywords": [ 4244 | "abstractions", 4245 | "contracts", 4246 | "decoupling", 4247 | "interfaces", 4248 | "interoperability", 4249 | "standards" 4250 | ], 4251 | "time": "2019-06-13T11:15:36+00:00" 4252 | }, 4253 | { 4254 | "name": "symfony/stopwatch", 4255 | "version": "v4.3.1", 4256 | "source": { 4257 | "type": "git", 4258 | "url": "https://github.com/symfony/stopwatch.git", 4259 | "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b" 4260 | }, 4261 | "dist": { 4262 | "type": "zip", 4263 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6b100e9309e8979cf1978ac1778eb155c1f7d93b", 4264 | "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b", 4265 | "shasum": "" 4266 | }, 4267 | "require": { 4268 | "php": "^7.1.3", 4269 | "symfony/service-contracts": "^1.0" 4270 | }, 4271 | "type": "library", 4272 | "extra": { 4273 | "branch-alias": { 4274 | "dev-master": "4.3-dev" 4275 | } 4276 | }, 4277 | "autoload": { 4278 | "psr-4": { 4279 | "Symfony\\Component\\Stopwatch\\": "" 4280 | }, 4281 | "exclude-from-classmap": [ 4282 | "/Tests/" 4283 | ] 4284 | }, 4285 | "notification-url": "https://packagist.org/downloads/", 4286 | "license": [ 4287 | "MIT" 4288 | ], 4289 | "authors": [ 4290 | { 4291 | "name": "Fabien Potencier", 4292 | "email": "fabien@symfony.com" 4293 | }, 4294 | { 4295 | "name": "Symfony Community", 4296 | "homepage": "https://symfony.com/contributors" 4297 | } 4298 | ], 4299 | "description": "Symfony Stopwatch Component", 4300 | "homepage": "https://symfony.com", 4301 | "time": "2019-05-27T08:16:38+00:00" 4302 | }, 4303 | { 4304 | "name": "symfony/yaml", 4305 | "version": "v4.3.1", 4306 | "source": { 4307 | "type": "git", 4308 | "url": "https://github.com/symfony/yaml.git", 4309 | "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99" 4310 | }, 4311 | "dist": { 4312 | "type": "zip", 4313 | "url": "https://api.github.com/repos/symfony/yaml/zipball/c60ecf5ba842324433b46f58dc7afc4487dbab99", 4314 | "reference": "c60ecf5ba842324433b46f58dc7afc4487dbab99", 4315 | "shasum": "" 4316 | }, 4317 | "require": { 4318 | "php": "^7.1.3", 4319 | "symfony/polyfill-ctype": "~1.8" 4320 | }, 4321 | "conflict": { 4322 | "symfony/console": "<3.4" 4323 | }, 4324 | "require-dev": { 4325 | "symfony/console": "~3.4|~4.0" 4326 | }, 4327 | "suggest": { 4328 | "symfony/console": "For validating YAML files using the lint command" 4329 | }, 4330 | "type": "library", 4331 | "extra": { 4332 | "branch-alias": { 4333 | "dev-master": "4.3-dev" 4334 | } 4335 | }, 4336 | "autoload": { 4337 | "psr-4": { 4338 | "Symfony\\Component\\Yaml\\": "" 4339 | }, 4340 | "exclude-from-classmap": [ 4341 | "/Tests/" 4342 | ] 4343 | }, 4344 | "notification-url": "https://packagist.org/downloads/", 4345 | "license": [ 4346 | "MIT" 4347 | ], 4348 | "authors": [ 4349 | { 4350 | "name": "Fabien Potencier", 4351 | "email": "fabien@symfony.com" 4352 | }, 4353 | { 4354 | "name": "Symfony Community", 4355 | "homepage": "https://symfony.com/contributors" 4356 | } 4357 | ], 4358 | "description": "Symfony Yaml Component", 4359 | "homepage": "https://symfony.com", 4360 | "time": "2019-04-06T14:04:46+00:00" 4361 | }, 4362 | { 4363 | "name": "theseer/tokenizer", 4364 | "version": "1.1.3", 4365 | "source": { 4366 | "type": "git", 4367 | "url": "https://github.com/theseer/tokenizer.git", 4368 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 4369 | }, 4370 | "dist": { 4371 | "type": "zip", 4372 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 4373 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 4374 | "shasum": "" 4375 | }, 4376 | "require": { 4377 | "ext-dom": "*", 4378 | "ext-tokenizer": "*", 4379 | "ext-xmlwriter": "*", 4380 | "php": "^7.0" 4381 | }, 4382 | "type": "library", 4383 | "autoload": { 4384 | "classmap": [ 4385 | "src/" 4386 | ] 4387 | }, 4388 | "notification-url": "https://packagist.org/downloads/", 4389 | "license": [ 4390 | "BSD-3-Clause" 4391 | ], 4392 | "authors": [ 4393 | { 4394 | "name": "Arne Blankerts", 4395 | "email": "arne@blankerts.de", 4396 | "role": "Developer" 4397 | } 4398 | ], 4399 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4400 | "time": "2019-06-13T22:48:21+00:00" 4401 | }, 4402 | { 4403 | "name": "webmozart/assert", 4404 | "version": "1.4.0", 4405 | "source": { 4406 | "type": "git", 4407 | "url": "https://github.com/webmozart/assert.git", 4408 | "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" 4409 | }, 4410 | "dist": { 4411 | "type": "zip", 4412 | "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", 4413 | "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", 4414 | "shasum": "" 4415 | }, 4416 | "require": { 4417 | "php": "^5.3.3 || ^7.0", 4418 | "symfony/polyfill-ctype": "^1.8" 4419 | }, 4420 | "require-dev": { 4421 | "phpunit/phpunit": "^4.6", 4422 | "sebastian/version": "^1.0.1" 4423 | }, 4424 | "type": "library", 4425 | "extra": { 4426 | "branch-alias": { 4427 | "dev-master": "1.3-dev" 4428 | } 4429 | }, 4430 | "autoload": { 4431 | "psr-4": { 4432 | "Webmozart\\Assert\\": "src/" 4433 | } 4434 | }, 4435 | "notification-url": "https://packagist.org/downloads/", 4436 | "license": [ 4437 | "MIT" 4438 | ], 4439 | "authors": [ 4440 | { 4441 | "name": "Bernhard Schussek", 4442 | "email": "bschussek@gmail.com" 4443 | } 4444 | ], 4445 | "description": "Assertions to validate method input/output with nice error messages.", 4446 | "keywords": [ 4447 | "assert", 4448 | "check", 4449 | "validate" 4450 | ], 4451 | "time": "2018-12-25T11:19:39+00:00" 4452 | } 4453 | ], 4454 | "aliases": [], 4455 | "minimum-stability": "stable", 4456 | "stability-flags": { 4457 | "mito/yii2-coding-standards": 10 4458 | }, 4459 | "prefer-stable": false, 4460 | "prefer-lowest": false, 4461 | "platform": { 4462 | "php": ">=7.1.0" 4463 | }, 4464 | "platform-dev": [] 4465 | } 4466 | -------------------------------------------------------------------------------- /phpcs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | php ./vendor/bin/phpcs --standard=vendor/mito/yii2-coding-standards/Application src/interfaces && php ./vendor/bin/phpcs --standard=vendor/mito/yii2-coding-standards/Application src/models 4 | SRC=$? 5 | php ./vendor/bin/phpcs --standard=vendor/mito/yii2-coding-standards/Application -s --exclude=PSR1.Files.SideEffects,PSR1.Classes.ClassDeclaration --extensions=php tests 6 | TESTS=$? 7 | 8 | if [ $SRC -ne 0 ] || [ $TESTS -ne 0 ]; then 9 | exit 1 10 | fi 11 | -------------------------------------------------------------------------------- /src/interfaces/BusinessObject.php: -------------------------------------------------------------------------------- 1 | setForm($form); 38 | } 39 | if ($model) { 40 | $this->setModel($model); 41 | } 42 | parent::__construct([]); 43 | } 44 | 45 | /** 46 | * @return boolean 47 | */ 48 | abstract public function execute(); 49 | 50 | /** 51 | * @return FormObject|\yii\base\Model 52 | */ 53 | protected function getForm() 54 | { 55 | return $this->_form; 56 | } 57 | 58 | 59 | /** 60 | * @return BusinessObject|ActiveRecord 61 | */ 62 | protected function getModel() 63 | { 64 | return $this->_model; 65 | } 66 | 67 | /** 68 | * @param $id 69 | */ 70 | protected function setId($id) 71 | { 72 | $this->_id = $id; 73 | } 74 | 75 | /** 76 | * @return int 77 | */ 78 | public function getId() 79 | { 80 | return $this->_id; 81 | } 82 | 83 | /** 84 | * @param FormObject $form 85 | */ 86 | private function setForm(FormObject $form) 87 | { 88 | $this->_form = $form; 89 | } 90 | 91 | /** 92 | * @param BusinessObject $model 93 | */ 94 | private function setModel(BusinessObject $model) 95 | { 96 | $this->_model = $model; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /tests/_data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/albertborsos/yii2-ddd/c9e261161519faece9deeeea241e998c63079678/tests/_data/.gitkeep -------------------------------------------------------------------------------- /tests/_output/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore -------------------------------------------------------------------------------- /tests/_support/AcceptanceTester.php: -------------------------------------------------------------------------------- 1 | formClass, $params); 29 | $form->load($loadParams, ''); 30 | 31 | return $form; 32 | } 33 | 34 | /** 35 | * @param $id 36 | * @return \yii\db\ActiveRecord 37 | */ 38 | protected function getModel($id) 39 | { 40 | return call_user_func([$this->modelClass, 'findOne'], $id); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tests/_support/base/AbstractServiceTest.php: -------------------------------------------------------------------------------- 1 | formClass, $params); 29 | $form->load($loadParams, ''); 30 | 31 | return $form; 32 | } 33 | 34 | /** 35 | * @param \albertborsos\ddd\interfaces\FormObject $formObject 36 | * @param \albertborsos\ddd\interfaces\BusinessObject|null $businessObject 37 | * @return \albertborsos\ddd\models\AbstractService 38 | */ 39 | protected function mockService(\albertborsos\ddd\interfaces\FormObject $formObject, \albertborsos\ddd\interfaces\BusinessObject $businessObject = null) 40 | { 41 | return Yii::createObject($this->serviceClass, [$formObject, $businessObject]); 42 | } 43 | 44 | /** 45 | * @param $id 46 | * @return \yii\db\ActiveRecord 47 | */ 48 | protected function getModel($id) 49 | { 50 | return call_user_func([$this->modelClass, 'findOne'], $id); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /tests/_support/base/MockConfig.php: -------------------------------------------------------------------------------- 1 | $className, 11 | 'attributes' => $attributes, 12 | 'settings' => $settings, 13 | ]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tests/_support/base/MockTrait.php: -------------------------------------------------------------------------------- 1 | $websiteHasOnlyOneUser, 16 | * ]); 17 | * 18 | * return MockConfig::create(\app\domains\website\business\WebsiteService::class, [ 19 | * 'profile_id' => $profileId, 20 | * 'created_by' => $createdBy, 21 | * 'website' => $websiteConfig, 22 | * ]); 23 | * ``` 24 | * 25 | * to return multiple mocked objects as a mocked query result 26 | * 27 | * ```php 28 | * return \albertborsos\ddd\tests\support\base\MockConfig::create(\app\domains\User::class, [ 29 | * 'id' => 1, 30 | * 'invoices' => [ 31 | * MockConfig::create(\app\domains\Invoice::class, ['user_id' => 1, 'id' => 1]), 32 | * MockConfig::create(\app\domains\Invoice::class, ['user_id' => 1, 'id' => 2]), 33 | * ], 34 | * ]); 35 | * ``` 36 | */ 37 | trait MockTrait 38 | { 39 | private function mockObject(array $config): MockInterface 40 | { 41 | $model = \Mockery::mock($config['class'])->makePartial()->shouldAllowMockingProtectedMethods(); 42 | 43 | foreach ($config['attributes'] as $attribute => $value) { 44 | if (!is_array($value)) { 45 | $model->$attribute = $value; 46 | continue; 47 | } 48 | 49 | if (isset($value['class'])) { 50 | $model->shouldReceive('get' . ucfirst($attribute))->andReturn($this->mockObject($value))->atLeast()->once(); 51 | continue; 52 | } 53 | 54 | $returnObjects = []; 55 | foreach ($value as $objectConfig) { 56 | $returnObjects[] = $this->mockObject($objectConfig); 57 | } 58 | $model->shouldReceive('get' . ucfirst($attribute))->andReturn($returnObjects)->atLeast()->once(); 59 | } 60 | 61 | foreach ($config['settings'] as $method => $returnValue) { 62 | $model->shouldReceive($method)->andReturn($returnValue)->atLeast()->once(); 63 | } 64 | 65 | return $model; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /tests/_support/base/StubbedForm.php: -------------------------------------------------------------------------------- 1 | setId(1); 13 | return true; 14 | } 15 | 16 | public function failedExecute() 17 | { 18 | $this->getForm()->addError('email', 'This email address is already in use.'); 19 | 20 | return false; 21 | } 22 | 23 | public function testGetForm() 24 | { 25 | return $this->getForm(); 26 | } 27 | 28 | public function testGetModel() 29 | { 30 | return $this->getModel(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/_support/base/Unit.php: -------------------------------------------------------------------------------- 1 | 'a@b.hu'], ['validate' => true]], 11 | ]; 12 | } 13 | 14 | /** 15 | * @dataProvider mockConfigDataProvider 16 | * 17 | * @param $mockedClass 18 | * @param $attributes 19 | * @param $settings 20 | */ 21 | public function testCreateConfig($mockedClass, $attributes, $settings) 22 | { 23 | $mockConfig = \albertborsos\ddd\tests\support\base\MockConfig::create($mockedClass, $attributes, $settings); 24 | 25 | $this->assertEquals($mockedClass, $mockConfig['class']); 26 | $this->assertEquals($attributes, $mockConfig['attributes']); 27 | $this->assertEquals($settings, $mockConfig['settings']); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/unit/MockTraitTest.php: -------------------------------------------------------------------------------- 1 | [\albertborsos\ddd\tests\support\base\StubbedForm::class, ['email' => 'a@b.hu'], ['validate' => true]], 11 | 'mock service execute method' => [\albertborsos\ddd\tests\support\base\StubbedService::class, [], ['execute' => true]], 12 | 'mock service with multiple settings' => [\albertborsos\ddd\tests\support\base\StubbedService::class, [], [ 13 | 'execute' => true, 14 | 'failedExecute' => false, 15 | ]], 16 | ]; 17 | } 18 | 19 | /** 20 | * @dataProvider mockObjectDataProvider 21 | * 22 | * @param $mockedClass 23 | * @param $attributes 24 | * @param $settings 25 | */ 26 | public function testCreateMock($mockedClass, $attributes, $settings) 27 | { 28 | $mockConfig = \albertborsos\ddd\tests\support\base\MockConfig::create($mockedClass, $attributes, $settings); 29 | $mockedObject = $this->mockObject($mockConfig); 30 | 31 | foreach ($attributes as $attribute => $expectedValue) { 32 | $this->assertEquals($expectedValue, $mockedObject->$attribute); 33 | } 34 | 35 | foreach ($settings as $method => $expectedResult) { 36 | $this->assertEquals($expectedResult, call_user_func([$mockedObject, $method])); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /tests/unit/_bootstrap.php: -------------------------------------------------------------------------------- 1 | [[], null], 31 | 'invalid form interface' => [[new Model()], 'TypeError'], 32 | 'invalid model interface' => [[new StubbedForm(), new Model()], 'TypeError'], 33 | 'valid arguments' => [[new StubbedForm(), new StubbedModel()], null], 34 | ]; 35 | } 36 | 37 | /** 38 | * @dataProvider invalidConstructionDataProvider 39 | * 40 | * @param $constructorArguments 41 | * @param $expectedException 42 | */ 43 | public function testInvalidObjectInitialization($constructorArguments, $expectedException) 44 | { 45 | if ($expectedException !== null) { 46 | $this->expectException($expectedException); 47 | } 48 | call_user_func_array([$this, 'mockService'], $constructorArguments); 49 | } 50 | 51 | public function testGetFormObject() 52 | { 53 | $mockedForm = new StubbedForm(); 54 | $service = $this->mockService($mockedForm); 55 | 56 | $this->assertSame($mockedForm, $service->testGetForm()); 57 | } 58 | 59 | public function testGetModelObject() 60 | { 61 | $mockedModel = new StubbedModel(); 62 | $service = $this->mockService(null, $mockedModel); 63 | 64 | $this->assertSame($mockedModel, $service->testGetModel()); 65 | } 66 | 67 | public function testExecuteOk() 68 | { 69 | $mockedForm = new StubbedForm(); 70 | $mockedModel = new StubbedModel(); 71 | 72 | $service = $this->mockService($mockedForm, $mockedModel); 73 | 74 | $this->assertNull($service->getId()); 75 | $this->assertTrue($service->execute()); 76 | $this->assertNotNull($service->getId()); 77 | $this->assertEmpty($mockedForm->errors); 78 | } 79 | 80 | public function testExecuteFailed() 81 | { 82 | $mockedForm = new StubbedForm(); 83 | $mockedModel = new StubbedModel(); 84 | 85 | $service = $this->mockService($mockedForm, $mockedModel); 86 | 87 | $this->assertEmpty($mockedForm->errors); 88 | $this->assertNull($service->getId()); 89 | $this->assertFalse($service->failedExecute()); 90 | $this->assertNull($service->getId()); 91 | $this->assertNotEmpty($mockedForm->errors); 92 | } 93 | } 94 | --------------------------------------------------------------------------------