├── .editorconfig ├── .gitignore ├── .php_cs ├── .phpspec_cs ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── parameters.yml.dist ├── spec ├── Application │ └── Service │ │ └── User │ │ ├── SignInUserRequestSpec.php │ │ └── SignInUserServiceSpec.php ├── Domain │ ├── Event │ │ └── User │ │ │ └── UserRegisteredSpec.php │ ├── Exception │ │ └── User │ │ │ └── UserAlreadyExistsExceptionSpec.php │ └── Model │ │ └── User │ │ ├── UserEmailSpec.php │ │ ├── UserIdSpec.php │ │ └── UserSpec.php └── Infrastructure │ ├── Factory │ └── User │ │ └── UserFactorySpec.php │ └── Persistence │ └── Sql │ ├── Repository │ └── User │ │ ├── SqlPersistentUserRepositorySpec.php │ │ └── SqlUserRepositorySpec.php │ ├── SqlManagerSpec.php │ └── SqlSessionSpec.php ├── src ├── Application │ └── Service │ │ └── User │ │ ├── SignInUserRequest.php │ │ └── SignInUserService.php ├── Domain │ ├── Event │ │ └── User │ │ │ └── UserRegistered.php │ ├── Exception │ │ └── User │ │ │ └── UserAlreadyExistsException.php │ ├── Factory │ │ └── User │ │ │ └── UserFactory.php │ ├── Model │ │ └── User │ │ │ ├── User.php │ │ │ ├── UserEmail.php │ │ │ └── UserId.php │ └── Repository │ │ └── User │ │ ├── CollectionUserRepository.php │ │ ├── PersistentUserRepository.php │ │ └── UserRepository.php └── Infrastructure │ ├── Factory │ └── User │ │ └── UserFactory.php │ ├── Persistence │ └── Sql │ │ ├── Repository │ │ └── User │ │ │ ├── SqlPersistentUserRepository.php │ │ │ ├── SqlUserRepository.php │ │ │ └── SqlUserSpecification.php │ │ ├── SqlManager.php │ │ └── SqlSession.php │ ├── Symfony │ ├── Bundle │ │ ├── AppBundle.php │ │ ├── Controller │ │ │ └── DefaultController.php │ │ ├── DependencyInjection │ │ │ ├── AppExtension.php │ │ │ └── Configuration.php │ │ └── Resources │ │ │ └── config │ │ │ ├── db.yml │ │ │ ├── loaders.yml │ │ │ └── repositories.yml │ └── app │ │ ├── AppKernel.php │ │ ├── config │ │ ├── config.yml │ │ ├── routing_dev.yml │ │ ├── routing_prod.yml │ │ ├── routing_test.yml │ │ └── security.yml │ │ └── console │ └── Ui │ ├── Twig │ └── views │ │ ├── Default │ │ └── index.html.twig │ │ └── layout.html.twig │ └── public │ ├── img │ └── image.png │ ├── js │ └── script.js │ └── scss │ └── sass.scss ├── var ├── cache │ └── .gitkeep └── logs │ └── .gitkeep └── web ├── apple-touch-icon.png ├── favicon.ico ├── index.php └── robots.txt /.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is part of the ddd-symfony package. 2 | ; 3 | ; (c) Beñat Espiña 4 | ; 5 | ; For the full copyright and license information, please view the LICENSE 6 | ; file that was distributed with this source code. 7 | 8 | ; top-most EditorConfig file 9 | root = true 10 | 11 | ; Unix-style newlines 12 | [*] 13 | end_of_line = LF 14 | 15 | [*.php] 16 | indent_style = space 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | #### Symfony #### 9 | bin/ 10 | !bin/console 11 | var/cache/* 12 | !var/cache/.gitkeep 13 | var/logs/* 14 | !var/logs/.gitkeep 15 | *.cache 16 | 17 | parameters.yml 18 | composer.phar 19 | vendor/ 20 | web/bundles/* 21 | 22 | #### PHPSpec #### 23 | /coverage 24 | phpspec-coverage.xml 25 | -------------------------------------------------------------------------------- /.php_cs: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | $finder = Symfony\CS\Finder\DefaultFinder::create() 13 | ->notName('*.yml') 14 | ->notName('*.xml') 15 | ->notName('*Spec.php') 16 | ->exclude('var'); 17 | 18 | $config = Symfony\CS\Config\Config::create() 19 | ->level(Symfony\CS\FixerInterface::SYMFONY_LEVEL) 20 | ->fixers([ 21 | 'concat_with_spaces', 22 | 'multiline_spaces_before_semicolon', 23 | 'short_array_syntax', 24 | '-remove_lines_between_uses', 25 | ]); 26 | 27 | return $config->finder($finder); 28 | -------------------------------------------------------------------------------- /.phpspec_cs: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | $finder = Symfony\Component\Finder\Finder::create() 13 | ->files() 14 | ->name('*Spec.php') 15 | ->in(__DIR__ . '/spec'); 16 | 17 | $config = Symfony\CS\Config\Config::create() 18 | ->level(Symfony\CS\FixerInterface::SYMFONY_LEVEL) 19 | ->fixers([ 20 | 'concat_with_spaces', 21 | 'multiline_spaces_before_semicolon', 22 | 'short_array_syntax', 23 | '-remove_lines_between_uses', 24 | ]); 25 | 26 | return $config->finder($finder); 27 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | language: php 9 | 10 | php: 11 | - 5.4 12 | - 5.5 13 | - 5.6 14 | - 7.0 15 | - hhvm 16 | 17 | env: 18 | - COMPOSER_OPTIONS="--prefer-source" 19 | 20 | install: 21 | - composer update --no-interaction ${COMPOSER_OPTIONS} 22 | 23 | script: 24 | - bin/phpspec run -fpretty 25 | 26 | cache: 27 | directories: 28 | - $COMPOSER_CACHE_DIR 29 | 30 | matrix: 31 | fast_finish: true 32 | allow_failures: 33 | - php: 7.0 34 | - php: hhvm 35 | include: 36 | - php: 5.4 37 | env: COMPOSER_OPTIONS="--prefer-lowest" 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Beñat Espiña benatespina@gmail.com 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | 'Software'), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 20 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 21 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 22 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DDD Symfony 2 | > Other approach about the implementation of DDD into Symfony application 3 | 4 | [![Build Status](https://travis-ci.org/benatespina/ddd-symfony.svg?branch=master)](https://travis-ci.org/benatespina/ddd-symfony) 5 | [![Total Downloads](https://poser.pugx.org/benatespina/ddd-symfony/downloads)](https://packagist.org/packages/benatespina/ddd-symfony) 6 | [![Latest Stable Version](https://poser.pugx.org/benatespina/ddd-symfony/v/stable.svg)](https://packagist.org/packages/benatespina/ddd-symfony) 7 | [![Latest Unstable Version](https://poser.pugx.org/benatespina/ddd-symfony/v/unstable.svg)](https://packagist.org/packages/benatespina/ddd-symfony) 8 | 9 | Why? 10 | ------------- 11 | There are quite a few libraries/projects/bundles in Github that implement DDD into Symfony ecosystem, but I'm not 12 | convinced the file/directory structure that they follow. In this repository, I try to expose my own implementation 13 | of Domain Driven Development into a Symfony application. 14 | 15 | Furthermore, I would like that this repository becomes to the Symfony scaffold for my future projects with this 16 | framework, so improvements are welcome! :) 17 | 18 | Getting Started 19 | --------------- 20 | This repository is a **Symfony** application so, to run requires *[PHP][5]*, *[Composer][6]* 21 | and any database that project will be support (for the moment *[MySQL][7]*). 22 | > NOTE: **parameters.yml**'s `database_user` and `database_password` must have the same values that MySQL 23 | > configuration. 24 | 25 | Install the project's dependencies: 26 | ``` 27 | $ composer install 28 | ``` 29 | Configure the web server to serve the `/web` directory of this project. 30 | > This project needs PHP 5.4 or higher to run so, you don't need to configure the web server, 31 | > because you can use the Symfony command: 32 | > 33 | > ``` 34 | > $ php app/console server:run 35 | > ``` 36 | > 37 | > And that's all! Now, if you request `http://127.0.0.1:8000/`, you will see your site up and running. 38 | 39 | Tests 40 | ----- 41 | This project is completely tested by **BDD methodology** with [PHPSpec][1]: 42 | 43 | $ bin/phpspec run -fpretty 44 | 45 | Contributing 46 | ------------ 47 | This project follows some standards. If you want to collaborate, please ensure that your code fulfills these 48 | standards before any Pull Request. 49 | 50 | $ bin/php-cs-fixer fix . 51 | $ bin/php-cs-fixer fix . --config-file .phpspec_cs --fixers=-visibility 52 | 53 | There is also a policy for contributing to this project. Pull requests must 54 | be explained step by step to make the review process easy in order to 55 | accept and merge them. New methods or code improvements must come paired with [PHPSpec][1] tests. 56 | 57 | If you would like to contribute it is a good point to follow Symfony contribution standards, 58 | so please read the [Contributing Code][2] in the project 59 | documentation. If you are submitting a pull request, please follow the guidelines 60 | in the [Submitting a Patch][3] section and use the [Pull Request Template][4]. 61 | 62 | 63 | Credits 64 | ------- 65 | Based on: 66 | - beberlei's [Symfony Minimal Distribution](https://github.com/beberlei/symfony-minimal-distribution) 67 | - dddinphp's [Last Whishes](https://github.com/dddinphp/last-wishes) 68 | - dddinphp's [Repository Examples](https://github.com/dddinphp/repository-examples) 69 | 70 | Created by **benatespina** - [benatespina@gmail.com](mailto:benatespina@gmail.com). 71 | Copyright (c) 2015 72 | 73 | [![License](https://poser.pugx.org/benatespina/ddd-symfony/license.svg)](https://github.com/benatespina/ddd-symfony/blob/master/LICENSE) 74 | 75 | [1]: http://www.phpspec.net/ 76 | [2]: http://symfony.com/doc/current/contributing/code/index.html 77 | [3]: http://symfony.com/doc/current/contributing/code/patches.html#check-list 78 | [4]: http://symfony.com/doc/current/contributing/code/patches.html#make-a-pull-request 79 | [5]: http://php.net 80 | [6]: http://getcomposer.org/download 81 | [7]: http://dev.mysql.com/downloads/ 82 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "benatespina/ddd-symfony", 3 | "description": "Other approach about the implementation of DDD into Symfony application", 4 | "keywords": ["ddd", "symfony", "domain-driven-development"], 5 | "type": "project", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Beñat Espiña", 10 | "email": "benatespina@gmail.com", 11 | "homepage": "http://benatespina.com" 12 | } 13 | ], 14 | "require": { 15 | "php": ">=5.4", 16 | "symfony/symfony": "2.6.*", 17 | "doctrine/orm": "~2.5", 18 | "twig/extensions": "~1.0", 19 | "symfony/monolog-bundle": "~2.4", 20 | "sensio/distribution-bundle": "~3.0,>=3.0.12", 21 | "sensio/framework-extra-bundle": "~3.0,>=3.0.2", 22 | "incenteev/composer-parameter-handler": "~2.0", 23 | 24 | "kreta/core-bundle": "~0.2", 25 | "carlosbuenosvinos/ddd": "~1.1", 26 | "black/email": "~1.1", 27 | "ramsey/uuid": "~2.8", 28 | "beberlei/assert": "~2.3" 29 | }, 30 | "require-dev": { 31 | "phpspec/phpspec": "~2.2", 32 | "fabpot/php-cs-fixer": "~2.0@dev" 33 | }, 34 | "scripts": { 35 | "post-root-package-install": [ 36 | "SymfonyStandard\\Composer::hookRootPackageInstall" 37 | ], 38 | "post-install-cmd": [ 39 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 40 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 41 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 42 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles", 43 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 44 | ], 45 | "post-update-cmd": [ 46 | "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 47 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 48 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 49 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles", 50 | "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 51 | ] 52 | }, 53 | "autoload": { 54 | "psr-4": { "": "src/" } 55 | }, 56 | "config": { 57 | "bin-dir": "bin" 58 | }, 59 | "extra": { 60 | "symfony-app-dir": "src/Infrastructure/Symfony/app", 61 | "symfony-web-dir": "web", 62 | "symfony-assets-install": "relative", 63 | "incenteev-parameters": { 64 | "file": "parameters.yml" 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "98d642b67704b98ae8a2df8f6f0ee243", 8 | "packages": [ 9 | { 10 | "name": "beberlei/assert", 11 | "version": "v2.3", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/beberlei/assert.git", 15 | "reference": "160eba4d1fbe692e42b3cf8a20b92ab23e3a8759" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/beberlei/assert/zipball/160eba4d1fbe692e42b3cf8a20b92ab23e3a8759", 20 | "reference": "160eba4d1fbe692e42b3cf8a20b92ab23e3a8759", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-mbstring": "*" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-master": "2.3-dev" 30 | } 31 | }, 32 | "autoload": { 33 | "psr-0": { 34 | "Assert": "lib/" 35 | }, 36 | "files": [ 37 | "lib/Assert/functions.php" 38 | ] 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "BSD-2-Clause" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Benjamin Eberlei", 47 | "email": "kontakt@beberlei.de" 48 | } 49 | ], 50 | "description": "Thin assertion library for input validation in business models.", 51 | "keywords": [ 52 | "assert", 53 | "assertion", 54 | "validation" 55 | ], 56 | "time": "2014-12-18 19:12:40" 57 | }, 58 | { 59 | "name": "black/email", 60 | "version": "v1.1.0", 61 | "source": { 62 | "type": "git", 63 | "url": "https://github.com/black-project/Email.git", 64 | "reference": "dab7d633f5f648a17f2381d25d86988c52328646" 65 | }, 66 | "dist": { 67 | "type": "zip", 68 | "url": "https://api.github.com/repos/black-project/Email/zipball/dab7d633f5f648a17f2381d25d86988c52328646", 69 | "reference": "dab7d633f5f648a17f2381d25d86988c52328646", 70 | "shasum": "" 71 | }, 72 | "require": { 73 | "php": ">=5.4" 74 | }, 75 | "require-dev": { 76 | "henrikbjorn/phpspec-code-coverage": "~0.2", 77 | "memio/spec-gen": "~0.1", 78 | "phpspec/phpspec": "~2.2" 79 | }, 80 | "type": "library", 81 | "autoload": { 82 | "psr-4": { 83 | "Email\\": "src/Email/" 84 | } 85 | }, 86 | "notification-url": "https://packagist.org/downloads/", 87 | "license": [ 88 | "MIT" 89 | ], 90 | "authors": [ 91 | { 92 | "name": "Alexandre 'pocky' Balmes", 93 | "email": "alexandre@lablackroom.com", 94 | "homepage": "http://www.lablackroom.com" 95 | } 96 | ], 97 | "description": "A simple email value object for your projects", 98 | "homepage": "http://www.lablackroom.com", 99 | "keywords": [ 100 | "black-project", 101 | "email", 102 | "library", 103 | "value-object" 104 | ], 105 | "time": "2015-05-23 19:16:21" 106 | }, 107 | { 108 | "name": "carlosbuenosvinos/ddd", 109 | "version": "1.1.0", 110 | "source": { 111 | "type": "git", 112 | "url": "git@github.com:carlosbuenosvinos/ddd.git", 113 | "reference": "e15516ef2fc38c3f7cde4f51730809137163aa5a" 114 | }, 115 | "dist": { 116 | "type": "zip", 117 | "url": "https://api.github.com/repos/carlosbuenosvinos/ddd/zipball/e15516ef2fc38c3f7cde4f51730809137163aa5a", 118 | "reference": "e15516ef2fc38c3f7cde4f51730809137163aa5a", 119 | "shasum": "" 120 | }, 121 | "require": { 122 | "jms/serializer": "0.*" 123 | }, 124 | "require-dev": { 125 | "phpunit/phpunit": "4.*" 126 | }, 127 | "suggest": { 128 | "doctrine/orm": "It allows Transactional Application Services and/or Domain Events persisted using Doctrine", 129 | "videlalvaro/php-amqplib": "It allows Domain Events notification using RabbitMQ" 130 | }, 131 | "type": "library", 132 | "autoload": { 133 | "psr-4": { 134 | "Ddd\\": "src/" 135 | } 136 | }, 137 | "notification-url": "https://packagist.org/downloads/", 138 | "license": [ 139 | "MIT" 140 | ], 141 | "authors": [ 142 | { 143 | "name": "Carlos Buenosvinos", 144 | "email": "carlos.buenosvinos@gmail.com", 145 | "homepage": "http://carlosbuenosvinos.com" 146 | } 147 | ], 148 | "description": "Domain-Driven Design PHP helper classes (Application Services, Transactions, Domain Events, etc.", 149 | "homepage": "https://leanpub.com/ddd-in-php", 150 | "time": "2015-05-02 20:39:50" 151 | }, 152 | { 153 | "name": "doctrine/annotations", 154 | "version": "v1.2.4", 155 | "source": { 156 | "type": "git", 157 | "url": "https://github.com/doctrine/annotations.git", 158 | "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e" 159 | }, 160 | "dist": { 161 | "type": "zip", 162 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/b5202eb9e83f8db52e0e58867e0a46e63be8332e", 163 | "reference": "b5202eb9e83f8db52e0e58867e0a46e63be8332e", 164 | "shasum": "" 165 | }, 166 | "require": { 167 | "doctrine/lexer": "1.*", 168 | "php": ">=5.3.2" 169 | }, 170 | "require-dev": { 171 | "doctrine/cache": "1.*", 172 | "phpunit/phpunit": "4.*" 173 | }, 174 | "type": "library", 175 | "extra": { 176 | "branch-alias": { 177 | "dev-master": "1.3.x-dev" 178 | } 179 | }, 180 | "autoload": { 181 | "psr-0": { 182 | "Doctrine\\Common\\Annotations\\": "lib/" 183 | } 184 | }, 185 | "notification-url": "https://packagist.org/downloads/", 186 | "license": [ 187 | "MIT" 188 | ], 189 | "authors": [ 190 | { 191 | "name": "Roman Borschel", 192 | "email": "roman@code-factory.org" 193 | }, 194 | { 195 | "name": "Benjamin Eberlei", 196 | "email": "kontakt@beberlei.de" 197 | }, 198 | { 199 | "name": "Guilherme Blanco", 200 | "email": "guilhermeblanco@gmail.com" 201 | }, 202 | { 203 | "name": "Jonathan Wage", 204 | "email": "jonwage@gmail.com" 205 | }, 206 | { 207 | "name": "Johannes Schmitt", 208 | "email": "schmittjoh@gmail.com" 209 | } 210 | ], 211 | "description": "Docblock Annotations Parser", 212 | "homepage": "http://www.doctrine-project.org", 213 | "keywords": [ 214 | "annotations", 215 | "docblock", 216 | "parser" 217 | ], 218 | "time": "2014-12-23 22:40:37" 219 | }, 220 | { 221 | "name": "doctrine/cache", 222 | "version": "v1.4.1", 223 | "source": { 224 | "type": "git", 225 | "url": "https://github.com/doctrine/cache.git", 226 | "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03" 227 | }, 228 | "dist": { 229 | "type": "zip", 230 | "url": "https://api.github.com/repos/doctrine/cache/zipball/c9eadeb743ac6199f7eec423cb9426bc518b7b03", 231 | "reference": "c9eadeb743ac6199f7eec423cb9426bc518b7b03", 232 | "shasum": "" 233 | }, 234 | "require": { 235 | "php": ">=5.3.2" 236 | }, 237 | "conflict": { 238 | "doctrine/common": ">2.2,<2.4" 239 | }, 240 | "require-dev": { 241 | "phpunit/phpunit": ">=3.7", 242 | "predis/predis": "~1.0", 243 | "satooshi/php-coveralls": "~0.6" 244 | }, 245 | "type": "library", 246 | "extra": { 247 | "branch-alias": { 248 | "dev-master": "1.5.x-dev" 249 | } 250 | }, 251 | "autoload": { 252 | "psr-0": { 253 | "Doctrine\\Common\\Cache\\": "lib/" 254 | } 255 | }, 256 | "notification-url": "https://packagist.org/downloads/", 257 | "license": [ 258 | "MIT" 259 | ], 260 | "authors": [ 261 | { 262 | "name": "Roman Borschel", 263 | "email": "roman@code-factory.org" 264 | }, 265 | { 266 | "name": "Benjamin Eberlei", 267 | "email": "kontakt@beberlei.de" 268 | }, 269 | { 270 | "name": "Guilherme Blanco", 271 | "email": "guilhermeblanco@gmail.com" 272 | }, 273 | { 274 | "name": "Jonathan Wage", 275 | "email": "jonwage@gmail.com" 276 | }, 277 | { 278 | "name": "Johannes Schmitt", 279 | "email": "schmittjoh@gmail.com" 280 | } 281 | ], 282 | "description": "Caching library offering an object-oriented API for many cache backends", 283 | "homepage": "http://www.doctrine-project.org", 284 | "keywords": [ 285 | "cache", 286 | "caching" 287 | ], 288 | "time": "2015-04-15 00:11:59" 289 | }, 290 | { 291 | "name": "doctrine/collections", 292 | "version": "v1.3.0", 293 | "source": { 294 | "type": "git", 295 | "url": "https://github.com/doctrine/collections.git", 296 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" 297 | }, 298 | "dist": { 299 | "type": "zip", 300 | "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 301 | "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", 302 | "shasum": "" 303 | }, 304 | "require": { 305 | "php": ">=5.3.2" 306 | }, 307 | "require-dev": { 308 | "phpunit/phpunit": "~4.0" 309 | }, 310 | "type": "library", 311 | "extra": { 312 | "branch-alias": { 313 | "dev-master": "1.2.x-dev" 314 | } 315 | }, 316 | "autoload": { 317 | "psr-0": { 318 | "Doctrine\\Common\\Collections\\": "lib/" 319 | } 320 | }, 321 | "notification-url": "https://packagist.org/downloads/", 322 | "license": [ 323 | "MIT" 324 | ], 325 | "authors": [ 326 | { 327 | "name": "Roman Borschel", 328 | "email": "roman@code-factory.org" 329 | }, 330 | { 331 | "name": "Benjamin Eberlei", 332 | "email": "kontakt@beberlei.de" 333 | }, 334 | { 335 | "name": "Guilherme Blanco", 336 | "email": "guilhermeblanco@gmail.com" 337 | }, 338 | { 339 | "name": "Jonathan Wage", 340 | "email": "jonwage@gmail.com" 341 | }, 342 | { 343 | "name": "Johannes Schmitt", 344 | "email": "schmittjoh@gmail.com" 345 | } 346 | ], 347 | "description": "Collections Abstraction library", 348 | "homepage": "http://www.doctrine-project.org", 349 | "keywords": [ 350 | "array", 351 | "collections", 352 | "iterator" 353 | ], 354 | "time": "2015-04-14 22:21:58" 355 | }, 356 | { 357 | "name": "doctrine/common", 358 | "version": "v2.5.0", 359 | "source": { 360 | "type": "git", 361 | "url": "https://github.com/doctrine/common.git", 362 | "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3" 363 | }, 364 | "dist": { 365 | "type": "zip", 366 | "url": "https://api.github.com/repos/doctrine/common/zipball/cd8daf2501e10c63dced7b8b9b905844316ae9d3", 367 | "reference": "cd8daf2501e10c63dced7b8b9b905844316ae9d3", 368 | "shasum": "" 369 | }, 370 | "require": { 371 | "doctrine/annotations": "1.*", 372 | "doctrine/cache": "1.*", 373 | "doctrine/collections": "1.*", 374 | "doctrine/inflector": "1.*", 375 | "doctrine/lexer": "1.*", 376 | "php": ">=5.3.2" 377 | }, 378 | "require-dev": { 379 | "phpunit/phpunit": "~3.7" 380 | }, 381 | "type": "library", 382 | "extra": { 383 | "branch-alias": { 384 | "dev-master": "2.6.x-dev" 385 | } 386 | }, 387 | "autoload": { 388 | "psr-0": { 389 | "Doctrine\\Common\\": "lib/" 390 | } 391 | }, 392 | "notification-url": "https://packagist.org/downloads/", 393 | "license": [ 394 | "MIT" 395 | ], 396 | "authors": [ 397 | { 398 | "name": "Roman Borschel", 399 | "email": "roman@code-factory.org" 400 | }, 401 | { 402 | "name": "Benjamin Eberlei", 403 | "email": "kontakt@beberlei.de" 404 | }, 405 | { 406 | "name": "Guilherme Blanco", 407 | "email": "guilhermeblanco@gmail.com" 408 | }, 409 | { 410 | "name": "Jonathan Wage", 411 | "email": "jonwage@gmail.com" 412 | }, 413 | { 414 | "name": "Johannes Schmitt", 415 | "email": "schmittjoh@gmail.com" 416 | } 417 | ], 418 | "description": "Common Library for Doctrine projects", 419 | "homepage": "http://www.doctrine-project.org", 420 | "keywords": [ 421 | "annotations", 422 | "collections", 423 | "eventmanager", 424 | "persistence", 425 | "spl" 426 | ], 427 | "time": "2015-04-02 19:55:44" 428 | }, 429 | { 430 | "name": "doctrine/dbal", 431 | "version": "v2.5.1", 432 | "source": { 433 | "type": "git", 434 | "url": "https://github.com/doctrine/dbal.git", 435 | "reference": "628c2256b646ae2417d44e063bce8aec5199d48d" 436 | }, 437 | "dist": { 438 | "type": "zip", 439 | "url": "https://api.github.com/repos/doctrine/dbal/zipball/628c2256b646ae2417d44e063bce8aec5199d48d", 440 | "reference": "628c2256b646ae2417d44e063bce8aec5199d48d", 441 | "shasum": "" 442 | }, 443 | "require": { 444 | "doctrine/common": ">=2.4,<2.6-dev", 445 | "php": ">=5.3.2" 446 | }, 447 | "require-dev": { 448 | "phpunit/phpunit": "4.*", 449 | "symfony/console": "2.*" 450 | }, 451 | "suggest": { 452 | "symfony/console": "For helpful console commands such as SQL execution and import of files." 453 | }, 454 | "bin": [ 455 | "bin/doctrine-dbal" 456 | ], 457 | "type": "library", 458 | "extra": { 459 | "branch-alias": { 460 | "dev-master": "2.5.x-dev" 461 | } 462 | }, 463 | "autoload": { 464 | "psr-0": { 465 | "Doctrine\\DBAL\\": "lib/" 466 | } 467 | }, 468 | "notification-url": "https://packagist.org/downloads/", 469 | "license": [ 470 | "MIT" 471 | ], 472 | "authors": [ 473 | { 474 | "name": "Roman Borschel", 475 | "email": "roman@code-factory.org" 476 | }, 477 | { 478 | "name": "Benjamin Eberlei", 479 | "email": "kontakt@beberlei.de" 480 | }, 481 | { 482 | "name": "Guilherme Blanco", 483 | "email": "guilhermeblanco@gmail.com" 484 | }, 485 | { 486 | "name": "Jonathan Wage", 487 | "email": "jonwage@gmail.com" 488 | } 489 | ], 490 | "description": "Database Abstraction Layer", 491 | "homepage": "http://www.doctrine-project.org", 492 | "keywords": [ 493 | "database", 494 | "dbal", 495 | "persistence", 496 | "queryobject" 497 | ], 498 | "time": "2015-01-12 21:52:47" 499 | }, 500 | { 501 | "name": "doctrine/inflector", 502 | "version": "v1.0.1", 503 | "source": { 504 | "type": "git", 505 | "url": "https://github.com/doctrine/inflector.git", 506 | "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604" 507 | }, 508 | "dist": { 509 | "type": "zip", 510 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/0bcb2e79d8571787f18b7eb036ed3d004908e604", 511 | "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604", 512 | "shasum": "" 513 | }, 514 | "require": { 515 | "php": ">=5.3.2" 516 | }, 517 | "require-dev": { 518 | "phpunit/phpunit": "4.*" 519 | }, 520 | "type": "library", 521 | "extra": { 522 | "branch-alias": { 523 | "dev-master": "1.0.x-dev" 524 | } 525 | }, 526 | "autoload": { 527 | "psr-0": { 528 | "Doctrine\\Common\\Inflector\\": "lib/" 529 | } 530 | }, 531 | "notification-url": "https://packagist.org/downloads/", 532 | "license": [ 533 | "MIT" 534 | ], 535 | "authors": [ 536 | { 537 | "name": "Roman Borschel", 538 | "email": "roman@code-factory.org" 539 | }, 540 | { 541 | "name": "Benjamin Eberlei", 542 | "email": "kontakt@beberlei.de" 543 | }, 544 | { 545 | "name": "Guilherme Blanco", 546 | "email": "guilhermeblanco@gmail.com" 547 | }, 548 | { 549 | "name": "Jonathan Wage", 550 | "email": "jonwage@gmail.com" 551 | }, 552 | { 553 | "name": "Johannes Schmitt", 554 | "email": "schmittjoh@gmail.com" 555 | } 556 | ], 557 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 558 | "homepage": "http://www.doctrine-project.org", 559 | "keywords": [ 560 | "inflection", 561 | "pluralize", 562 | "singularize", 563 | "string" 564 | ], 565 | "time": "2014-12-20 21:24:13" 566 | }, 567 | { 568 | "name": "doctrine/instantiator", 569 | "version": "1.0.4", 570 | "source": { 571 | "type": "git", 572 | "url": "https://github.com/doctrine/instantiator.git", 573 | "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" 574 | }, 575 | "dist": { 576 | "type": "zip", 577 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", 578 | "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", 579 | "shasum": "" 580 | }, 581 | "require": { 582 | "php": ">=5.3,<8.0-DEV" 583 | }, 584 | "require-dev": { 585 | "athletic/athletic": "~0.1.8", 586 | "ext-pdo": "*", 587 | "ext-phar": "*", 588 | "phpunit/phpunit": "~4.0", 589 | "squizlabs/php_codesniffer": "2.0.*@ALPHA" 590 | }, 591 | "type": "library", 592 | "extra": { 593 | "branch-alias": { 594 | "dev-master": "1.0.x-dev" 595 | } 596 | }, 597 | "autoload": { 598 | "psr-0": { 599 | "Doctrine\\Instantiator\\": "src" 600 | } 601 | }, 602 | "notification-url": "https://packagist.org/downloads/", 603 | "license": [ 604 | "MIT" 605 | ], 606 | "authors": [ 607 | { 608 | "name": "Marco Pivetta", 609 | "email": "ocramius@gmail.com", 610 | "homepage": "http://ocramius.github.com/" 611 | } 612 | ], 613 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 614 | "homepage": "https://github.com/doctrine/instantiator", 615 | "keywords": [ 616 | "constructor", 617 | "instantiate" 618 | ], 619 | "time": "2014-10-13 12:58:55" 620 | }, 621 | { 622 | "name": "doctrine/lexer", 623 | "version": "v1.0.1", 624 | "source": { 625 | "type": "git", 626 | "url": "https://github.com/doctrine/lexer.git", 627 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" 628 | }, 629 | "dist": { 630 | "type": "zip", 631 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", 632 | "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", 633 | "shasum": "" 634 | }, 635 | "require": { 636 | "php": ">=5.3.2" 637 | }, 638 | "type": "library", 639 | "extra": { 640 | "branch-alias": { 641 | "dev-master": "1.0.x-dev" 642 | } 643 | }, 644 | "autoload": { 645 | "psr-0": { 646 | "Doctrine\\Common\\Lexer\\": "lib/" 647 | } 648 | }, 649 | "notification-url": "https://packagist.org/downloads/", 650 | "license": [ 651 | "MIT" 652 | ], 653 | "authors": [ 654 | { 655 | "name": "Roman Borschel", 656 | "email": "roman@code-factory.org" 657 | }, 658 | { 659 | "name": "Guilherme Blanco", 660 | "email": "guilhermeblanco@gmail.com" 661 | }, 662 | { 663 | "name": "Johannes Schmitt", 664 | "email": "schmittjoh@gmail.com" 665 | } 666 | ], 667 | "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", 668 | "homepage": "http://www.doctrine-project.org", 669 | "keywords": [ 670 | "lexer", 671 | "parser" 672 | ], 673 | "time": "2014-09-09 13:34:57" 674 | }, 675 | { 676 | "name": "doctrine/orm", 677 | "version": "v2.5.0", 678 | "source": { 679 | "type": "git", 680 | "url": "https://github.com/doctrine/doctrine2.git", 681 | "reference": "aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe" 682 | }, 683 | "dist": { 684 | "type": "zip", 685 | "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe", 686 | "reference": "aa80c7d2c55a372f5f9f825f5c66dbda53a6e3fe", 687 | "shasum": "" 688 | }, 689 | "require": { 690 | "doctrine/cache": "~1.4", 691 | "doctrine/collections": "~1.2", 692 | "doctrine/common": ">=2.5-dev,<2.6-dev", 693 | "doctrine/dbal": ">=2.5-dev,<2.6-dev", 694 | "doctrine/instantiator": "~1.0.1", 695 | "ext-pdo": "*", 696 | "php": ">=5.4", 697 | "symfony/console": "~2.5" 698 | }, 699 | "require-dev": { 700 | "phpunit/phpunit": "~4.0", 701 | "satooshi/php-coveralls": "dev-master", 702 | "symfony/yaml": "~2.1" 703 | }, 704 | "suggest": { 705 | "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" 706 | }, 707 | "bin": [ 708 | "bin/doctrine", 709 | "bin/doctrine.php" 710 | ], 711 | "type": "library", 712 | "extra": { 713 | "branch-alias": { 714 | "dev-master": "2.6.x-dev" 715 | } 716 | }, 717 | "autoload": { 718 | "psr-0": { 719 | "Doctrine\\ORM\\": "lib/" 720 | } 721 | }, 722 | "notification-url": "https://packagist.org/downloads/", 723 | "license": [ 724 | "MIT" 725 | ], 726 | "authors": [ 727 | { 728 | "name": "Roman Borschel", 729 | "email": "roman@code-factory.org" 730 | }, 731 | { 732 | "name": "Benjamin Eberlei", 733 | "email": "kontakt@beberlei.de" 734 | }, 735 | { 736 | "name": "Guilherme Blanco", 737 | "email": "guilhermeblanco@gmail.com" 738 | }, 739 | { 740 | "name": "Jonathan Wage", 741 | "email": "jonwage@gmail.com" 742 | } 743 | ], 744 | "description": "Object-Relational-Mapper for PHP", 745 | "homepage": "http://www.doctrine-project.org", 746 | "keywords": [ 747 | "database", 748 | "orm" 749 | ], 750 | "time": "2015-04-02 20:40:18" 751 | }, 752 | { 753 | "name": "friendsofsymfony/oauth-server-bundle", 754 | "version": "1.4.2", 755 | "target-dir": "FOS/OAuthServerBundle", 756 | "source": { 757 | "type": "git", 758 | "url": "https://github.com/FriendsOfSymfony/FOSOAuthServerBundle.git", 759 | "reference": "9e15c229eff547443d686445d629e9356ab0672e" 760 | }, 761 | "dist": { 762 | "type": "zip", 763 | "url": "https://api.github.com/repos/FriendsOfSymfony/FOSOAuthServerBundle/zipball/9e15c229eff547443d686445d629e9356ab0672e", 764 | "reference": "9e15c229eff547443d686445d629e9356ab0672e", 765 | "shasum": "" 766 | }, 767 | "require": { 768 | "friendsofsymfony/oauth2-php": "~1.1.0", 769 | "php": ">=5.3.3", 770 | "symfony/framework-bundle": "~2.1", 771 | "symfony/security-bundle": "~2.1" 772 | }, 773 | "require-dev": { 774 | "doctrine/doctrine-bundle": "~1.0", 775 | "doctrine/mongodb-odm": "1.0.*@dev", 776 | "doctrine/orm": ">=2.2,<2.5-dev", 777 | "symfony/class-loader": "~2.1", 778 | "symfony/yaml": "~2.1", 779 | "willdurand/propel-typehintable-behavior": "1.0.*" 780 | }, 781 | "suggest": { 782 | "doctrine/doctrine-bundle": "*", 783 | "doctrine/mongodb-odm-bundle": "*", 784 | "propel/propel-bundle": "If you want to use Propel with Symfony2, then you will have to install the PropelBundle", 785 | "willdurand/propel-typehintable-behavior": "The Typehintable behavior is useful to add type hints on generated methods, to be compliant with interfaces" 786 | }, 787 | "type": "symfony-bundle", 788 | "extra": { 789 | "branch-alias": { 790 | "dev-master": "1.4-dev" 791 | } 792 | }, 793 | "autoload": { 794 | "psr-0": { 795 | "FOS\\OAuthServerBundle": "" 796 | } 797 | }, 798 | "notification-url": "https://packagist.org/downloads/", 799 | "license": [ 800 | "MIT" 801 | ], 802 | "authors": [ 803 | { 804 | "name": "Arnaud Le Blanc", 805 | "email": "arnaud.lb@gmail.com" 806 | }, 807 | { 808 | "name": "FriendsOfSymfony Community", 809 | "homepage": "https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/contributors" 810 | } 811 | ], 812 | "description": "Symfony2 OAuth Server Bundle", 813 | "homepage": "http://friendsofsymfony.github.com", 814 | "keywords": [ 815 | "oauth", 816 | "oauth2", 817 | "server" 818 | ], 819 | "time": "2014-10-31 13:44:14" 820 | }, 821 | { 822 | "name": "friendsofsymfony/oauth2-php", 823 | "version": "1.1.1", 824 | "source": { 825 | "type": "git", 826 | "url": "https://github.com/FriendsOfSymfony/oauth2-php.git", 827 | "reference": "23e76537c4a02e666ab4ba5abe67a69a886a0310" 828 | }, 829 | "dist": { 830 | "type": "zip", 831 | "url": "https://api.github.com/repos/FriendsOfSymfony/oauth2-php/zipball/23e76537c4a02e666ab4ba5abe67a69a886a0310", 832 | "reference": "23e76537c4a02e666ab4ba5abe67a69a886a0310", 833 | "shasum": "" 834 | }, 835 | "require": { 836 | "php": ">=5.3.2", 837 | "symfony/http-foundation": "~2.0" 838 | }, 839 | "require-dev": { 840 | "phpunit/phpunit": "~4.0" 841 | }, 842 | "type": "library", 843 | "extra": { 844 | "branch-alias": { 845 | "dev-master": "1.1.x-dev" 846 | } 847 | }, 848 | "autoload": { 849 | "psr-4": { 850 | "OAuth2\\": "lib/" 851 | } 852 | }, 853 | "notification-url": "https://packagist.org/downloads/", 854 | "license": [ 855 | "MIT" 856 | ], 857 | "authors": [ 858 | { 859 | "name": "Arnaud Le Blanc", 860 | "email": "arnaud.lb@gmail.com" 861 | }, 862 | { 863 | "name": "FriendsOfSymfony Community", 864 | "homepage": "https://github.com/FriendsOfSymfony/oauth2-php/contributors" 865 | } 866 | ], 867 | "description": "OAuth2 library", 868 | "homepage": "https://github.com/FriendsOfSymfony/oauth2-php", 869 | "keywords": [ 870 | "oauth", 871 | "oauth2" 872 | ], 873 | "time": "2014-11-03 10:21:20" 874 | }, 875 | { 876 | "name": "friendsofsymfony/rest-bundle", 877 | "version": "1.4.2", 878 | "target-dir": "FOS/RestBundle", 879 | "source": { 880 | "type": "git", 881 | "url": "https://github.com/FriendsOfSymfony/FOSRestBundle.git", 882 | "reference": "0649a4c1d8cecd27885b09c1cddddb497a0d3ca3" 883 | }, 884 | "dist": { 885 | "type": "zip", 886 | "url": "https://api.github.com/repos/FriendsOfSymfony/FOSRestBundle/zipball/0649a4c1d8cecd27885b09c1cddddb497a0d3ca3", 887 | "reference": "0649a4c1d8cecd27885b09c1cddddb497a0d3ca3", 888 | "shasum": "" 889 | }, 890 | "require": { 891 | "doctrine/inflector": "1.0.*", 892 | "php": ">=5.3.2", 893 | "psr/log": "~1.0", 894 | "symfony/framework-bundle": "~2.2", 895 | "willdurand/jsonp-callback-validator": "~1.0", 896 | "willdurand/negotiation": "~1.2" 897 | }, 898 | "conflict": { 899 | "jms/serializer": "<0.12", 900 | "jms/serializer-bundle": "<0.11" 901 | }, 902 | "require-dev": { 903 | "jms/serializer-bundle": "~0.12", 904 | "sensio/framework-extra-bundle": "~2.2", 905 | "symfony/form": "~2.2", 906 | "symfony/security": "~2.2", 907 | "symfony/serializer": "~2.2", 908 | "symfony/validator": "~2.2", 909 | "symfony/yaml": "~2.2" 910 | }, 911 | "suggest": { 912 | "jms/serializer-bundle": "Add support for advanced serialization capabilities, recommended, requires ~0.12", 913 | "sensio/framework-extra-bundle": "Add support for route annotations and the view response listener", 914 | "symfony/serializer": "Add support for basic serialization capabilities and xml decoding, requires ~2.2", 915 | "symfony/validator": "Add support for validation capabilities in the ParamFetcher, requires ~2.2" 916 | }, 917 | "type": "symfony-bundle", 918 | "extra": { 919 | "branch-alias": { 920 | "dev-master": "1.4-dev" 921 | } 922 | }, 923 | "autoload": { 924 | "psr-0": { 925 | "FOS\\RestBundle": "" 926 | } 927 | }, 928 | "notification-url": "https://packagist.org/downloads/", 929 | "license": [ 930 | "MIT" 931 | ], 932 | "authors": [ 933 | { 934 | "name": "Lukas Kahwe Smith", 935 | "email": "smith@pooteeweet.org" 936 | }, 937 | { 938 | "name": "FriendsOfSymfony Community", 939 | "homepage": "https://github.com/friendsofsymfony/FOSRestBundle/contributors" 940 | }, 941 | { 942 | "name": "Konstantin Kudryashov", 943 | "email": "ever.zet@gmail.com" 944 | } 945 | ], 946 | "description": "This Bundle provides various tools to rapidly develop RESTful API's with Symfony2", 947 | "homepage": "http://friendsofsymfony.github.com", 948 | "keywords": [ 949 | "rest" 950 | ], 951 | "time": "2014-08-15 12:18:54" 952 | }, 953 | { 954 | "name": "incenteev/composer-parameter-handler", 955 | "version": "v2.1.0", 956 | "target-dir": "Incenteev/ParameterHandler", 957 | "source": { 958 | "type": "git", 959 | "url": "https://github.com/Incenteev/ParameterHandler.git", 960 | "reference": "143272a0a09c62616a3c8011fc165a10c6b35241" 961 | }, 962 | "dist": { 963 | "type": "zip", 964 | "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/143272a0a09c62616a3c8011fc165a10c6b35241", 965 | "reference": "143272a0a09c62616a3c8011fc165a10c6b35241", 966 | "shasum": "" 967 | }, 968 | "require": { 969 | "php": ">=5.3.3", 970 | "symfony/yaml": "~2.0" 971 | }, 972 | "require-dev": { 973 | "composer/composer": "1.0.*@dev", 974 | "phpspec/prophecy-phpunit": "~1.0", 975 | "symfony/filesystem": "~2.2" 976 | }, 977 | "type": "library", 978 | "extra": { 979 | "branch-alias": { 980 | "dev-master": "2.1.x-dev" 981 | } 982 | }, 983 | "autoload": { 984 | "psr-0": { 985 | "Incenteev\\ParameterHandler": "" 986 | } 987 | }, 988 | "notification-url": "https://packagist.org/downloads/", 989 | "license": [ 990 | "MIT" 991 | ], 992 | "authors": [ 993 | { 994 | "name": "Christophe Coevoet", 995 | "email": "stof@notk.org" 996 | } 997 | ], 998 | "description": "Composer script handling your ignored parameter file", 999 | "homepage": "https://github.com/Incenteev/ParameterHandler", 1000 | "keywords": [ 1001 | "parameters management" 1002 | ], 1003 | "time": "2013-12-07 10:10:39" 1004 | }, 1005 | { 1006 | "name": "jms/metadata", 1007 | "version": "1.5.1", 1008 | "source": { 1009 | "type": "git", 1010 | "url": "https://github.com/schmittjoh/metadata.git", 1011 | "reference": "22b72455559a25777cfd28c4ffda81ff7639f353" 1012 | }, 1013 | "dist": { 1014 | "type": "zip", 1015 | "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/22b72455559a25777cfd28c4ffda81ff7639f353", 1016 | "reference": "22b72455559a25777cfd28c4ffda81ff7639f353", 1017 | "shasum": "" 1018 | }, 1019 | "require": { 1020 | "php": ">=5.3.0" 1021 | }, 1022 | "require-dev": { 1023 | "doctrine/cache": "~1.0" 1024 | }, 1025 | "type": "library", 1026 | "extra": { 1027 | "branch-alias": { 1028 | "dev-master": "1.5.x-dev" 1029 | } 1030 | }, 1031 | "autoload": { 1032 | "psr-0": { 1033 | "Metadata\\": "src/" 1034 | } 1035 | }, 1036 | "notification-url": "https://packagist.org/downloads/", 1037 | "license": [ 1038 | "Apache" 1039 | ], 1040 | "authors": [ 1041 | { 1042 | "name": "Johannes Schmitt", 1043 | "email": "schmittjoh@gmail.com", 1044 | "homepage": "https://github.com/schmittjoh", 1045 | "role": "Developer of wrapped JMSSerializerBundle" 1046 | } 1047 | ], 1048 | "description": "Class/method/property metadata management in PHP", 1049 | "keywords": [ 1050 | "annotations", 1051 | "metadata", 1052 | "xml", 1053 | "yaml" 1054 | ], 1055 | "time": "2014-07-12 07:13:19" 1056 | }, 1057 | { 1058 | "name": "jms/parser-lib", 1059 | "version": "1.0.0", 1060 | "source": { 1061 | "type": "git", 1062 | "url": "https://github.com/schmittjoh/parser-lib.git", 1063 | "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" 1064 | }, 1065 | "dist": { 1066 | "type": "zip", 1067 | "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", 1068 | "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", 1069 | "shasum": "" 1070 | }, 1071 | "require": { 1072 | "phpoption/phpoption": ">=0.9,<2.0-dev" 1073 | }, 1074 | "type": "library", 1075 | "extra": { 1076 | "branch-alias": { 1077 | "dev-master": "1.0-dev" 1078 | } 1079 | }, 1080 | "autoload": { 1081 | "psr-0": { 1082 | "JMS\\": "src/" 1083 | } 1084 | }, 1085 | "notification-url": "https://packagist.org/downloads/", 1086 | "license": [ 1087 | "Apache2" 1088 | ], 1089 | "description": "A library for easily creating recursive-descent parsers.", 1090 | "time": "2012-11-18 18:08:43" 1091 | }, 1092 | { 1093 | "name": "jms/serializer", 1094 | "version": "0.16.0", 1095 | "source": { 1096 | "type": "git", 1097 | "url": "https://github.com/schmittjoh/serializer.git", 1098 | "reference": "c8a171357ca92b6706e395c757f334902d430ea9" 1099 | }, 1100 | "dist": { 1101 | "type": "zip", 1102 | "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", 1103 | "reference": "c8a171357ca92b6706e395c757f334902d430ea9", 1104 | "shasum": "" 1105 | }, 1106 | "require": { 1107 | "doctrine/annotations": "1.*", 1108 | "jms/metadata": "~1.1", 1109 | "jms/parser-lib": "1.*", 1110 | "php": ">=5.3.2", 1111 | "phpcollection/phpcollection": "~0.1" 1112 | }, 1113 | "require-dev": { 1114 | "doctrine/orm": "~2.1", 1115 | "doctrine/phpcr-odm": "~1.0.1", 1116 | "jackalope/jackalope-doctrine-dbal": "1.0.*", 1117 | "propel/propel1": "~1.7", 1118 | "symfony/filesystem": "2.*", 1119 | "symfony/form": "~2.1", 1120 | "symfony/translation": "~2.0", 1121 | "symfony/validator": "~2.0", 1122 | "symfony/yaml": "2.*", 1123 | "twig/twig": ">=1.8,<2.0-dev" 1124 | }, 1125 | "suggest": { 1126 | "symfony/yaml": "Required if you'd like to serialize data to YAML format." 1127 | }, 1128 | "type": "library", 1129 | "extra": { 1130 | "branch-alias": { 1131 | "dev-master": "0.15-dev" 1132 | } 1133 | }, 1134 | "autoload": { 1135 | "psr-0": { 1136 | "JMS\\Serializer": "src/" 1137 | } 1138 | }, 1139 | "notification-url": "https://packagist.org/downloads/", 1140 | "license": [ 1141 | "Apache2" 1142 | ], 1143 | "authors": [ 1144 | { 1145 | "name": "Johannes Schmitt", 1146 | "email": "schmittjoh@gmail.com", 1147 | "homepage": "https://github.com/schmittjoh", 1148 | "role": "Developer of wrapped JMSSerializerBundle" 1149 | } 1150 | ], 1151 | "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", 1152 | "homepage": "http://jmsyst.com/libs/serializer", 1153 | "keywords": [ 1154 | "deserialization", 1155 | "jaxb", 1156 | "json", 1157 | "serialization", 1158 | "xml" 1159 | ], 1160 | "time": "2014-03-18 08:39:00" 1161 | }, 1162 | { 1163 | "name": "jms/serializer-bundle", 1164 | "version": "0.13.0", 1165 | "target-dir": "JMS/SerializerBundle", 1166 | "source": { 1167 | "type": "git", 1168 | "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", 1169 | "reference": "bb15db3e661168f4310fad48b86915ff1ca33795" 1170 | }, 1171 | "dist": { 1172 | "type": "zip", 1173 | "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/bb15db3e661168f4310fad48b86915ff1ca33795", 1174 | "reference": "bb15db3e661168f4310fad48b86915ff1ca33795", 1175 | "shasum": "" 1176 | }, 1177 | "require": { 1178 | "jms/serializer": "~0.11", 1179 | "php": ">=5.3.2", 1180 | "symfony/framework-bundle": "~2.1" 1181 | }, 1182 | "require-dev": { 1183 | "doctrine/doctrine-bundle": "*", 1184 | "doctrine/orm": "*", 1185 | "symfony/browser-kit": "*", 1186 | "symfony/class-loader": "*", 1187 | "symfony/css-selector": "*", 1188 | "symfony/finder": "*", 1189 | "symfony/form": "*", 1190 | "symfony/process": "*", 1191 | "symfony/twig-bundle": "*", 1192 | "symfony/validator": "*", 1193 | "symfony/yaml": "*" 1194 | }, 1195 | "suggest": { 1196 | "jms/di-extra-bundle": "Required to get lazy loading (de)serialization visitors, ~1.3" 1197 | }, 1198 | "type": "symfony-bundle", 1199 | "extra": { 1200 | "branch-alias": { 1201 | "dev-master": "0.13-dev" 1202 | } 1203 | }, 1204 | "autoload": { 1205 | "psr-0": { 1206 | "JMS\\SerializerBundle": "" 1207 | } 1208 | }, 1209 | "notification-url": "https://packagist.org/downloads/", 1210 | "license": [ 1211 | "Apache2" 1212 | ], 1213 | "authors": [ 1214 | { 1215 | "name": "Johannes Schmitt", 1216 | "email": "schmittjoh@gmail.com", 1217 | "homepage": "https://github.com/schmittjoh", 1218 | "role": "Developer of wrapped JMSSerializerBundle" 1219 | } 1220 | ], 1221 | "description": "Allows you to easily serialize, and deserialize data of any complexity", 1222 | "homepage": "http://jmsyst.com/bundles/JMSSerializerBundle", 1223 | "keywords": [ 1224 | "deserialization", 1225 | "jaxb", 1226 | "json", 1227 | "serialization", 1228 | "xml" 1229 | ], 1230 | "time": "2013-12-05 14:36:11" 1231 | }, 1232 | { 1233 | "name": "kreta/core", 1234 | "version": "v0.2.1", 1235 | "source": { 1236 | "type": "git", 1237 | "url": "https://github.com/kreta-io/Core.git", 1238 | "reference": "b698594b782641c2185f51bf56794fc3bad3657d" 1239 | }, 1240 | "dist": { 1241 | "type": "zip", 1242 | "url": "https://api.github.com/repos/kreta-io/Core/zipball/b698594b782641c2185f51bf56794fc3bad3657d", 1243 | "reference": "b698594b782641c2185f51bf56794fc3bad3657d", 1244 | "shasum": "" 1245 | }, 1246 | "require": { 1247 | "doctrine/orm": ">=2.2.3", 1248 | "php": ">=5.4", 1249 | "symfony/form": "~2.3", 1250 | "symfony/http-foundation": "~2.3", 1251 | "symfony/security": "~2.3" 1252 | }, 1253 | "require-dev": { 1254 | "henrikbjorn/phpspec-code-coverage": "~1.0", 1255 | "phpmd/phpmd": "~2.1", 1256 | "phpspec/phpspec": "~2.1", 1257 | "satooshi/php-coveralls": "0.6.1", 1258 | "squizlabs/php_codesniffer": "~1.0" 1259 | }, 1260 | "type": "library", 1261 | "extra": { 1262 | "branch-alias": { 1263 | "dev-master": "0.2-dev" 1264 | } 1265 | }, 1266 | "autoload": { 1267 | "psr-4": { 1268 | "Kreta\\Component\\Core\\": "" 1269 | } 1270 | }, 1271 | "notification-url": "https://packagist.org/downloads/", 1272 | "license": [ 1273 | "MIT" 1274 | ], 1275 | "authors": [ 1276 | { 1277 | "name": "Beñat Espiña Diaz", 1278 | "email": "benatespina@gmail.com", 1279 | "homepage": "http://benatespina.com" 1280 | }, 1281 | { 1282 | "name": "Gorka Laucirica Ibarra", 1283 | "email": "gorka.lauzirika@gmail.com", 1284 | "homepage": "http://gorkalaucirica.net" 1285 | } 1286 | ], 1287 | "description": "Kreta core component", 1288 | "homepage": "http://kreta.io", 1289 | "keywords": [ 1290 | "component", 1291 | "core", 1292 | "development", 1293 | "manager", 1294 | "project", 1295 | "tool" 1296 | ], 1297 | "time": "2015-05-21 14:54:09" 1298 | }, 1299 | { 1300 | "name": "kreta/core-bundle", 1301 | "version": "v0.2.1", 1302 | "source": { 1303 | "type": "git", 1304 | "url": "https://github.com/kreta-io/CoreBundle.git", 1305 | "reference": "9cf54579a6f79686dde47c402bf3614693714786" 1306 | }, 1307 | "dist": { 1308 | "type": "zip", 1309 | "url": "https://api.github.com/repos/kreta-io/CoreBundle/zipball/9cf54579a6f79686dde47c402bf3614693714786", 1310 | "reference": "9cf54579a6f79686dde47c402bf3614693714786", 1311 | "shasum": "" 1312 | }, 1313 | "require": { 1314 | "friendsofsymfony/oauth-server-bundle": "~1.4", 1315 | "friendsofsymfony/rest-bundle": "1.4.x", 1316 | "jms/serializer-bundle": "0.13.x", 1317 | "kreta/core": "~0.2.0", 1318 | "kreta/simple-api-doc-bundle": "~0.1", 1319 | "nelmio/cors-bundle": "1.3.x", 1320 | "php": ">=5.4", 1321 | "symfony/framework-bundle": "~2.3", 1322 | "willdurand/hateoas-bundle": "0.3.x" 1323 | }, 1324 | "require-dev": { 1325 | "henrikbjorn/phpspec-code-coverage": "~1.0", 1326 | "phpmd/phpmd": "~2.1", 1327 | "phpspec/phpspec": "~2.1", 1328 | "satooshi/php-coveralls": "0.6.1", 1329 | "squizlabs/php_codesniffer": "~1.0" 1330 | }, 1331 | "type": "symfony-bundle", 1332 | "extra": { 1333 | "branch-alias": { 1334 | "dev-master": "0.2-dev" 1335 | } 1336 | }, 1337 | "autoload": { 1338 | "psr-4": { 1339 | "Kreta\\Bundle\\CoreBundle\\": "" 1340 | } 1341 | }, 1342 | "notification-url": "https://packagist.org/downloads/", 1343 | "license": [ 1344 | "MIT" 1345 | ], 1346 | "authors": [ 1347 | { 1348 | "name": "Beñat Espiña Diaz", 1349 | "email": "benatespina@gmail.com", 1350 | "homepage": "http://benatespina.com" 1351 | }, 1352 | { 1353 | "name": "Gorka Laucirica Ibarra", 1354 | "email": "gorka.lauzirika@gmail.com", 1355 | "homepage": "http://gorkalaucirica.net" 1356 | } 1357 | ], 1358 | "description": "Kreta core bundle", 1359 | "homepage": "http://kreta.io", 1360 | "keywords": [ 1361 | "bundle", 1362 | "core", 1363 | "development", 1364 | "manager", 1365 | "project", 1366 | "tool" 1367 | ], 1368 | "time": "2015-05-21 14:54:09" 1369 | }, 1370 | { 1371 | "name": "kreta/simple-api-doc-bundle", 1372 | "version": "v0.2.0", 1373 | "source": { 1374 | "type": "git", 1375 | "url": "https://github.com/kreta-io/SimpleApiDocBundle.git", 1376 | "reference": "6bb07daa64b3e69d64f99adf7482b7b34ba4f533" 1377 | }, 1378 | "dist": { 1379 | "type": "zip", 1380 | "url": "https://api.github.com/repos/kreta-io/SimpleApiDocBundle/zipball/6bb07daa64b3e69d64f99adf7482b7b34ba4f533", 1381 | "reference": "6bb07daa64b3e69d64f99adf7482b7b34ba4f533", 1382 | "shasum": "" 1383 | }, 1384 | "require": { 1385 | "nelmio/api-doc-bundle": "~2.5", 1386 | "php": ">=5.4" 1387 | }, 1388 | "require-dev": { 1389 | "henrikbjorn/phpspec-code-coverage": "~1.0", 1390 | "phpmd/phpmd": "~2.1", 1391 | "phpspec/phpspec": "~2.1", 1392 | "satooshi/php-coveralls": "0.6.1", 1393 | "squizlabs/php_codesniffer": "~1.0" 1394 | }, 1395 | "type": "symfony-bundle", 1396 | "extra": { 1397 | "branch-alias": { 1398 | "dev-master": "0.2-dev" 1399 | } 1400 | }, 1401 | "autoload": { 1402 | "psr-4": { 1403 | "Kreta\\SimpleApiDocBundle\\": "" 1404 | } 1405 | }, 1406 | "notification-url": "https://packagist.org/downloads/", 1407 | "license": [ 1408 | "MIT" 1409 | ], 1410 | "authors": [ 1411 | { 1412 | "name": "Beñat Espiña Diaz", 1413 | "email": "benatespina@gmail.com", 1414 | "homepage": "http://benatespina.com" 1415 | }, 1416 | { 1417 | "name": "Gorka Laucirica Ibarra", 1418 | "email": "gorka.lauzirika@gmail.com", 1419 | "homepage": "http://gorkalaucirica.net" 1420 | } 1421 | ], 1422 | "description": "Kreta simple api doc bundle on top of NelmioApiDocBundle", 1423 | "homepage": "http://kreta.io", 1424 | "keywords": [ 1425 | "api", 1426 | "bundle", 1427 | "documentation", 1428 | "kreta" 1429 | ], 1430 | "time": "2015-05-25 20:52:25" 1431 | }, 1432 | { 1433 | "name": "michelf/php-markdown", 1434 | "version": "1.5.0", 1435 | "source": { 1436 | "type": "git", 1437 | "url": "https://github.com/michelf/php-markdown.git", 1438 | "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9" 1439 | }, 1440 | "dist": { 1441 | "type": "zip", 1442 | "url": "https://api.github.com/repos/michelf/php-markdown/zipball/e1aabe18173231ebcefc90e615565742fc1c7fd9", 1443 | "reference": "e1aabe18173231ebcefc90e615565742fc1c7fd9", 1444 | "shasum": "" 1445 | }, 1446 | "require": { 1447 | "php": ">=5.3.0" 1448 | }, 1449 | "type": "library", 1450 | "extra": { 1451 | "branch-alias": { 1452 | "dev-lib": "1.4.x-dev" 1453 | } 1454 | }, 1455 | "autoload": { 1456 | "psr-0": { 1457 | "Michelf": "" 1458 | } 1459 | }, 1460 | "notification-url": "https://packagist.org/downloads/", 1461 | "license": [ 1462 | "BSD-3-Clause" 1463 | ], 1464 | "authors": [ 1465 | { 1466 | "name": "John Gruber", 1467 | "homepage": "http://daringfireball.net/" 1468 | }, 1469 | { 1470 | "name": "Michel Fortin", 1471 | "email": "michel.fortin@michelf.ca", 1472 | "homepage": "https://michelf.ca/", 1473 | "role": "Developer" 1474 | } 1475 | ], 1476 | "description": "PHP Markdown", 1477 | "homepage": "https://michelf.ca/projects/php-markdown/", 1478 | "keywords": [ 1479 | "markdown" 1480 | ], 1481 | "time": "2015-03-01 12:03:08" 1482 | }, 1483 | { 1484 | "name": "monolog/monolog", 1485 | "version": "1.13.1", 1486 | "source": { 1487 | "type": "git", 1488 | "url": "https://github.com/Seldaek/monolog.git", 1489 | "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" 1490 | }, 1491 | "dist": { 1492 | "type": "zip", 1493 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", 1494 | "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", 1495 | "shasum": "" 1496 | }, 1497 | "require": { 1498 | "php": ">=5.3.0", 1499 | "psr/log": "~1.0" 1500 | }, 1501 | "provide": { 1502 | "psr/log-implementation": "1.0.0" 1503 | }, 1504 | "require-dev": { 1505 | "aws/aws-sdk-php": "~2.4, >2.4.8", 1506 | "doctrine/couchdb": "~1.0@dev", 1507 | "graylog2/gelf-php": "~1.0", 1508 | "phpunit/phpunit": "~4.0", 1509 | "raven/raven": "~0.5", 1510 | "ruflin/elastica": "0.90.*", 1511 | "swiftmailer/swiftmailer": "~5.3", 1512 | "videlalvaro/php-amqplib": "~2.4" 1513 | }, 1514 | "suggest": { 1515 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 1516 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 1517 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 1518 | "ext-mongo": "Allow sending log messages to a MongoDB server", 1519 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 1520 | "raven/raven": "Allow sending log messages to a Sentry server", 1521 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 1522 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 1523 | "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" 1524 | }, 1525 | "type": "library", 1526 | "extra": { 1527 | "branch-alias": { 1528 | "dev-master": "1.13.x-dev" 1529 | } 1530 | }, 1531 | "autoload": { 1532 | "psr-4": { 1533 | "Monolog\\": "src/Monolog" 1534 | } 1535 | }, 1536 | "notification-url": "https://packagist.org/downloads/", 1537 | "license": [ 1538 | "MIT" 1539 | ], 1540 | "authors": [ 1541 | { 1542 | "name": "Jordi Boggiano", 1543 | "email": "j.boggiano@seld.be", 1544 | "homepage": "http://seld.be" 1545 | } 1546 | ], 1547 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 1548 | "homepage": "http://github.com/Seldaek/monolog", 1549 | "keywords": [ 1550 | "log", 1551 | "logging", 1552 | "psr-3" 1553 | ], 1554 | "time": "2015-03-09 09:58:04" 1555 | }, 1556 | { 1557 | "name": "nelmio/api-doc-bundle", 1558 | "version": "2.9.0", 1559 | "target-dir": "Nelmio/ApiDocBundle", 1560 | "source": { 1561 | "type": "git", 1562 | "url": "https://github.com/nelmio/NelmioApiDocBundle.git", 1563 | "reference": "de31760fd84a45fadbb4fe24db050b5e29ea70d1" 1564 | }, 1565 | "dist": { 1566 | "type": "zip", 1567 | "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/de31760fd84a45fadbb4fe24db050b5e29ea70d1", 1568 | "reference": "de31760fd84a45fadbb4fe24db050b5e29ea70d1", 1569 | "shasum": "" 1570 | }, 1571 | "require": { 1572 | "michelf/php-markdown": "~1.4", 1573 | "symfony/console": "~2.1", 1574 | "symfony/framework-bundle": "~2.1", 1575 | "symfony/twig-bundle": "~2.1" 1576 | }, 1577 | "conflict": { 1578 | "jms/serializer": "<0.12", 1579 | "jms/serializer-bundle": "<0.11" 1580 | }, 1581 | "require-dev": { 1582 | "dunglas/api-bundle": "dev-master", 1583 | "friendsofsymfony/rest-bundle": "~1.0", 1584 | "jms/serializer-bundle": ">=0.11", 1585 | "sensio/framework-extra-bundle": "~3.0", 1586 | "symfony/browser-kit": "~2.1", 1587 | "symfony/css-selector": "~2.1", 1588 | "symfony/form": "~2.1", 1589 | "symfony/serializer": "~2.7@dev", 1590 | "symfony/validator": "~2.1", 1591 | "symfony/yaml": "~2.1" 1592 | }, 1593 | "suggest": { 1594 | "dunglas/api-bundle": "For making use of resources definitions of DunglasApiBundle.", 1595 | "friendsofsymfony/rest-bundle": "For making use of REST information in the doc.", 1596 | "jms/serializer": "For making use of serializer information in the doc.", 1597 | "symfony/form": "For using form definitions as input.", 1598 | "symfony/validator": "For making use of validator information in the doc." 1599 | }, 1600 | "type": "symfony-bundle", 1601 | "extra": { 1602 | "branch-alias": { 1603 | "dev-master": "2.9.x-dev" 1604 | } 1605 | }, 1606 | "autoload": { 1607 | "psr-0": { 1608 | "Nelmio\\ApiDocBundle": "" 1609 | } 1610 | }, 1611 | "notification-url": "https://packagist.org/downloads/", 1612 | "license": [ 1613 | "MIT" 1614 | ], 1615 | "authors": [ 1616 | { 1617 | "name": "Nelmio", 1618 | "homepage": "http://nelm.io" 1619 | }, 1620 | { 1621 | "name": "Symfony Community", 1622 | "homepage": "https://github.com/nelmio/NelmioApiDocBundle/contributors" 1623 | } 1624 | ], 1625 | "description": "Generates documentation for your REST API from annotations", 1626 | "keywords": [ 1627 | "api", 1628 | "doc", 1629 | "documentation", 1630 | "rest" 1631 | ], 1632 | "time": "2015-05-16 17:16:14" 1633 | }, 1634 | { 1635 | "name": "nelmio/cors-bundle", 1636 | "version": "1.3.3", 1637 | "target-dir": "Nelmio/CorsBundle", 1638 | "source": { 1639 | "type": "git", 1640 | "url": "https://github.com/nelmio/NelmioCorsBundle.git", 1641 | "reference": "d482c01f6ca0840025b81b65534d0ffb7c18f425" 1642 | }, 1643 | "dist": { 1644 | "type": "zip", 1645 | "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/d482c01f6ca0840025b81b65534d0ffb7c18f425", 1646 | "reference": "d482c01f6ca0840025b81b65534d0ffb7c18f425", 1647 | "shasum": "" 1648 | }, 1649 | "require": { 1650 | "symfony/framework-bundle": "~2.2" 1651 | }, 1652 | "require-dev": { 1653 | "matthiasnoback/symfony-dependency-injection-test": "0.2.*", 1654 | "mockery/mockery": "dev-master" 1655 | }, 1656 | "type": "symfony-bundle", 1657 | "extra": { 1658 | "branch-alias": { 1659 | "dev-master": "1.3.x-dev" 1660 | } 1661 | }, 1662 | "autoload": { 1663 | "psr-0": { 1664 | "Nelmio\\CorsBundle": "" 1665 | } 1666 | }, 1667 | "notification-url": "https://packagist.org/downloads/", 1668 | "license": [ 1669 | "MIT" 1670 | ], 1671 | "authors": [ 1672 | { 1673 | "name": "Nelmio", 1674 | "homepage": "http://nelm.io" 1675 | }, 1676 | { 1677 | "name": "Symfony Community", 1678 | "homepage": "https://github.com/nelmio/NelmioCorsBundle/contributors" 1679 | } 1680 | ], 1681 | "description": "Adds CORS (Cross-Origin Resource Sharing) headers support in your Symfony2 application", 1682 | "keywords": [ 1683 | "api", 1684 | "cors", 1685 | "crossdomain" 1686 | ], 1687 | "time": "2014-12-10 17:26:49" 1688 | }, 1689 | { 1690 | "name": "phpcollection/phpcollection", 1691 | "version": "0.4.0", 1692 | "source": { 1693 | "type": "git", 1694 | "url": "https://github.com/schmittjoh/php-collection.git", 1695 | "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83" 1696 | }, 1697 | "dist": { 1698 | "type": "zip", 1699 | "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/b8bf55a0a929ca43b01232b36719f176f86c7e83", 1700 | "reference": "b8bf55a0a929ca43b01232b36719f176f86c7e83", 1701 | "shasum": "" 1702 | }, 1703 | "require": { 1704 | "phpoption/phpoption": "1.*" 1705 | }, 1706 | "type": "library", 1707 | "extra": { 1708 | "branch-alias": { 1709 | "dev-master": "0.3-dev" 1710 | } 1711 | }, 1712 | "autoload": { 1713 | "psr-0": { 1714 | "PhpCollection": "src/" 1715 | } 1716 | }, 1717 | "notification-url": "https://packagist.org/downloads/", 1718 | "license": [ 1719 | "Apache2" 1720 | ], 1721 | "authors": [ 1722 | { 1723 | "name": "Johannes Schmitt", 1724 | "email": "schmittjoh@gmail.com", 1725 | "homepage": "https://github.com/schmittjoh", 1726 | "role": "Developer of wrapped JMSSerializerBundle" 1727 | } 1728 | ], 1729 | "description": "General-Purpose Collection Library for PHP", 1730 | "keywords": [ 1731 | "collection", 1732 | "list", 1733 | "map", 1734 | "sequence", 1735 | "set" 1736 | ], 1737 | "time": "2014-03-11 13:46:42" 1738 | }, 1739 | { 1740 | "name": "phpoption/phpoption", 1741 | "version": "1.4.0", 1742 | "source": { 1743 | "type": "git", 1744 | "url": "https://github.com/schmittjoh/php-option.git", 1745 | "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5" 1746 | }, 1747 | "dist": { 1748 | "type": "zip", 1749 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/5d099bcf0393908bf4ad69cc47dafb785d51f7f5", 1750 | "reference": "5d099bcf0393908bf4ad69cc47dafb785d51f7f5", 1751 | "shasum": "" 1752 | }, 1753 | "require": { 1754 | "php": ">=5.3.0" 1755 | }, 1756 | "type": "library", 1757 | "extra": { 1758 | "branch-alias": { 1759 | "dev-master": "1.3-dev" 1760 | } 1761 | }, 1762 | "autoload": { 1763 | "psr-0": { 1764 | "PhpOption\\": "src/" 1765 | } 1766 | }, 1767 | "notification-url": "https://packagist.org/downloads/", 1768 | "license": [ 1769 | "Apache2" 1770 | ], 1771 | "authors": [ 1772 | { 1773 | "name": "Johannes Schmitt", 1774 | "email": "schmittjoh@gmail.com", 1775 | "homepage": "https://github.com/schmittjoh", 1776 | "role": "Developer of wrapped JMSSerializerBundle" 1777 | } 1778 | ], 1779 | "description": "Option Type for PHP", 1780 | "keywords": [ 1781 | "language", 1782 | "option", 1783 | "php", 1784 | "type" 1785 | ], 1786 | "time": "2014-01-09 22:37:17" 1787 | }, 1788 | { 1789 | "name": "psr/log", 1790 | "version": "1.0.0", 1791 | "source": { 1792 | "type": "git", 1793 | "url": "https://github.com/php-fig/log.git", 1794 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" 1795 | }, 1796 | "dist": { 1797 | "type": "zip", 1798 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", 1799 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", 1800 | "shasum": "" 1801 | }, 1802 | "type": "library", 1803 | "autoload": { 1804 | "psr-0": { 1805 | "Psr\\Log\\": "" 1806 | } 1807 | }, 1808 | "notification-url": "https://packagist.org/downloads/", 1809 | "license": [ 1810 | "MIT" 1811 | ], 1812 | "authors": [ 1813 | { 1814 | "name": "PHP-FIG", 1815 | "homepage": "http://www.php-fig.org/" 1816 | } 1817 | ], 1818 | "description": "Common interface for logging libraries", 1819 | "keywords": [ 1820 | "log", 1821 | "psr", 1822 | "psr-3" 1823 | ], 1824 | "time": "2012-12-21 11:40:51" 1825 | }, 1826 | { 1827 | "name": "ramsey/uuid", 1828 | "version": "2.8.0", 1829 | "source": { 1830 | "type": "git", 1831 | "url": "https://github.com/ramsey/uuid.git", 1832 | "reference": "cca98c652cac412c9c2f109c69e5532f313435fc" 1833 | }, 1834 | "dist": { 1835 | "type": "zip", 1836 | "url": "https://api.github.com/repos/ramsey/uuid/zipball/cca98c652cac412c9c2f109c69e5532f313435fc", 1837 | "reference": "cca98c652cac412c9c2f109c69e5532f313435fc", 1838 | "shasum": "" 1839 | }, 1840 | "require": { 1841 | "php": ">=5.3.3" 1842 | }, 1843 | "require-dev": { 1844 | "doctrine/dbal": ">=2.3", 1845 | "moontoast/math": "~1.1", 1846 | "phpunit/phpunit": "~4.1", 1847 | "satooshi/php-coveralls": "~0.6", 1848 | "symfony/console": "~2.3" 1849 | }, 1850 | "suggest": { 1851 | "doctrine/dbal": "Allow the use of a UUID as doctrine field type.", 1852 | "moontoast/math": "Support for converting UUID to 128-bit integer (in string form).", 1853 | "symfony/console": "Support for use of the bin/uuid command line tool." 1854 | }, 1855 | "bin": [ 1856 | "bin/uuid" 1857 | ], 1858 | "type": "library", 1859 | "extra": { 1860 | "branch-alias": { 1861 | "dev-master": "2.8.x-dev" 1862 | } 1863 | }, 1864 | "autoload": { 1865 | "psr-4": { 1866 | "Rhumsaa\\Uuid\\": "src/" 1867 | } 1868 | }, 1869 | "notification-url": "https://packagist.org/downloads/", 1870 | "license": [ 1871 | "MIT" 1872 | ], 1873 | "authors": [ 1874 | { 1875 | "name": "Marijn Huizendveld", 1876 | "email": "marijn.huizendveld@gmail.com" 1877 | }, 1878 | { 1879 | "name": "Ben Ramsey", 1880 | "homepage": "http://benramsey.com" 1881 | } 1882 | ], 1883 | "description": "A PHP 5.3+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", 1884 | "homepage": "https://github.com/ramsey/uuid", 1885 | "keywords": [ 1886 | "guid", 1887 | "identifier", 1888 | "uuid" 1889 | ], 1890 | "time": "2014-11-09 18:42:56" 1891 | }, 1892 | { 1893 | "name": "sensio/distribution-bundle", 1894 | "version": "v3.0.24", 1895 | "target-dir": "Sensio/Bundle/DistributionBundle", 1896 | "source": { 1897 | "type": "git", 1898 | "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", 1899 | "reference": "79b820aee1f1daeb2717fa9471ee19275cc1d638" 1900 | }, 1901 | "dist": { 1902 | "type": "zip", 1903 | "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/79b820aee1f1daeb2717fa9471ee19275cc1d638", 1904 | "reference": "79b820aee1f1daeb2717fa9471ee19275cc1d638", 1905 | "shasum": "" 1906 | }, 1907 | "require": { 1908 | "php": ">=5.3.3", 1909 | "sensiolabs/security-checker": "~2.0", 1910 | "symfony/class-loader": "~2.2", 1911 | "symfony/framework-bundle": "~2.3", 1912 | "symfony/process": "~2.2" 1913 | }, 1914 | "require-dev": { 1915 | "symfony/form": "~2.2", 1916 | "symfony/validator": "~2.2", 1917 | "symfony/yaml": "~2.2" 1918 | }, 1919 | "suggest": { 1920 | "symfony/form": "If you want to use the configurator", 1921 | "symfony/validator": "If you want to use the configurator", 1922 | "symfony/yaml": "If you want to use the configurator" 1923 | }, 1924 | "type": "symfony-bundle", 1925 | "extra": { 1926 | "branch-alias": { 1927 | "dev-master": "3.0.x-dev" 1928 | } 1929 | }, 1930 | "autoload": { 1931 | "psr-0": { 1932 | "Sensio\\Bundle\\DistributionBundle": "" 1933 | } 1934 | }, 1935 | "notification-url": "https://packagist.org/downloads/", 1936 | "license": [ 1937 | "MIT" 1938 | ], 1939 | "authors": [ 1940 | { 1941 | "name": "Fabien Potencier", 1942 | "email": "fabien@symfony.com" 1943 | } 1944 | ], 1945 | "description": "Base bundle for Symfony Distributions", 1946 | "keywords": [ 1947 | "configuration", 1948 | "distribution" 1949 | ], 1950 | "time": "2015-05-16 12:57:08" 1951 | }, 1952 | { 1953 | "name": "sensio/framework-extra-bundle", 1954 | "version": "v3.0.7", 1955 | "target-dir": "Sensio/Bundle/FrameworkExtraBundle", 1956 | "source": { 1957 | "type": "git", 1958 | "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", 1959 | "reference": "5c37623576ea9e841b87dc0d85414d98fa6f7abb" 1960 | }, 1961 | "dist": { 1962 | "type": "zip", 1963 | "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/5c37623576ea9e841b87dc0d85414d98fa6f7abb", 1964 | "reference": "5c37623576ea9e841b87dc0d85414d98fa6f7abb", 1965 | "shasum": "" 1966 | }, 1967 | "require": { 1968 | "doctrine/common": "~2.2", 1969 | "symfony/framework-bundle": "~2.3" 1970 | }, 1971 | "require-dev": { 1972 | "symfony/expression-language": "~2.4", 1973 | "symfony/security-bundle": "~2.4" 1974 | }, 1975 | "suggest": { 1976 | "symfony/expression-language": "", 1977 | "symfony/security-bundle": "" 1978 | }, 1979 | "type": "symfony-bundle", 1980 | "extra": { 1981 | "branch-alias": { 1982 | "dev-master": "3.0.x-dev" 1983 | } 1984 | }, 1985 | "autoload": { 1986 | "psr-0": { 1987 | "Sensio\\Bundle\\FrameworkExtraBundle": "" 1988 | } 1989 | }, 1990 | "notification-url": "https://packagist.org/downloads/", 1991 | "license": [ 1992 | "MIT" 1993 | ], 1994 | "authors": [ 1995 | { 1996 | "name": "Fabien Potencier", 1997 | "email": "fabien@symfony.com" 1998 | } 1999 | ], 2000 | "description": "This bundle provides a way to configure your controllers with annotations", 2001 | "keywords": [ 2002 | "annotations", 2003 | "controllers" 2004 | ], 2005 | "time": "2015-04-02 12:28:58" 2006 | }, 2007 | { 2008 | "name": "sensiolabs/security-checker", 2009 | "version": "v2.0.5", 2010 | "source": { 2011 | "type": "git", 2012 | "url": "https://github.com/sensiolabs/security-checker.git", 2013 | "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810" 2014 | }, 2015 | "dist": { 2016 | "type": "zip", 2017 | "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/2c2a71f1c77d9765c12638c4724d9ca23658a810", 2018 | "reference": "2c2a71f1c77d9765c12638c4724d9ca23658a810", 2019 | "shasum": "" 2020 | }, 2021 | "require": { 2022 | "ext-curl": "*", 2023 | "symfony/console": "~2.0" 2024 | }, 2025 | "bin": [ 2026 | "security-checker" 2027 | ], 2028 | "type": "library", 2029 | "extra": { 2030 | "branch-alias": { 2031 | "dev-master": "2.0-dev" 2032 | } 2033 | }, 2034 | "autoload": { 2035 | "psr-0": { 2036 | "SensioLabs\\Security": "" 2037 | } 2038 | }, 2039 | "notification-url": "https://packagist.org/downloads/", 2040 | "license": [ 2041 | "MIT" 2042 | ], 2043 | "authors": [ 2044 | { 2045 | "name": "Fabien Potencier", 2046 | "email": "fabien.potencier@gmail.com" 2047 | } 2048 | ], 2049 | "description": "A security checker for your composer.lock", 2050 | "time": "2015-05-28 14:22:40" 2051 | }, 2052 | { 2053 | "name": "symfony/monolog-bundle", 2054 | "version": "v2.7.1", 2055 | "source": { 2056 | "type": "git", 2057 | "url": "https://github.com/symfony/MonologBundle.git", 2058 | "reference": "9320b6863404c70ebe111e9040dab96f251de7ac" 2059 | }, 2060 | "dist": { 2061 | "type": "zip", 2062 | "url": "https://api.github.com/repos/symfony/MonologBundle/zipball/9320b6863404c70ebe111e9040dab96f251de7ac", 2063 | "reference": "9320b6863404c70ebe111e9040dab96f251de7ac", 2064 | "shasum": "" 2065 | }, 2066 | "require": { 2067 | "monolog/monolog": "~1.8", 2068 | "php": ">=5.3.2", 2069 | "symfony/config": "~2.3", 2070 | "symfony/dependency-injection": "~2.3", 2071 | "symfony/http-kernel": "~2.3", 2072 | "symfony/monolog-bridge": "~2.3" 2073 | }, 2074 | "require-dev": { 2075 | "symfony/console": "~2.3", 2076 | "symfony/yaml": "~2.3" 2077 | }, 2078 | "type": "symfony-bundle", 2079 | "extra": { 2080 | "branch-alias": { 2081 | "dev-master": "2.7.x-dev" 2082 | } 2083 | }, 2084 | "autoload": { 2085 | "psr-4": { 2086 | "Symfony\\Bundle\\MonologBundle\\": "" 2087 | } 2088 | }, 2089 | "notification-url": "https://packagist.org/downloads/", 2090 | "license": [ 2091 | "MIT" 2092 | ], 2093 | "authors": [ 2094 | { 2095 | "name": "Symfony Community", 2096 | "homepage": "http://symfony.com/contributors" 2097 | }, 2098 | { 2099 | "name": "Fabien Potencier", 2100 | "email": "fabien@symfony.com" 2101 | } 2102 | ], 2103 | "description": "Symfony MonologBundle", 2104 | "homepage": "http://symfony.com", 2105 | "keywords": [ 2106 | "log", 2107 | "logging" 2108 | ], 2109 | "time": "2015-01-04 20:21:17" 2110 | }, 2111 | { 2112 | "name": "symfony/symfony", 2113 | "version": "v2.6.8", 2114 | "source": { 2115 | "type": "git", 2116 | "url": "https://github.com/symfony/symfony.git", 2117 | "reference": "7ae1934082d9ac299303b146e4a999274a723e94" 2118 | }, 2119 | "dist": { 2120 | "type": "zip", 2121 | "url": "https://api.github.com/repos/symfony/symfony/zipball/7ae1934082d9ac299303b146e4a999274a723e94", 2122 | "reference": "7ae1934082d9ac299303b146e4a999274a723e94", 2123 | "shasum": "" 2124 | }, 2125 | "require": { 2126 | "doctrine/common": "~2.3", 2127 | "php": ">=5.3.3", 2128 | "psr/log": "~1.0", 2129 | "twig/twig": "~1.12,>=1.12.3" 2130 | }, 2131 | "replace": { 2132 | "symfony/browser-kit": "self.version", 2133 | "symfony/class-loader": "self.version", 2134 | "symfony/config": "self.version", 2135 | "symfony/console": "self.version", 2136 | "symfony/css-selector": "self.version", 2137 | "symfony/debug": "self.version", 2138 | "symfony/debug-bundle": "self.version", 2139 | "symfony/dependency-injection": "self.version", 2140 | "symfony/doctrine-bridge": "self.version", 2141 | "symfony/dom-crawler": "self.version", 2142 | "symfony/event-dispatcher": "self.version", 2143 | "symfony/expression-language": "self.version", 2144 | "symfony/filesystem": "self.version", 2145 | "symfony/finder": "self.version", 2146 | "symfony/form": "self.version", 2147 | "symfony/framework-bundle": "self.version", 2148 | "symfony/http-foundation": "self.version", 2149 | "symfony/http-kernel": "self.version", 2150 | "symfony/intl": "self.version", 2151 | "symfony/locale": "self.version", 2152 | "symfony/monolog-bridge": "self.version", 2153 | "symfony/options-resolver": "self.version", 2154 | "symfony/process": "self.version", 2155 | "symfony/propel1-bridge": "self.version", 2156 | "symfony/property-access": "self.version", 2157 | "symfony/proxy-manager-bridge": "self.version", 2158 | "symfony/routing": "self.version", 2159 | "symfony/security": "self.version", 2160 | "symfony/security-acl": "self.version", 2161 | "symfony/security-bundle": "self.version", 2162 | "symfony/security-core": "self.version", 2163 | "symfony/security-csrf": "self.version", 2164 | "symfony/security-http": "self.version", 2165 | "symfony/serializer": "self.version", 2166 | "symfony/stopwatch": "self.version", 2167 | "symfony/swiftmailer-bridge": "self.version", 2168 | "symfony/templating": "self.version", 2169 | "symfony/translation": "self.version", 2170 | "symfony/twig-bridge": "self.version", 2171 | "symfony/twig-bundle": "self.version", 2172 | "symfony/validator": "self.version", 2173 | "symfony/var-dumper": "self.version", 2174 | "symfony/web-profiler-bundle": "self.version", 2175 | "symfony/yaml": "self.version" 2176 | }, 2177 | "require-dev": { 2178 | "doctrine/data-fixtures": "1.0.*", 2179 | "doctrine/dbal": "~2.2", 2180 | "doctrine/doctrine-bundle": "~1.2", 2181 | "doctrine/orm": "~2.2,>=2.2.3", 2182 | "egulias/email-validator": "~1.2", 2183 | "ircmaxell/password-compat": "~1.0", 2184 | "monolog/monolog": "~1.11", 2185 | "ocramius/proxy-manager": "~0.4|~1.0", 2186 | "propel/propel1": "~1.6", 2187 | "symfony/phpunit-bridge": "~2.7" 2188 | }, 2189 | "type": "library", 2190 | "extra": { 2191 | "branch-alias": { 2192 | "dev-master": "2.6-dev" 2193 | } 2194 | }, 2195 | "autoload": { 2196 | "psr-0": { 2197 | "Symfony\\": "src/" 2198 | }, 2199 | "classmap": [ 2200 | "src/Symfony/Component/HttpFoundation/Resources/stubs", 2201 | "src/Symfony/Component/Intl/Resources/stubs" 2202 | ], 2203 | "files": [ 2204 | "src/Symfony/Component/Intl/Resources/stubs/functions.php" 2205 | ] 2206 | }, 2207 | "notification-url": "https://packagist.org/downloads/", 2208 | "license": [ 2209 | "MIT" 2210 | ], 2211 | "authors": [ 2212 | { 2213 | "name": "Fabien Potencier", 2214 | "email": "fabien@symfony.com" 2215 | }, 2216 | { 2217 | "name": "Symfony Community", 2218 | "homepage": "https://symfony.com/contributors" 2219 | } 2220 | ], 2221 | "description": "The Symfony PHP framework", 2222 | "homepage": "https://symfony.com", 2223 | "keywords": [ 2224 | "framework" 2225 | ], 2226 | "time": "2015-05-27 00:17:10" 2227 | }, 2228 | { 2229 | "name": "twig/extensions", 2230 | "version": "v1.2.0", 2231 | "source": { 2232 | "type": "git", 2233 | "url": "https://github.com/twigphp/Twig-extensions.git", 2234 | "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd" 2235 | }, 2236 | "dist": { 2237 | "type": "zip", 2238 | "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/8cf4b9fe04077bd54fc73f4fde83347040c3b8cd", 2239 | "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd", 2240 | "shasum": "" 2241 | }, 2242 | "require": { 2243 | "twig/twig": "~1.12" 2244 | }, 2245 | "require-dev": { 2246 | "symfony/translation": "~2.3" 2247 | }, 2248 | "suggest": { 2249 | "symfony/translation": "Allow the time_diff output to be translated" 2250 | }, 2251 | "type": "library", 2252 | "extra": { 2253 | "branch-alias": { 2254 | "dev-master": "1.2.x-dev" 2255 | } 2256 | }, 2257 | "autoload": { 2258 | "psr-0": { 2259 | "Twig_Extensions_": "lib/" 2260 | } 2261 | }, 2262 | "notification-url": "https://packagist.org/downloads/", 2263 | "license": [ 2264 | "MIT" 2265 | ], 2266 | "authors": [ 2267 | { 2268 | "name": "Fabien Potencier", 2269 | "email": "fabien@symfony.com" 2270 | } 2271 | ], 2272 | "description": "Common additional features for Twig that do not directly belong in core", 2273 | "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html", 2274 | "keywords": [ 2275 | "i18n", 2276 | "text" 2277 | ], 2278 | "time": "2014-10-30 14:30:03" 2279 | }, 2280 | { 2281 | "name": "twig/twig", 2282 | "version": "v1.18.1", 2283 | "source": { 2284 | "type": "git", 2285 | "url": "https://github.com/twigphp/Twig.git", 2286 | "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f" 2287 | }, 2288 | "dist": { 2289 | "type": "zip", 2290 | "url": "https://api.github.com/repos/twigphp/Twig/zipball/9f70492f44398e276d1b81c1b43adfe6751c7b7f", 2291 | "reference": "9f70492f44398e276d1b81c1b43adfe6751c7b7f", 2292 | "shasum": "" 2293 | }, 2294 | "require": { 2295 | "php": ">=5.2.7" 2296 | }, 2297 | "type": "library", 2298 | "extra": { 2299 | "branch-alias": { 2300 | "dev-master": "1.18-dev" 2301 | } 2302 | }, 2303 | "autoload": { 2304 | "psr-0": { 2305 | "Twig_": "lib/" 2306 | } 2307 | }, 2308 | "notification-url": "https://packagist.org/downloads/", 2309 | "license": [ 2310 | "BSD-3-Clause" 2311 | ], 2312 | "authors": [ 2313 | { 2314 | "name": "Fabien Potencier", 2315 | "email": "fabien@symfony.com", 2316 | "homepage": "http://fabien.potencier.org", 2317 | "role": "Lead Developer" 2318 | }, 2319 | { 2320 | "name": "Armin Ronacher", 2321 | "email": "armin.ronacher@active-4.com", 2322 | "role": "Project Founder" 2323 | }, 2324 | { 2325 | "name": "Twig Team", 2326 | "homepage": "http://twig.sensiolabs.org/contributors", 2327 | "role": "Contributors" 2328 | } 2329 | ], 2330 | "description": "Twig, the flexible, fast, and secure template language for PHP", 2331 | "homepage": "http://twig.sensiolabs.org", 2332 | "keywords": [ 2333 | "templating" 2334 | ], 2335 | "time": "2015-04-19 08:30:27" 2336 | }, 2337 | { 2338 | "name": "willdurand/hateoas", 2339 | "version": "v2.6.0", 2340 | "source": { 2341 | "type": "git", 2342 | "url": "https://github.com/willdurand/Hateoas.git", 2343 | "reference": "fc0869381d6934e5d430084154584761297caa6c" 2344 | }, 2345 | "dist": { 2346 | "type": "zip", 2347 | "url": "https://api.github.com/repos/willdurand/Hateoas/zipball/fc0869381d6934e5d430084154584761297caa6c", 2348 | "reference": "fc0869381d6934e5d430084154584761297caa6c", 2349 | "shasum": "" 2350 | }, 2351 | "require": { 2352 | "doctrine/annotations": "~1.0", 2353 | "doctrine/common": "~2.0", 2354 | "jms/metadata": "~1.1", 2355 | "jms/serializer": "~0.13", 2356 | "php": ">=5.3", 2357 | "symfony/expression-language": "~2.4" 2358 | }, 2359 | "require-dev": { 2360 | "atoum/atoum": "*@dev", 2361 | "hautelook/frankenstein": "~0.1", 2362 | "pagerfanta/pagerfanta": "~1.0", 2363 | "phpunit/phpunit": "~3.7", 2364 | "symfony/dependency-injection": "~2.0", 2365 | "symfony/routing": "~2.0", 2366 | "symfony/yaml": "~2.0", 2367 | "twig/twig": "~1.12" 2368 | }, 2369 | "suggest": { 2370 | "symfony/routing": "To use the SymfonyRouteFactory.", 2371 | "symfony/yaml": "To use yaml based configuration.", 2372 | "twig/twig": "To use the Twig extensions." 2373 | }, 2374 | "type": "library", 2375 | "extra": { 2376 | "branch-alias": { 2377 | "dev-master": "2.6-dev" 2378 | } 2379 | }, 2380 | "autoload": { 2381 | "psr-0": { 2382 | "Hateoas": "src/" 2383 | } 2384 | }, 2385 | "notification-url": "https://packagist.org/downloads/", 2386 | "license": [ 2387 | "MIT" 2388 | ], 2389 | "authors": [ 2390 | { 2391 | "name": "Adrien Brault", 2392 | "email": "adrien.brault@gmail.com" 2393 | }, 2394 | { 2395 | "name": "William Durand", 2396 | "email": "william.durand1@gmail.com" 2397 | } 2398 | ], 2399 | "description": "A PHP library to support implementing representations for HATEOAS REST web services", 2400 | "time": "2015-05-21 21:57:34" 2401 | }, 2402 | { 2403 | "name": "willdurand/hateoas-bundle", 2404 | "version": "0.3.0", 2405 | "target-dir": "Bazinga/Bundle/HateoasBundle", 2406 | "source": { 2407 | "type": "git", 2408 | "url": "https://github.com/willdurand/BazingaHateoasBundle.git", 2409 | "reference": "2776be35729b27e31b15a49c05dae8fe3c03692f" 2410 | }, 2411 | "dist": { 2412 | "type": "zip", 2413 | "url": "https://api.github.com/repos/willdurand/BazingaHateoasBundle/zipball/2776be35729b27e31b15a49c05dae8fe3c03692f", 2414 | "reference": "2776be35729b27e31b15a49c05dae8fe3c03692f", 2415 | "shasum": "" 2416 | }, 2417 | "require": { 2418 | "jms/serializer-bundle": "~0.13", 2419 | "symfony/framework-bundle": "~2.2", 2420 | "willdurand/hateoas": "~2.0" 2421 | }, 2422 | "require-dev": { 2423 | "symfony/expression-language": "~2.4" 2424 | }, 2425 | "type": "symfony-bundle", 2426 | "extra": { 2427 | "branch-alias": { 2428 | "dev-master": "1.0.x-dev" 2429 | } 2430 | }, 2431 | "autoload": { 2432 | "psr-0": { 2433 | "Bazinga\\Bundle\\HateoasBundle": "" 2434 | } 2435 | }, 2436 | "notification-url": "https://packagist.org/downloads/", 2437 | "license": [ 2438 | "MIT" 2439 | ], 2440 | "authors": [ 2441 | { 2442 | "name": "William Durand", 2443 | "email": "william.durand1@gmail.com", 2444 | "homepage": "http://www.willdurand.fr" 2445 | } 2446 | ], 2447 | "description": "Integration of Hateoas into Symfony2.", 2448 | "keywords": [ 2449 | "HATEOAS", 2450 | "rest" 2451 | ], 2452 | "time": "2014-06-03 07:39:08" 2453 | }, 2454 | { 2455 | "name": "willdurand/jsonp-callback-validator", 2456 | "version": "v1.1.0", 2457 | "source": { 2458 | "type": "git", 2459 | "url": "https://github.com/willdurand/JsonpCallbackValidator.git", 2460 | "reference": "1a7d388bb521959e612ef50c5c7b1691b097e909" 2461 | }, 2462 | "dist": { 2463 | "type": "zip", 2464 | "url": "https://api.github.com/repos/willdurand/JsonpCallbackValidator/zipball/1a7d388bb521959e612ef50c5c7b1691b097e909", 2465 | "reference": "1a7d388bb521959e612ef50c5c7b1691b097e909", 2466 | "shasum": "" 2467 | }, 2468 | "require": { 2469 | "php": ">=5.3.0" 2470 | }, 2471 | "require-dev": { 2472 | "phpunit/phpunit": "~3.7" 2473 | }, 2474 | "type": "library", 2475 | "autoload": { 2476 | "psr-0": { 2477 | "JsonpCallbackValidator": "src/" 2478 | } 2479 | }, 2480 | "notification-url": "https://packagist.org/downloads/", 2481 | "license": [ 2482 | "MIT" 2483 | ], 2484 | "authors": [ 2485 | { 2486 | "name": "William Durand", 2487 | "email": "william.durand1@gmail.com", 2488 | "homepage": "http://www.willdurand.fr" 2489 | } 2490 | ], 2491 | "description": "JSONP callback validator.", 2492 | "time": "2014-01-20 22:35:06" 2493 | }, 2494 | { 2495 | "name": "willdurand/negotiation", 2496 | "version": "1.3.4", 2497 | "source": { 2498 | "type": "git", 2499 | "url": "https://github.com/willdurand/Negotiation.git", 2500 | "reference": "d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c" 2501 | }, 2502 | "dist": { 2503 | "type": "zip", 2504 | "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c", 2505 | "reference": "d7fa4ce4a0436915b9ba9f7cb5ff37719f0a834c", 2506 | "shasum": "" 2507 | }, 2508 | "require": { 2509 | "php": ">=5.3.0" 2510 | }, 2511 | "type": "library", 2512 | "extra": { 2513 | "branch-alias": { 2514 | "dev-master": "1.3-dev" 2515 | } 2516 | }, 2517 | "autoload": { 2518 | "psr-0": { 2519 | "Negotiation": "src/" 2520 | } 2521 | }, 2522 | "notification-url": "https://packagist.org/downloads/", 2523 | "license": [ 2524 | "MIT" 2525 | ], 2526 | "authors": [ 2527 | { 2528 | "name": "William Durand", 2529 | "email": "william.durand1@gmail.com" 2530 | } 2531 | ], 2532 | "description": "Content Negotiation tools for PHP provided as a standalone library.", 2533 | "homepage": "http://williamdurand.fr/Negotiation/", 2534 | "keywords": [ 2535 | "accept", 2536 | "content", 2537 | "format", 2538 | "header", 2539 | "negotiation" 2540 | ], 2541 | "time": "2014-10-02 07:26:00" 2542 | } 2543 | ], 2544 | "packages-dev": [ 2545 | { 2546 | "name": "fabpot/php-cs-fixer", 2547 | "version": "dev-master", 2548 | "source": { 2549 | "type": "git", 2550 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 2551 | "reference": "376ae43573a621cd7cba3baaab6d60142d12c61c" 2552 | }, 2553 | "dist": { 2554 | "type": "zip", 2555 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/376ae43573a621cd7cba3baaab6d60142d12c61c", 2556 | "reference": "376ae43573a621cd7cba3baaab6d60142d12c61c", 2557 | "shasum": "" 2558 | }, 2559 | "require": { 2560 | "ext-tokenizer": "*", 2561 | "php": ">=5.3.6", 2562 | "sebastian/diff": "~1.1", 2563 | "symfony/console": "~2.3", 2564 | "symfony/event-dispatcher": "~2.1", 2565 | "symfony/filesystem": "~2.1", 2566 | "symfony/finder": "~2.1", 2567 | "symfony/process": "~2.3", 2568 | "symfony/stopwatch": "~2.5" 2569 | }, 2570 | "require-dev": { 2571 | "satooshi/php-coveralls": "0.7.*@dev" 2572 | }, 2573 | "bin": [ 2574 | "php-cs-fixer" 2575 | ], 2576 | "type": "application", 2577 | "extra": { 2578 | "branch-alias": { 2579 | "dev-master": "2.0-dev" 2580 | } 2581 | }, 2582 | "autoload": { 2583 | "psr-4": { 2584 | "Symfony\\CS\\": "Symfony/CS/" 2585 | } 2586 | }, 2587 | "notification-url": "https://packagist.org/downloads/", 2588 | "license": [ 2589 | "MIT" 2590 | ], 2591 | "authors": [ 2592 | { 2593 | "name": "Dariusz Rumiński", 2594 | "email": "dariusz.ruminski@gmail.com" 2595 | }, 2596 | { 2597 | "name": "Fabien Potencier", 2598 | "email": "fabien@symfony.com" 2599 | } 2600 | ], 2601 | "description": "A tool to automatically fix PHP code style", 2602 | "time": "2015-05-27 18:58:22" 2603 | }, 2604 | { 2605 | "name": "phpdocumentor/reflection-docblock", 2606 | "version": "2.0.4", 2607 | "source": { 2608 | "type": "git", 2609 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 2610 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" 2611 | }, 2612 | "dist": { 2613 | "type": "zip", 2614 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", 2615 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", 2616 | "shasum": "" 2617 | }, 2618 | "require": { 2619 | "php": ">=5.3.3" 2620 | }, 2621 | "require-dev": { 2622 | "phpunit/phpunit": "~4.0" 2623 | }, 2624 | "suggest": { 2625 | "dflydev/markdown": "~1.0", 2626 | "erusev/parsedown": "~1.0" 2627 | }, 2628 | "type": "library", 2629 | "extra": { 2630 | "branch-alias": { 2631 | "dev-master": "2.0.x-dev" 2632 | } 2633 | }, 2634 | "autoload": { 2635 | "psr-0": { 2636 | "phpDocumentor": [ 2637 | "src/" 2638 | ] 2639 | } 2640 | }, 2641 | "notification-url": "https://packagist.org/downloads/", 2642 | "license": [ 2643 | "MIT" 2644 | ], 2645 | "authors": [ 2646 | { 2647 | "name": "Mike van Riel", 2648 | "email": "mike.vanriel@naenius.com" 2649 | } 2650 | ], 2651 | "time": "2015-02-03 12:10:50" 2652 | }, 2653 | { 2654 | "name": "phpspec/php-diff", 2655 | "version": "v1.0.2", 2656 | "source": { 2657 | "type": "git", 2658 | "url": "https://github.com/phpspec/php-diff.git", 2659 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" 2660 | }, 2661 | "dist": { 2662 | "type": "zip", 2663 | "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", 2664 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", 2665 | "shasum": "" 2666 | }, 2667 | "type": "library", 2668 | "autoload": { 2669 | "psr-0": { 2670 | "Diff": "lib/" 2671 | } 2672 | }, 2673 | "notification-url": "https://packagist.org/downloads/", 2674 | "license": [ 2675 | "BSD-3-Clause" 2676 | ], 2677 | "authors": [ 2678 | { 2679 | "name": "Chris Boulton", 2680 | "homepage": "http://github.com/chrisboulton", 2681 | "role": "Original developer" 2682 | } 2683 | ], 2684 | "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", 2685 | "time": "2013-11-01 13:02:21" 2686 | }, 2687 | { 2688 | "name": "phpspec/phpspec", 2689 | "version": "2.2.0", 2690 | "source": { 2691 | "type": "git", 2692 | "url": "https://github.com/phpspec/phpspec.git", 2693 | "reference": "9727d75919a00455433e867565bc022f0b985a39" 2694 | }, 2695 | "dist": { 2696 | "type": "zip", 2697 | "url": "https://api.github.com/repos/phpspec/phpspec/zipball/9727d75919a00455433e867565bc022f0b985a39", 2698 | "reference": "9727d75919a00455433e867565bc022f0b985a39", 2699 | "shasum": "" 2700 | }, 2701 | "require": { 2702 | "doctrine/instantiator": "^1.0.1", 2703 | "php": ">=5.3.3", 2704 | "phpspec/php-diff": "~1.0.0", 2705 | "phpspec/prophecy": "~1.4", 2706 | "sebastian/exporter": "~1.0", 2707 | "symfony/console": "~2.3", 2708 | "symfony/event-dispatcher": "~2.1", 2709 | "symfony/finder": "~2.1", 2710 | "symfony/process": "~2.1", 2711 | "symfony/yaml": "~2.1" 2712 | }, 2713 | "require-dev": { 2714 | "behat/behat": "^3.0.11", 2715 | "bossa/phpspec2-expect": "~1.0", 2716 | "phpunit/phpunit": "~4.4", 2717 | "symfony/filesystem": "~2.1", 2718 | "symfony/process": "~2.1" 2719 | }, 2720 | "suggest": { 2721 | "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters" 2722 | }, 2723 | "bin": [ 2724 | "bin/phpspec" 2725 | ], 2726 | "type": "library", 2727 | "extra": { 2728 | "branch-alias": { 2729 | "dev-master": "2.2.x-dev" 2730 | } 2731 | }, 2732 | "autoload": { 2733 | "psr-0": { 2734 | "PhpSpec": "src/" 2735 | } 2736 | }, 2737 | "notification-url": "https://packagist.org/downloads/", 2738 | "license": [ 2739 | "MIT" 2740 | ], 2741 | "authors": [ 2742 | { 2743 | "name": "Konstantin Kudryashov", 2744 | "email": "ever.zet@gmail.com", 2745 | "homepage": "http://everzet.com" 2746 | }, 2747 | { 2748 | "name": "Marcello Duarte", 2749 | "homepage": "http://marcelloduarte.net/" 2750 | } 2751 | ], 2752 | "description": "Specification-oriented BDD framework for PHP 5.3+", 2753 | "homepage": "http://phpspec.net/", 2754 | "keywords": [ 2755 | "BDD", 2756 | "SpecBDD", 2757 | "TDD", 2758 | "spec", 2759 | "specification", 2760 | "testing", 2761 | "tests" 2762 | ], 2763 | "time": "2015-04-18 16:22:51" 2764 | }, 2765 | { 2766 | "name": "phpspec/prophecy", 2767 | "version": "v1.4.1", 2768 | "source": { 2769 | "type": "git", 2770 | "url": "https://github.com/phpspec/prophecy.git", 2771 | "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" 2772 | }, 2773 | "dist": { 2774 | "type": "zip", 2775 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", 2776 | "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", 2777 | "shasum": "" 2778 | }, 2779 | "require": { 2780 | "doctrine/instantiator": "^1.0.2", 2781 | "phpdocumentor/reflection-docblock": "~2.0", 2782 | "sebastian/comparator": "~1.1" 2783 | }, 2784 | "require-dev": { 2785 | "phpspec/phpspec": "~2.0" 2786 | }, 2787 | "type": "library", 2788 | "extra": { 2789 | "branch-alias": { 2790 | "dev-master": "1.4.x-dev" 2791 | } 2792 | }, 2793 | "autoload": { 2794 | "psr-0": { 2795 | "Prophecy\\": "src/" 2796 | } 2797 | }, 2798 | "notification-url": "https://packagist.org/downloads/", 2799 | "license": [ 2800 | "MIT" 2801 | ], 2802 | "authors": [ 2803 | { 2804 | "name": "Konstantin Kudryashov", 2805 | "email": "ever.zet@gmail.com", 2806 | "homepage": "http://everzet.com" 2807 | }, 2808 | { 2809 | "name": "Marcello Duarte", 2810 | "email": "marcello.duarte@gmail.com" 2811 | } 2812 | ], 2813 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2814 | "homepage": "https://github.com/phpspec/prophecy", 2815 | "keywords": [ 2816 | "Double", 2817 | "Dummy", 2818 | "fake", 2819 | "mock", 2820 | "spy", 2821 | "stub" 2822 | ], 2823 | "time": "2015-04-27 22:15:08" 2824 | }, 2825 | { 2826 | "name": "sebastian/comparator", 2827 | "version": "1.1.1", 2828 | "source": { 2829 | "type": "git", 2830 | "url": "https://github.com/sebastianbergmann/comparator.git", 2831 | "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" 2832 | }, 2833 | "dist": { 2834 | "type": "zip", 2835 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", 2836 | "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", 2837 | "shasum": "" 2838 | }, 2839 | "require": { 2840 | "php": ">=5.3.3", 2841 | "sebastian/diff": "~1.2", 2842 | "sebastian/exporter": "~1.2" 2843 | }, 2844 | "require-dev": { 2845 | "phpunit/phpunit": "~4.4" 2846 | }, 2847 | "type": "library", 2848 | "extra": { 2849 | "branch-alias": { 2850 | "dev-master": "1.1.x-dev" 2851 | } 2852 | }, 2853 | "autoload": { 2854 | "classmap": [ 2855 | "src/" 2856 | ] 2857 | }, 2858 | "notification-url": "https://packagist.org/downloads/", 2859 | "license": [ 2860 | "BSD-3-Clause" 2861 | ], 2862 | "authors": [ 2863 | { 2864 | "name": "Jeff Welch", 2865 | "email": "whatthejeff@gmail.com" 2866 | }, 2867 | { 2868 | "name": "Volker Dusch", 2869 | "email": "github@wallbash.com" 2870 | }, 2871 | { 2872 | "name": "Bernhard Schussek", 2873 | "email": "bschussek@2bepublished.at" 2874 | }, 2875 | { 2876 | "name": "Sebastian Bergmann", 2877 | "email": "sebastian@phpunit.de" 2878 | } 2879 | ], 2880 | "description": "Provides the functionality to compare PHP values for equality", 2881 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2882 | "keywords": [ 2883 | "comparator", 2884 | "compare", 2885 | "equality" 2886 | ], 2887 | "time": "2015-01-29 16:28:08" 2888 | }, 2889 | { 2890 | "name": "sebastian/diff", 2891 | "version": "1.3.0", 2892 | "source": { 2893 | "type": "git", 2894 | "url": "https://github.com/sebastianbergmann/diff.git", 2895 | "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" 2896 | }, 2897 | "dist": { 2898 | "type": "zip", 2899 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", 2900 | "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", 2901 | "shasum": "" 2902 | }, 2903 | "require": { 2904 | "php": ">=5.3.3" 2905 | }, 2906 | "require-dev": { 2907 | "phpunit/phpunit": "~4.2" 2908 | }, 2909 | "type": "library", 2910 | "extra": { 2911 | "branch-alias": { 2912 | "dev-master": "1.3-dev" 2913 | } 2914 | }, 2915 | "autoload": { 2916 | "classmap": [ 2917 | "src/" 2918 | ] 2919 | }, 2920 | "notification-url": "https://packagist.org/downloads/", 2921 | "license": [ 2922 | "BSD-3-Clause" 2923 | ], 2924 | "authors": [ 2925 | { 2926 | "name": "Kore Nordmann", 2927 | "email": "mail@kore-nordmann.de" 2928 | }, 2929 | { 2930 | "name": "Sebastian Bergmann", 2931 | "email": "sebastian@phpunit.de" 2932 | } 2933 | ], 2934 | "description": "Diff implementation", 2935 | "homepage": "http://www.github.com/sebastianbergmann/diff", 2936 | "keywords": [ 2937 | "diff" 2938 | ], 2939 | "time": "2015-02-22 15:13:53" 2940 | }, 2941 | { 2942 | "name": "sebastian/exporter", 2943 | "version": "1.2.0", 2944 | "source": { 2945 | "type": "git", 2946 | "url": "https://github.com/sebastianbergmann/exporter.git", 2947 | "reference": "84839970d05254c73cde183a721c7af13aede943" 2948 | }, 2949 | "dist": { 2950 | "type": "zip", 2951 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", 2952 | "reference": "84839970d05254c73cde183a721c7af13aede943", 2953 | "shasum": "" 2954 | }, 2955 | "require": { 2956 | "php": ">=5.3.3", 2957 | "sebastian/recursion-context": "~1.0" 2958 | }, 2959 | "require-dev": { 2960 | "phpunit/phpunit": "~4.4" 2961 | }, 2962 | "type": "library", 2963 | "extra": { 2964 | "branch-alias": { 2965 | "dev-master": "1.2.x-dev" 2966 | } 2967 | }, 2968 | "autoload": { 2969 | "classmap": [ 2970 | "src/" 2971 | ] 2972 | }, 2973 | "notification-url": "https://packagist.org/downloads/", 2974 | "license": [ 2975 | "BSD-3-Clause" 2976 | ], 2977 | "authors": [ 2978 | { 2979 | "name": "Jeff Welch", 2980 | "email": "whatthejeff@gmail.com" 2981 | }, 2982 | { 2983 | "name": "Volker Dusch", 2984 | "email": "github@wallbash.com" 2985 | }, 2986 | { 2987 | "name": "Bernhard Schussek", 2988 | "email": "bschussek@2bepublished.at" 2989 | }, 2990 | { 2991 | "name": "Sebastian Bergmann", 2992 | "email": "sebastian@phpunit.de" 2993 | }, 2994 | { 2995 | "name": "Adam Harvey", 2996 | "email": "aharvey@php.net" 2997 | } 2998 | ], 2999 | "description": "Provides the functionality to export PHP variables for visualization", 3000 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 3001 | "keywords": [ 3002 | "export", 3003 | "exporter" 3004 | ], 3005 | "time": "2015-01-27 07:23:06" 3006 | }, 3007 | { 3008 | "name": "sebastian/recursion-context", 3009 | "version": "1.0.0", 3010 | "source": { 3011 | "type": "git", 3012 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3013 | "reference": "3989662bbb30a29d20d9faa04a846af79b276252" 3014 | }, 3015 | "dist": { 3016 | "type": "zip", 3017 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", 3018 | "reference": "3989662bbb30a29d20d9faa04a846af79b276252", 3019 | "shasum": "" 3020 | }, 3021 | "require": { 3022 | "php": ">=5.3.3" 3023 | }, 3024 | "require-dev": { 3025 | "phpunit/phpunit": "~4.4" 3026 | }, 3027 | "type": "library", 3028 | "extra": { 3029 | "branch-alias": { 3030 | "dev-master": "1.0.x-dev" 3031 | } 3032 | }, 3033 | "autoload": { 3034 | "classmap": [ 3035 | "src/" 3036 | ] 3037 | }, 3038 | "notification-url": "https://packagist.org/downloads/", 3039 | "license": [ 3040 | "BSD-3-Clause" 3041 | ], 3042 | "authors": [ 3043 | { 3044 | "name": "Jeff Welch", 3045 | "email": "whatthejeff@gmail.com" 3046 | }, 3047 | { 3048 | "name": "Sebastian Bergmann", 3049 | "email": "sebastian@phpunit.de" 3050 | }, 3051 | { 3052 | "name": "Adam Harvey", 3053 | "email": "aharvey@php.net" 3054 | } 3055 | ], 3056 | "description": "Provides functionality to recursively process PHP variables", 3057 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3058 | "time": "2015-01-24 09:48:32" 3059 | } 3060 | ], 3061 | "aliases": [], 3062 | "minimum-stability": "stable", 3063 | "stability-flags": { 3064 | "fabpot/php-cs-fixer": 20 3065 | }, 3066 | "prefer-stable": false, 3067 | "prefer-lowest": false, 3068 | "platform": { 3069 | "php": ">=5.4" 3070 | }, 3071 | "platform-dev": [] 3072 | } 3073 | -------------------------------------------------------------------------------- /parameters.yml.dist: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | parameters: 9 | app_dir: "%kernel.root_dir%/../../../../app" 10 | twig_views_path: ["%kernel.root_dir%/../../Ui/Twig/views"] 11 | symfony: 12 | debug: 1 13 | env: dev 14 | cache: cache 15 | logs: logs 16 | 17 | database_driver: pdo_mysql 18 | database_host: 127.0.0.1 19 | database_port: ~ 20 | database_name: dbName 21 | database_dsn: "mysql:host=localhost;dbname=%database_name%" 22 | database_user: root 23 | database_password: root 24 | 25 | locale: en 26 | secret: bvfbdfovfo3u5uve09dfdfv2vdfdfbFg 27 | monolog_action_level: debug 28 | -------------------------------------------------------------------------------- /spec/Application/Service/User/SignInUserRequestSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Application\Service\User; 13 | 14 | use Domain\Model\User\UserEmail; 15 | use PhpSpec\ObjectBehavior; 16 | 17 | /** 18 | * Class SignInUserRequestSpec. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class SignInUserRequestSpec extends ObjectBehavior 23 | { 24 | function let(UserEmail $email) 25 | { 26 | $this->beConstructedWith($email, 'password'); 27 | } 28 | 29 | function it_is_initializable() 30 | { 31 | $this->shouldHaveType('Application\Service\User\SignInUserRequest'); 32 | } 33 | 34 | function its_email(UserEmail $email) 35 | { 36 | $this->email()->shouldReturn($email); 37 | } 38 | 39 | function its_password() 40 | { 41 | $this->password()->shouldReturn('password'); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /spec/Application/Service/User/SignInUserServiceSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Application\Service\User; 13 | 14 | use Application\Service\User\SignInUserRequest; 15 | use Domain\Exception\User\UserAlreadyExistsException; 16 | use Domain\Factory\User\UserFactory; 17 | use Domain\Model\User\User; 18 | use Domain\Model\User\UserEmail; 19 | use Domain\Model\User\UserId; 20 | use Domain\Repository\User\PersistentUserRepository; 21 | use Domain\Repository\User\UserRepository; 22 | use PhpSpec\ObjectBehavior; 23 | 24 | /** 25 | * Class SignInUserServiceSpec. 26 | * 27 | * @author Beñat Espiña 28 | */ 29 | class SignInUserServiceSpec extends ObjectBehavior 30 | { 31 | function let(PersistentUserRepository $repository, UserFactory $factory) 32 | { 33 | $this->beConstructedWith($repository, $factory); 34 | } 35 | 36 | function it_is_initializable() 37 | { 38 | $this->shouldHaveType('Application\Service\User\SignInUserService'); 39 | } 40 | 41 | function it_implements_ApplicationService() 42 | { 43 | $this->shouldImplement('Ddd\Application\Service\ApplicationService'); 44 | } 45 | 46 | function it_does_not_register_because_the_request_is_not_SignInUserRequest_instance() 47 | { 48 | $this->shouldThrow( 49 | new \InvalidArgumentException('The request must be SignInUserRequest instance') 50 | )->during('execute', [null]); 51 | } 52 | 53 | function it_does_not_register_because_the_user_is_already_exists( 54 | SignInUserRequest $request, 55 | UserEmail $email, 56 | UserRepository $repository, 57 | User $user 58 | ) { 59 | $request->email()->shouldBeCalled()->willReturn($email); 60 | $request->password()->shouldBeCalled()->willReturn('password'); 61 | 62 | $repository->userOfEmail($email)->shouldBeCalled()->willReturn($user); 63 | 64 | $this->shouldThrow(new UserAlreadyExistsException())->during('execute', [$request]); 65 | } 66 | 67 | function it_registers_the_user( 68 | SignInUserRequest $request, 69 | UserEmail $email, 70 | PersistentUserRepository $repository, 71 | User $user, 72 | UserFactory $factory, 73 | UserId $userId 74 | ) { 75 | $request->email()->shouldBeCalled()->willReturn($email); 76 | $request->password()->shouldBeCalled()->willReturn('password'); 77 | 78 | $repository->userOfEmail($email)->shouldBeCalled()->willReturn(null); 79 | $repository->nextIdentity()->shouldBeCalled()->willReturn($userId); 80 | $factory->register($userId, $email, 'password')->shouldBeCalled()->willReturn($user); 81 | $repository->save($user)->shouldBeCalled(); 82 | 83 | $this->execute($request)->shouldReturn($user); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /spec/Domain/Event/User/UserRegisteredSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Domain\Event\User; 13 | 14 | use Domain\Model\User\UserId; 15 | use PhpSpec\ObjectBehavior; 16 | 17 | /** 18 | * Class UserRegisteredSpec. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class UserRegisteredSpec extends ObjectBehavior 23 | { 24 | function let(UserId $userId) 25 | { 26 | $this->beConstructedWith($userId); 27 | } 28 | 29 | function it_is_initializable() 30 | { 31 | $this->shouldHaveType('Domain\Event\User\UserRegistered'); 32 | } 33 | 34 | function it_implements_DomainEvent() 35 | { 36 | $this->shouldImplement('Ddd\Domain\DomainEvent'); 37 | } 38 | 39 | function its_user_id(UserId $userId) 40 | { 41 | $this->userId()->shouldReturn($userId); 42 | } 43 | 44 | function its_occurred_on() 45 | { 46 | $this->occurredOn()->shouldBeLike(new \DateTime()); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /spec/Domain/Exception/User/UserAlreadyExistsExceptionSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Domain\Exception\User; 13 | 14 | use PhpSpec\ObjectBehavior; 15 | 16 | /** 17 | * Class UserAlreadyExistsExceptionSpec. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class UserAlreadyExistsExceptionSpec extends ObjectBehavior 22 | { 23 | function it_is_initializable() 24 | { 25 | $this->shouldHaveType('Domain\Exception\User\UserAlreadyExistsException'); 26 | } 27 | 28 | function it_extends_Exception() 29 | { 30 | $this->shouldHaveType('Exception'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /spec/Domain/Model/User/UserEmailSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Domain\Model\User; 13 | 14 | use PhpSpec\ObjectBehavior; 15 | 16 | /** 17 | * Class UserEmailSpec. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class UserEmailSpec extends ObjectBehavior 22 | { 23 | function let() 24 | { 25 | $this->beConstructedWith('ddd@symfony.com'); 26 | } 27 | 28 | function it_is_initializable() 29 | { 30 | $this->shouldHaveType('Domain\Model\User\UserEmail'); 31 | } 32 | 33 | function it_extends_EmailAddress() 34 | { 35 | $this->shouldHaveType('Email\EmailAddress'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /spec/Domain/Model/User/UserIdSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Domain\Model\User; 13 | 14 | use Domain\Model\User\UserId; 15 | use PhpSpec\ObjectBehavior; 16 | 17 | /** 18 | * Class UserId. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class UserIdSpec extends ObjectBehavior 23 | { 24 | function let() 25 | { 26 | $this->beConstructedWith('theid'); 27 | } 28 | 29 | function it_is_initializable() 30 | { 31 | $this->shouldHaveType('Domain\Model\User\UserId'); 32 | } 33 | 34 | function its_id() 35 | { 36 | $this->id()->shouldReturn('theid'); 37 | } 38 | 39 | function it_should_not_be_equals(UserId $userId) 40 | { 41 | $userId->id()->shouldBeCalled()->willReturn('otherid'); 42 | 43 | $this->equals($userId)->shouldReturn(false); 44 | } 45 | 46 | function it_should_be_equals(UserId $userId) 47 | { 48 | $userId->id()->shouldBeCalled()->willReturn('theid'); 49 | 50 | $this->equals($userId)->shouldReturn(true); 51 | } 52 | 53 | function its_to_string() 54 | { 55 | $this->__toString()->shouldReturn('theid'); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /spec/Domain/Model/User/UserSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Domain\Model\User; 13 | 14 | use Domain\Model\User\UserEmail; 15 | use Domain\Model\User\UserId; 16 | use PhpSpec\ObjectBehavior; 17 | 18 | /** 19 | * Class User. 20 | * 21 | * @author Beñat Espiña 22 | */ 23 | class UserSpec extends ObjectBehavior 24 | { 25 | function let(UserId $userId, UserEmail $email) 26 | { 27 | $this->beConstructedWith($userId, $email, 'password'); 28 | } 29 | 30 | function it_is_initializable() 31 | { 32 | $this->shouldHaveType('Domain\Model\User\User'); 33 | } 34 | 35 | function its_id(UserId $userId) 36 | { 37 | $this->id()->shouldReturn($userId); 38 | } 39 | 40 | function its_email(UserEmail $email) 41 | { 42 | $this->email()->shouldReturn($email); 43 | } 44 | 45 | function its_password() 46 | { 47 | $this->password()->shouldReturn('password'); 48 | } 49 | 50 | function it_does_not_change_the_password_because_it_is_invalid_password() 51 | { 52 | $this->shouldThrow(new \InvalidArgumentException('password'))->during('changePassword', [' ']); 53 | } 54 | 55 | function it_changes_the_password() 56 | { 57 | $this->changePassword('newpassword')->shouldReturn($this); 58 | $this->password()->shouldReturn('newpassword'); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /spec/Infrastructure/Factory/User/UserFactorySpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Infrastructure\Factory\User; 13 | 14 | use Domain\Model\User\UserEmail; 15 | use Domain\Model\User\UserId; 16 | use PhpSpec\ObjectBehavior; 17 | 18 | /** 19 | * Class UserFactorySpec. 20 | * 21 | * @author Beñat Espiña 22 | */ 23 | class UserFactorySpec extends ObjectBehavior 24 | { 25 | function it_is_initializable() 26 | { 27 | $this->shouldHaveType('Infrastructure\Factory\User\UserFactory'); 28 | } 29 | 30 | function it_implements_UserFactory() 31 | { 32 | $this->shouldImplement('Domain\Factory\User\UserFactory'); 33 | } 34 | 35 | function it_register(UserId $userId, UserEmail $email) 36 | { 37 | $this->register($userId, $email, 'password')->shouldReturnAnInstanceOf('Domain\Model\User\User'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /spec/Infrastructure/Persistence/Sql/Repository/User/SqlPersistentUserRepositorySpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Infrastructure\Persistence\Sql\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Model\User\UserEmail; 16 | use Domain\Model\User\UserId; 17 | use Infrastructure\Persistence\Sql\Repository\User\SqlUserRepository; 18 | use Infrastructure\Persistence\Sql\SqlManager; 19 | use PhpSpec\ObjectBehavior; 20 | 21 | /** 22 | * Class SqlPersistentUserRepositorySpec. 23 | * 24 | * @author Beñat Espiña 25 | */ 26 | class SqlPersistentUserRepositorySpec extends ObjectBehavior 27 | { 28 | function let(SqlManager $pdo) 29 | { 30 | $this->beConstructedWith($pdo); 31 | } 32 | 33 | function it_inserts( 34 | SqlManager $pdo, 35 | \PDOStatement $statement, 36 | User $user, 37 | UserId $userId, 38 | UserEmail $email 39 | ) { 40 | $user->id()->shouldBeCalled()->willReturn($userId); 41 | $userId->id()->shouldBeCalled()->willReturn('theid'); 42 | $user->email()->shouldBeCalled()->willReturn($email); 43 | $email->getValue()->shouldBeCalled()->willReturn('ddd@symfony.com'); 44 | $user->password()->shouldBeCalled()->willReturn('password'); 45 | 46 | $pdo->execute( 47 | sprintf('SELECT COUNT(*) FROM %s WHERE id = :id', SqlUserRepository::TABLE_NAME), [':id' => 'theid'] 48 | )->shouldBeCalled()->willReturn($statement); 49 | $statement->fetchColumn()->shouldBeCalled()->willReturn(0); 50 | 51 | $pdo->execute( 52 | sprintf( 53 | 'INSERT INTO %s (id, email, password) VALUES (:id, :email, :password)', SqlUserRepository::TABLE_NAME 54 | ), ['id' => 'theid', 'email' => 'ddd@symfony.com', 'password' => 'password'] 55 | )->shouldBeCalled()->willReturn($statement); 56 | 57 | $this->save($user); 58 | } 59 | 60 | function it_updates( 61 | SqlManager $pdo, 62 | \PDOStatement $statement, 63 | User $user, 64 | UserId $userId, 65 | UserEmail $email 66 | ) { 67 | $user->id()->shouldBeCalled()->willReturn($userId); 68 | $userId->id()->shouldBeCalled()->willReturn('theid'); 69 | $user->email()->shouldBeCalled()->willReturn($email); 70 | $email->getValue()->shouldBeCalled()->willReturn('ddd@symfony.com'); 71 | $user->password()->shouldBeCalled()->willReturn('password'); 72 | 73 | $pdo->execute( 74 | sprintf('SELECT COUNT(*) FROM %s WHERE id = :id', SqlUserRepository::TABLE_NAME), [':id' => 'theid'] 75 | )->shouldBeCalled()->willReturn($statement); 76 | $statement->fetchColumn()->shouldBeCalled()->willReturn(1); 77 | 78 | $pdo->execute( 79 | sprintf('UPDATE %s SET email = :email, password = :password WHERE id = :id', SqlUserRepository::TABLE_NAME), 80 | ['id' => 'theid', 'email' => 'ddd@symfony.com', 'password' => 'password'] 81 | )->shouldBeCalled()->willReturn($statement); 82 | 83 | $this->save($user); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /spec/Infrastructure/Persistence/Sql/Repository/User/SqlUserRepositorySpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Infrastructure\Persistence\Sql\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Model\User\UserEmail; 16 | use Domain\Model\User\UserId; 17 | use Infrastructure\Persistence\Sql\Repository\User\SqlUserRepository; 18 | use Infrastructure\Persistence\Sql\Repository\User\SqlUserSpecification; 19 | use Infrastructure\Persistence\Sql\SqlManager; 20 | use PhpSpec\ObjectBehavior; 21 | use Prophecy\Argument; 22 | 23 | /** 24 | * Class SqlUserRepositorySpec. 25 | * 26 | * @author Beñat Espiña 27 | */ 28 | class SqlUserRepositorySpec extends ObjectBehavior 29 | { 30 | function let(SqlManager $pdo) 31 | { 32 | $this->beConstructedWith($pdo); 33 | } 34 | 35 | function it_removes(SqlManager $pdo, \PDOStatement $statement, User $user, UserId $userId) 36 | { 37 | $user->id()->shouldBeCalled()->willReturn($userId); 38 | $userId->id()->shouldBeCalled()->willReturn('theid'); 39 | 40 | $pdo->execute( 41 | sprintf('DELETE FROM %s WHERE id = :id', SqlUserRepository::TABLE_NAME), ['id' => 'theid'] 42 | )->shouldBeCalled()->willReturn($statement); 43 | 44 | $this->remove($user); 45 | } 46 | 47 | function its_user_of_id_when_it_does_not_exist(SqlManager $pdo, \PDOStatement $statement, UserId $userId) 48 | { 49 | $userId->id()->shouldBeCalled()->willReturn('theid'); 50 | 51 | $pdo->execute( 52 | sprintf('SELECT * FROM %s WHERE id = :id', SqlUserRepository::TABLE_NAME), ['id' => 'theid'] 53 | )->shouldBeCalled()->willReturn($statement); 54 | 55 | $statement->fetch(\PDO::FETCH_ASSOC)->shouldBeCalled()->willReturn(0); 56 | 57 | $this->userOfId($userId)->shouldReturn(null); 58 | } 59 | 60 | function its_user_of_id(SqlManager $pdo, \PDOStatement $statement, UserId $userId) 61 | { 62 | $userId->id()->shouldBeCalled()->willReturn('theid'); 63 | 64 | $pdo->execute( 65 | sprintf('SELECT * FROM %s WHERE id = :id', SqlUserRepository::TABLE_NAME), ['id' => 'theid'] 66 | )->shouldBeCalled()->willReturn($statement); 67 | 68 | $statement->fetch(\PDO::FETCH_ASSOC)->shouldBeCalled()->willReturn( 69 | ['id' => 'theid', 'email' => 'ddd@symfony.com', 'password' => 'password'] 70 | ); 71 | 72 | $this->userOfId($userId)->shouldReturnAnInstanceOf('Domain\Model\User\User'); 73 | } 74 | 75 | function its_user_of_email_when_it_does_not_exist(SqlManager $pdo, \PDOStatement $statement, UserEmail $email) 76 | { 77 | $email->getValue()->shouldBeCalled()->willReturn('ddd@symfony.com'); 78 | 79 | $pdo->execute( 80 | sprintf('SELECT * FROM %s WHERE email = :email', SqlUserRepository::TABLE_NAME), 81 | ['email' => 'ddd@symfony.com'] 82 | )->shouldBeCalled()->willReturn($statement); 83 | 84 | $statement->fetch(\PDO::FETCH_ASSOC)->shouldBeCalled()->willReturn(0); 85 | 86 | $this->userOfEmail($email)->shouldReturn(null); 87 | } 88 | 89 | function its_user_of_email(SqlManager $pdo, \PDOStatement $statement, UserEmail $email) 90 | { 91 | $email->getValue()->shouldBeCalled()->willReturn('ddd@symfony.com'); 92 | 93 | $pdo->execute( 94 | sprintf('SELECT * FROM %s WHERE email = :email', SqlUserRepository::TABLE_NAME), 95 | ['email' => 'ddd@symfony.com'] 96 | )->shouldBeCalled()->willReturn($statement); 97 | 98 | $statement->fetch(\PDO::FETCH_ASSOC)->shouldBeCalled()->willReturn( 99 | ['id' => 'theid', 'email' => 'ddd@symfony.com', 'password' => 'password'] 100 | ); 101 | 102 | $this->userOfEmail($email)->shouldReturnAnInstanceOf('Domain\Model\User\User'); 103 | } 104 | 105 | function its_query_when_the_specification_is_not_a_sql_user_specification() 106 | { 107 | $this->shouldThrow(new \InvalidArgumentException('This argument must be a SQLUserSpecification')) 108 | ->during('query', [Argument::not('Infrastructure\Persistence\Sql\Repository\User\SqlUserSpecification')]); 109 | } 110 | 111 | function its_query(SqlManager $pdo, \PDOStatement $statement, SqlUserSpecification $specification) 112 | { 113 | $specification->toSqlClauses()->shouldBeCalled()->willReturn('1 = 1'); 114 | $pdo->execute( 115 | sprintf('SELECT * FROM %s WHERE %s', SqlUserRepository::TABLE_NAME, '1 = 1'), [] 116 | )->shouldBeCalled()->willReturn($statement); 117 | 118 | $statement->fetchAll(\PDO::FETCH_ASSOC)->shouldBeCalled()->willReturn( 119 | [['id' => 'theid', 'email' => 'ddd@symfony.com', 'password' => 'password']] 120 | ); 121 | 122 | $this->query($specification); 123 | } 124 | 125 | function its_next_identity() 126 | { 127 | $this->nextIdentity()->shouldReturnAnInstanceOf('Domain\Model\User\UserId'); 128 | } 129 | 130 | function its_size(SqlManager $pdo, \PDOStatement $statement, SqlUserSpecification $specification) 131 | { 132 | $pdo->execute( 133 | sprintf('SELECT COUNT(*) FROM %s', SqlUserRepository::TABLE_NAME) 134 | )->shouldBeCalled()->willReturn($statement); 135 | 136 | $statement->fetchColumn()->shouldBeCalled()->willReturn(2); 137 | 138 | $this->size()->shouldReturn(2); 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /spec/Infrastructure/Persistence/Sql/SqlManagerSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Infrastructure\Persistence\Sql; 13 | 14 | use PhpSpec\ObjectBehavior; 15 | 16 | /** 17 | * Class SqlManagerSpec. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class SqlManagerSpec extends ObjectBehavior 22 | { 23 | function let() 24 | { 25 | $this->beConstructedWith('mysql:host=localhost;dbname=mysql', 'root', ''); 26 | } 27 | 28 | function it_initializable() 29 | { 30 | $this->shouldHaveType('Infrastructure\Persistence\Sql\SqlManager'); 31 | } 32 | 33 | function its_connection() 34 | { 35 | $this->connection()->shouldReturnAnInstanceOf('PDO'); 36 | } 37 | 38 | function it_executes() 39 | { 40 | $this->execute('SELECT * FROM tablename', null)->shouldReturnAnInstanceOf('PDOStatement'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /spec/Infrastructure/Persistence/Sql/SqlSessionSpec.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace spec\Infrastructure\Persistence\Sql; 13 | 14 | use Infrastructure\Persistence\Sql\SqlManager; 15 | use PhpSpec\ObjectBehavior; 16 | 17 | /** 18 | * Class SqlSessionSpec. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class SqlSessionSpec extends ObjectBehavior 23 | { 24 | function let(SqlManager $pdo) 25 | { 26 | $this->beConstructedWith($pdo); 27 | } 28 | 29 | function it_initializable() 30 | { 31 | $this->shouldHaveType('Infrastructure\Persistence\Sql\SqlSession'); 32 | } 33 | 34 | function it_implements_TransactionalSession() 35 | { 36 | $this->shouldImplement('Ddd\Application\Service\TransactionalSession'); 37 | } 38 | 39 | function it_executes_atomically(SqlManager $pdo) 40 | { 41 | $callable = function ($param) { return $param.'bar'; }; 42 | 43 | $pdo->transactional($callable)->shouldBeCalled(); 44 | 45 | $this->executeAtomically($callable); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Application/Service/User/SignInUserRequest.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Application\Service\User; 13 | 14 | use Domain\Model\User\UserEmail; 15 | 16 | /** 17 | * Class SignInUserRequest. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class SignInUserRequest 22 | { 23 | /** 24 | * The user email. 25 | * 26 | * @var \Domain\Model\User\UserEmail 27 | */ 28 | private $email; 29 | 30 | /** 31 | * The password. 32 | * 33 | * @var string 34 | */ 35 | private $password; 36 | 37 | /** 38 | * Constructor. 39 | * 40 | * @param \Domain\Model\User\UserEmail $email The user email 41 | * @param string $password The password 42 | */ 43 | public function __construct(UserEmail $email, $password) 44 | { 45 | $this->email = $email; 46 | $this->password = $password; 47 | } 48 | 49 | /** 50 | * Gets the email. 51 | * 52 | * @return \Domain\Model\User\UserEmail 53 | */ 54 | public function email() 55 | { 56 | return $this->email; 57 | } 58 | 59 | /** 60 | * Gets the password. 61 | * 62 | * @return string 63 | */ 64 | public function password() 65 | { 66 | return $this->password; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/Application/Service/User/SignInUserService.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Application\Service\User; 13 | 14 | use Ddd\Application\Service\ApplicationService; 15 | use Domain\Exception\User\UserAlreadyExistsException; 16 | use Domain\Factory\User\UserFactory; 17 | use Domain\Model\User\User; 18 | use Domain\Repository\User\PersistentUserRepository; 19 | 20 | /** 21 | * Class SignInUserService. 22 | * 23 | * @author Beñat Espiña 24 | */ 25 | class SignInUserService implements ApplicationService 26 | { 27 | /** 28 | * The user repository. 29 | * 30 | * @var \Domain\Repository\User\PersistentUserRepository 31 | */ 32 | private $userRepository; 33 | 34 | /** 35 | * @var \Domain\Factory\User\UserFactory 36 | */ 37 | private $userFactory; 38 | 39 | /** 40 | * Constructor. 41 | * 42 | * @param \Domain\Repository\User\PersistentUserRepository $aRepository The repository 43 | * @param \Domain\Factory\User\UserFactory $aFactory The factory 44 | */ 45 | public function __construct(PersistentUserRepository $aRepository, UserFactory $aFactory) 46 | { 47 | $this->userRepository = $aRepository; 48 | $this->userFactory = $aFactory; 49 | } 50 | 51 | /** 52 | * {@inheritdoc} 53 | */ 54 | public function execute($request = null) 55 | { 56 | if (!$request instanceof SignInUserRequest) { 57 | throw new \InvalidArgumentException('The request must be SignInUserRequest instance'); 58 | } 59 | $email = $request->email(); 60 | $password = $request->password(); 61 | 62 | $user = $this->userRepository->userOfEmail($email); 63 | if ($user instanceof User) { 64 | throw new UserAlreadyExistsException(); 65 | } 66 | $user = $this->userFactory->register($this->userRepository->nextIdentity(), $email, $password); 67 | $this->userRepository->save($user); 68 | 69 | return $user; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/Domain/Event/User/UserRegistered.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Event\User; 13 | 14 | use Ddd\Domain\DomainEvent; 15 | use Domain\Model\User\UserId; 16 | 17 | /** 18 | * Class UserRegistered. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class UserRegistered implements DomainEvent 23 | { 24 | /** 25 | * The user id. 26 | * 27 | * @var \Domain\Model\User\UserId 28 | */ 29 | private $userId; 30 | 31 | /** 32 | * Constructor. 33 | * 34 | * @param \Domain\Model\User\UserId $anId The user id 35 | */ 36 | public function __construct(UserId $anId) 37 | { 38 | $this->userId = $anId; 39 | $this->occurredOn = new \DateTime(); 40 | } 41 | 42 | /** 43 | * Gets the user id. 44 | * 45 | * @return \Domain\Model\User\UserId 46 | */ 47 | public function userId() 48 | { 49 | return $this->userId; 50 | } 51 | 52 | /** 53 | * Gets the occurred on. 54 | * 55 | * @return \DateTime 56 | */ 57 | public function occurredOn() 58 | { 59 | return $this->occurredOn; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/Domain/Exception/User/UserAlreadyExistsException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Exception\User; 13 | 14 | /** 15 | * Class UserAlreadyExistsException. 16 | * 17 | * @author Beñat Espiña 18 | */ 19 | class UserAlreadyExistsException extends \Exception 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /src/Domain/Factory/User/UserFactory.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Factory\User; 13 | 14 | use Domain\Model\User\UserEmail; 15 | use Domain\Model\User\UserId; 16 | 17 | /** 18 | * Interface UserFactory. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | interface UserFactory 23 | { 24 | /** 25 | * Creation method that registers a new user into domain. 26 | * 27 | * @param \Domain\Model\User\UserId $anId The user id 28 | * @param \Domain\Model\User\UserEmail $anEmail The user email address 29 | * @param string $aPassword The password 30 | * 31 | * @return \Domain\Model\User\User 32 | */ 33 | public function register(UserId $anId, UserEmail $anEmail, $aPassword); 34 | } 35 | -------------------------------------------------------------------------------- /src/Domain/Model/User/User.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Model\User; 13 | 14 | use Ddd\Domain\DomainEventPublisher; 15 | use Domain\Event\User\UserRegistered; 16 | 17 | /** 18 | * Class User. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class User 23 | { 24 | /** 25 | * The user id. 26 | * 27 | * @var \Domain\Model\User\UserId 28 | */ 29 | private $userId; 30 | 31 | /** 32 | * The user email address. 33 | * 34 | * @var \Domain\Model\User\UserEmail 35 | */ 36 | private $email; 37 | 38 | /** 39 | * The password. 40 | * 41 | * @var string 42 | */ 43 | private $password; 44 | 45 | /** 46 | * Constructor. 47 | * 48 | * @param \Domain\Model\User\UserId $anId The user id 49 | * @param \Domain\Model\User\UserEmail $anEmail The email address 50 | * @param string $aPassword The password 51 | */ 52 | public function __construct(UserId $anId, UserEmail $anEmail, $aPassword) 53 | { 54 | $this->userId = $anId; 55 | $this->email = $anEmail; 56 | $this->changePassword($aPassword); 57 | 58 | DomainEventPublisher::instance()->publish(new UserRegistered($this->userId)); 59 | } 60 | 61 | /** 62 | * Gets the id. 63 | * 64 | * @return \Domain\Model\User\UserId 65 | */ 66 | public function id() 67 | { 68 | return $this->userId; 69 | } 70 | 71 | /** 72 | * Gets the email. 73 | * 74 | * @return \Domain\Model\User\UserEmail 75 | */ 76 | public function email() 77 | { 78 | return $this->email; 79 | } 80 | 81 | /** 82 | * Gets the password. 83 | * 84 | * @return string 85 | */ 86 | public function password() 87 | { 88 | return $this->password; 89 | } 90 | 91 | /** 92 | * Changes the password for the password given. 93 | * 94 | * @param string $password The password 95 | * 96 | * @return self $this Domain\Model\User 97 | */ 98 | public function changePassword($password) 99 | { 100 | $password = trim($password); 101 | if (!$password) { 102 | throw new \InvalidArgumentException('password'); 103 | } 104 | $this->password = $password; 105 | 106 | return $this; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/Domain/Model/User/UserEmail.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Model\User; 13 | 14 | use Email\EmailAddress; 15 | 16 | /** 17 | * Class UserEmail. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class UserEmail extends EmailAddress 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/Domain/Model/User/UserId.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Model\User; 13 | 14 | use Rhumsaa\Uuid\Uuid; 15 | 16 | /** 17 | * Class UserId. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class UserId 22 | { 23 | /** 24 | * The string of id. 25 | * 26 | * @var string 27 | */ 28 | private $id; 29 | 30 | /** 31 | * Constructor. 32 | * 33 | * @param string $anId The string of id 34 | */ 35 | public function __construct($anId = null) 36 | { 37 | $this->id = null === $anId ? Uuid::uuid4()->toString() : $anId; 38 | } 39 | 40 | /** 41 | * Gets the id. 42 | * 43 | * @return string 44 | */ 45 | public function id() 46 | { 47 | return $this->id; 48 | } 49 | 50 | /** 51 | * Method that checks if the user id given is equal to the current. 52 | * 53 | * @param \Domain\Model\User\UserId $anId The user id 54 | * 55 | * @return bool 56 | */ 57 | public function equals(UserId $anId) 58 | { 59 | return $this->id() === $anId->id(); 60 | } 61 | 62 | /** 63 | * Magic method that represent the class in string format. 64 | * 65 | * @return string 66 | */ 67 | public function __toString() 68 | { 69 | return $this->id(); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/Domain/Repository/User/CollectionUserRepository.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | 16 | /** 17 | * Interface CollectionUserRepository. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | interface CollectionUserRepository extends UserRepository 22 | { 23 | /** 24 | * Adds the user given. 25 | * 26 | * @param \Domain\Model\User\User $anUser The user 27 | * 28 | * @return mixed 29 | */ 30 | public function add(User $anUser); 31 | } 32 | -------------------------------------------------------------------------------- /src/Domain/Repository/User/PersistentUserRepository.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | 16 | /** 17 | * Interface PersistentUserRepository. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | interface PersistentUserRepository extends UserRepository 22 | { 23 | /** 24 | * Saves the user given. 25 | * 26 | * @param \Domain\Model\User\User $anUser The user 27 | * 28 | * @return mixed 29 | */ 30 | public function save(User $anUser); 31 | } 32 | -------------------------------------------------------------------------------- /src/Domain/Repository/User/UserRepository.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Domain\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Model\User\UserEmail; 16 | use Domain\Model\User\UserId; 17 | 18 | /** 19 | * Interface UserRepository. 20 | * 21 | * @author Beñat Espiña 22 | */ 23 | interface UserRepository 24 | { 25 | /** 26 | * Removes the user given. 27 | * 28 | * @param \Domain\Model\User\User $anUser The user 29 | * 30 | * @return mixed 31 | */ 32 | public function remove(User $anUser); 33 | 34 | /** 35 | * Gets the user of id given. 36 | * 37 | * @param \Domain\Model\User\UserId $anId The user id 38 | * 39 | * @return mixed 40 | */ 41 | public function userOfId(UserId $anId); 42 | 43 | /** 44 | * Gets the user of email given. 45 | * 46 | * @param \Domain\Model\User\UserEmail $anEmail The user email 47 | * 48 | * @return mixed 49 | */ 50 | public function userOfEmail(UserEmail $anEmail); 51 | 52 | /** 53 | * Gets the user/users that match with the given criteria. 54 | * 55 | * @param mixed $specification The specification criteria 56 | * 57 | * @return mixed 58 | */ 59 | public function query($specification); 60 | 61 | /** 62 | * Returns the next available id. 63 | * 64 | * @return \Domain\Model\User\UserId 65 | */ 66 | public function nextIdentity(); 67 | 68 | /** 69 | * Counts the number of users. 70 | * 71 | * @return mixed 72 | */ 73 | public function size(); 74 | } 75 | -------------------------------------------------------------------------------- /src/Infrastructure/Factory/User/UserFactory.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Factory\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Model\User\UserEmail; 16 | use Domain\Model\User\UserId; 17 | use Domain\Factory\User\UserFactory as BaseUserFactory; 18 | 19 | /** 20 | * Class UserFactory. 21 | * 22 | * @author Beñat Espiña 23 | */ 24 | class UserFactory implements BaseUserFactory 25 | { 26 | /** 27 | * {@inheritdoc} 28 | */ 29 | public function register(UserId $anId, UserEmail $anEmail, $aPassword) 30 | { 31 | return new User($anId, $anEmail, $aPassword); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/Infrastructure/Persistence/Sql/Repository/User/SqlPersistentUserRepository.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Persistence\Sql\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Repository\User\PersistentUserRepository; 16 | 17 | /** 18 | * Class SqlPersistentUserRepository. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class SqlPersistentUserRepository extends SqlUserRepository implements PersistentUserRepository 23 | { 24 | /** 25 | * {@inheritdoc} 26 | */ 27 | public function save(User $anUser) 28 | { 29 | $this->exist($anUser) ? $this->update($anUser) : $this->insert($anUser); 30 | } 31 | 32 | /** 33 | * Checks that the user given exists into database. 34 | * 35 | * @param \Domain\Model\User\User $anUser The user 36 | * 37 | * @return bool 38 | */ 39 | private function exist(User $anUser) 40 | { 41 | return $this->pdo->execute( 42 | sprintf('SELECT COUNT(*) FROM %s WHERE id = :id', self::TABLE_NAME), 43 | [':id' => $anUser->id()->id()] 44 | )->fetchColumn() == 1; 45 | } 46 | 47 | /** 48 | * Inserts the user given into database. 49 | * 50 | * @param \Domain\Model\User\User $anUser The user 51 | */ 52 | private function insert(User $anUser) 53 | { 54 | $this->pdo->execute( 55 | sprintf('INSERT INTO %s (id, email, password) VALUES (:id, :email, :password)', self::TABLE_NAME), 56 | ['id' => $anUser->id()->id(), 'email' => $anUser->email()->getValue(), 'password' => $anUser->password()] 57 | ); 58 | } 59 | 60 | /** 61 | * Updates the user given into database. 62 | * 63 | * @param \Domain\Model\User\User $anUser The user 64 | */ 65 | private function update(User $anUser) 66 | { 67 | $this->pdo->execute( 68 | sprintf('UPDATE %s SET email = :email, password = :password WHERE id = :id', self::TABLE_NAME), 69 | ['id' => $anUser->id()->id(), 'email' => $anUser->email()->getValue(), 'password' => $anUser->password()] 70 | ); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/Infrastructure/Persistence/Sql/Repository/User/SqlUserRepository.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Persistence\Sql\Repository\User; 13 | 14 | use Domain\Model\User\User; 15 | use Domain\Model\User\UserEmail; 16 | use Domain\Model\User\UserId; 17 | use Domain\Repository\User\UserRepository; 18 | use Infrastructure\Persistence\Sql\SqlManager; 19 | 20 | /** 21 | * Class UserRepository. 22 | * 23 | * @author Beñat Espiña 24 | */ 25 | class SqlUserRepository implements UserRepository 26 | { 27 | const TABLE_NAME = 'user'; 28 | 29 | /** 30 | * The manager. 31 | * 32 | * @var \Infrastructure\Persistence\Sql\SqlManager 33 | */ 34 | protected $pdo; 35 | 36 | /** 37 | * Constructor. 38 | * 39 | * @param \Infrastructure\Persistence\Sql\SqlManager $manager The manager 40 | */ 41 | public function __construct(SqlManager $manager) 42 | { 43 | $this->pdo = $manager; 44 | } 45 | 46 | /** 47 | * {@inheritdoc} 48 | */ 49 | public function remove(User $anUser) 50 | { 51 | $this->pdo->execute( 52 | sprintf('DELETE FROM %s WHERE id = :id', self::TABLE_NAME), ['id' => $anUser->id()->id()] 53 | ); 54 | } 55 | 56 | /** 57 | * {@inheritdoc} 58 | */ 59 | public function userOfId(UserId $anId) 60 | { 61 | $statement = $this->pdo->execute( 62 | sprintf('SELECT * FROM %s WHERE id = :id', self::TABLE_NAME), ['id' => $anId->id()] 63 | ); 64 | if ($row = $statement->fetch(\PDO::FETCH_ASSOC)) { 65 | return $this->buildUser($row); 66 | } 67 | 68 | return; 69 | } 70 | 71 | /** 72 | * {@inheritdoc} 73 | */ 74 | public function userOfEmail(UserEmail $anEmail) 75 | { 76 | $statement = $this->pdo->execute( 77 | sprintf('SELECT * FROM %s WHERE email = :email', self::TABLE_NAME), ['email' => $anEmail->getValue()] 78 | ); 79 | if ($row = $statement->fetch(\PDO::FETCH_ASSOC)) { 80 | return $this->buildUser($row); 81 | } 82 | 83 | return; 84 | } 85 | 86 | /** 87 | * {@inheritdoc} 88 | */ 89 | public function query($specification) 90 | { 91 | if (!$specification instanceof SqlUserSpecification) { 92 | throw new \InvalidArgumentException('This argument must be a SQLUserSpecification'); 93 | } 94 | 95 | return $this->retrieveAll( 96 | sprintf('SELECT * FROM %s WHERE %s', self::TABLE_NAME, $specification->toSqlClauses()) 97 | ); 98 | } 99 | 100 | /** 101 | * {@inheritdoc} 102 | */ 103 | public function nextIdentity() 104 | { 105 | return new UserId(); 106 | } 107 | 108 | /** 109 | * {@inheritdoc} 110 | */ 111 | public function size() 112 | { 113 | return $this->pdo 114 | ->execute(sprintf('SELECT COUNT(*) FROM %s', self::TABLE_NAME)) 115 | ->fetchColumn(); 116 | } 117 | 118 | /** 119 | * Executes the sql given and returns the result in array of users. 120 | * 121 | * @param string $sql The sql query 122 | * @param array $parameters Array which contains the parameters 123 | * 124 | * @return array 125 | */ 126 | private function retrieveAll($sql, array $parameters = []) 127 | { 128 | $statement = $this->pdo->execute($sql, $parameters); 129 | 130 | return array_map(function ($row) { 131 | return $this->buildUser($row); 132 | }, $statement->fetchAll(\PDO::FETCH_ASSOC)); 133 | } 134 | 135 | /** 136 | * Builds an user object with the given sql row in array format. 137 | * 138 | * @param array $row The sql row in array format 139 | * 140 | * @return \Domain\Model\User\User 141 | */ 142 | private function buildUser(array $row) 143 | { 144 | return new User(new UserId($row['id']), new UserEmail($row['email']), $row['password']); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /src/Infrastructure/Persistence/Sql/Repository/User/SqlUserSpecification.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Persistence\Sql\Repository\User; 13 | 14 | /** 15 | * Interface SqlPostSpecification. 16 | */ 17 | interface SqlUserSpecification 18 | { 19 | /** 20 | * Returns the sql criteria to complete the query. 21 | * 22 | * @return string 23 | */ 24 | public function toSqlClauses(); 25 | } 26 | -------------------------------------------------------------------------------- /src/Infrastructure/Persistence/Sql/SqlManager.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Persistence\Sql; 13 | 14 | /** 15 | * Class SqlManager. 16 | * 17 | * @author Beñat Espiña 18 | */ 19 | class SqlManager 20 | { 21 | const SQL_DATE_FORMAT = 'Y-m-d H:i:s'; 22 | 23 | /** 24 | * The pdo instance. 25 | * 26 | * @var \PDO 27 | */ 28 | private $pdo; 29 | 30 | /** 31 | * Constructor. 32 | * 33 | * @param string $dsn The dsn 34 | * @param string $username The db user 35 | * @param string $password The db password 36 | * @param array $options Array which contains more options 37 | */ 38 | public function __construct($dsn, $username, $password, array $options = null) 39 | { 40 | $this->pdo = new \PDO($dsn, $username, $password, $options); 41 | } 42 | 43 | /** 44 | * Gets connection of database. 45 | * 46 | * @return \PDO 47 | */ 48 | public function connection() 49 | { 50 | return $this->pdo; 51 | } 52 | 53 | /** 54 | * Executes the sql given with the parameters given. 55 | * 56 | * @param string $sql The sql in string format 57 | * @param array $parameters Array which contains parameters, it can be null 58 | * 59 | * @return \PDOStatement 60 | */ 61 | public function execute($sql, array $parameters = null) 62 | { 63 | $statement = $this->pdo->prepare($sql); 64 | $statement->execute($parameters); 65 | 66 | return $statement; 67 | } 68 | 69 | /** 70 | * Executes a function in a transaction. 71 | * 72 | * @param callable $callable The function to execute transactionally 73 | * 74 | * @return mixed The non-empty value returned from the closure or true instead. 75 | * 76 | * @throws \Exception during execution of the function or transaction commit, 77 | * the transaction is rolled back and the exception re-thrown 78 | */ 79 | public function transactional(callable $callable) 80 | { 81 | $this->pdo->beginTransaction(); 82 | try { 83 | $return = call_user_func($callable, $this); 84 | $this->pdo->commit(); 85 | 86 | return $return ?: true; 87 | } catch (\Exception $exception) { 88 | $this->pdo->rollback(); 89 | throw $exception; 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/Infrastructure/Persistence/Sql/SqlSession.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Persistence\Sql; 13 | 14 | use Ddd\Application\Service\TransactionalSession; 15 | 16 | /** 17 | * Class SqlSession. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class SqlSession implements TransactionalSession 22 | { 23 | /** 24 | * The manager. 25 | * 26 | * @var \Infrastructure\Persistence\Sql\SqlManager 27 | */ 28 | private $manager; 29 | 30 | /** 31 | * Constructor. 32 | * 33 | * @param \Infrastructure\Persistence\Sql\SqlManager $manager The sql manager 34 | */ 35 | public function __construct(SqlManager $manager) 36 | { 37 | $this->manager = $manager; 38 | } 39 | 40 | /** 41 | * {@inheritDoc} 42 | */ 43 | public function executeAtomically(callable $operation) 44 | { 45 | return $this->manager->transactional($operation); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/AppBundle.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Symfony\Bundle; 13 | 14 | use Symfony\Component\HttpKernel\Bundle\Bundle; 15 | 16 | /** 17 | * Class AppBundle. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class AppBundle extends Bundle 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/Controller/DefaultController.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Symfony\Bundle\Controller; 13 | 14 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; 15 | 16 | /** 17 | * Class DefaultController. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class DefaultController extends Controller 22 | { 23 | /** 24 | * Index action. 25 | * 26 | * @return \Symfony\Component\HttpFoundation\Response 27 | */ 28 | public function indexAction() 29 | { 30 | return $this->render('Default/index.html.twig'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/DependencyInjection/AppExtension.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Symfony\Bundle\DependencyInjection; 13 | 14 | use Kreta\Bundle\CoreBundle\DependencyInjection\Extension; 15 | 16 | /** 17 | * Class AppExtension. 18 | * 19 | * @author Beñat Espiña 20 | */ 21 | class AppExtension extends Extension 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/DependencyInjection/Configuration.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Infrastructure\Symfony\Bundle\DependencyInjection; 13 | 14 | use Symfony\Component\Config\Definition\Builder\TreeBuilder; 15 | use Symfony\Component\Config\Definition\ConfigurationInterface; 16 | 17 | /** 18 | * Class Configuration. 19 | * 20 | * @author Beñat Espiña 21 | */ 22 | class Configuration implements ConfigurationInterface 23 | { 24 | /** 25 | * {@inheritdoc} 26 | */ 27 | public function getConfigTreeBuilder() 28 | { 29 | $treeBuilder = new TreeBuilder(); 30 | $treeBuilder->root('app'); 31 | 32 | return $treeBuilder; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/Resources/config/db.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | # 8 | # @author Beñat Espiña 9 | 10 | services: 11 | sql_manager: 12 | class: Infrastructure\Persistence\Sql\SqlManager 13 | arguments: 14 | - %database_dsn% 15 | - %database_user% 16 | - %database_password% 17 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/Resources/config/loaders.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | # 8 | # @author Beñat Espiña 9 | 10 | services: 11 | app.twig.loader: 12 | class: Twig_Loader_Filesystem 13 | arguments: 14 | - %twig_views_path% 15 | tags: 16 | - { name: twig.loader } 17 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/Bundle/Resources/config/repositories.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | # 8 | # @author Beñat Espiña 9 | # @author Asier Ramos 10 | 11 | services: 12 | sql_repository: 13 | abstract: true 14 | arguments: 15 | - @sql_manager 16 | 17 | user_repository: 18 | parent: sql_repository 19 | class: Infrastructure\Persistence\Sql\Repository\User\SqlPersistentUserRepository 20 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/AppKernel.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | use Symfony\Component\HttpKernel\Kernel; 13 | use Symfony\Component\Config\Loader\LoaderInterface; 14 | 15 | /** 16 | * Class AppKernel. 17 | * 18 | * @author Beñat Espiña 19 | */ 20 | class AppKernel extends Kernel 21 | { 22 | /** 23 | * {@inheritdoc} 24 | */ 25 | public function registerBundles() 26 | { 27 | $bundles = [ 28 | new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 29 | new Symfony\Bundle\SecurityBundle\SecurityBundle(), 30 | new Symfony\Bundle\TwigBundle\TwigBundle(), 31 | new Symfony\Bundle\MonologBundle\MonologBundle(), 32 | new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 33 | 34 | new Infrastructure\Symfony\Bundle\AppBundle(), 35 | ]; 36 | 37 | if (in_array($this->getEnvironment(), ['dev', 'test'])) { 38 | $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 39 | $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 40 | } 41 | 42 | return $bundles; 43 | } 44 | 45 | /** 46 | * {@inheritdoc} 47 | */ 48 | public function registerContainerConfiguration(LoaderInterface $loader) 49 | { 50 | $loader->load($this->getRootDir() . '/config/config.yml'); 51 | if (in_array($this->getEnvironment(), ['dev', 'test'])) { 52 | $loader->load(function ($container) { 53 | $container->loadFromExtension('web_profiler', ['toolbar' => true,]); 54 | }); 55 | } 56 | } 57 | 58 | /** 59 | * {@inheritdoc} 60 | */ 61 | public function getCacheDir() 62 | { 63 | $filename = '/dev/shm/symfony/cache/'; 64 | if (in_array($this->environment, ['dev', 'test']) && file_exists($filename)) { 65 | return $filename . $this->environment; 66 | } 67 | 68 | return __DIR__ . '/../../../../var/cache/' . $this->environment; 69 | } 70 | 71 | /** 72 | * {@inheritdoc} 73 | */ 74 | public function getLogDir() 75 | { 76 | $filename = '/dev/shm/symfony/logs/'; 77 | if (in_array($this->environment, ['dev', 'test']) && file_exists($filename)) { 78 | return $filename . $this->environment; 79 | } 80 | 81 | return __DIR__ . '/../../../../var/logs'; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/config/config.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | imports: 9 | - { resource: ../../../../../parameters.yml } 10 | - { resource: security.yml } 11 | 12 | framework: 13 | secret: %secret% 14 | router: 15 | resource: "%kernel.root_dir%/config/routing_%kernel.environment%.yml" 16 | strict_requirements: %kernel.debug% 17 | form: ~ 18 | csrf_protection: ~ 19 | validation: { enable_annotations: true } 20 | templating: 21 | engines: ['twig'] 22 | default_locale: "%locale%" 23 | trusted_hosts: ~ 24 | trusted_proxies: ~ 25 | session: 26 | handler_id: ~ 27 | fragments: ~ 28 | http_method_override: true 29 | profiler: 30 | enabled: %kernel.debug% 31 | 32 | monolog: 33 | handlers: 34 | main: 35 | type: fingers_crossed 36 | action_level: %monolog_action_level% 37 | handler: nested 38 | nested: 39 | type: stream 40 | path: "%kernel.logs_dir%/%kernel.environment%.log" 41 | level: debug 42 | 43 | twig: 44 | debug: "%kernel.debug%" 45 | strict_variables: "%kernel.debug%" 46 | globals: 47 | base_asset_img: images/ 48 | base_asset_js: js/ 49 | base_asset_css: css/ 50 | base_asset_vendor: vendor/ 51 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/config/routing_dev.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | _wdt: 9 | resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" 10 | prefix: /_wdt 11 | 12 | _profiler: 13 | resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" 14 | prefix: /_profiler 15 | 16 | _errors: 17 | resource: "@TwigBundle/Resources/config/routing/errors.xml" 18 | prefix: /_error 19 | 20 | _main: 21 | resource: routing_prod.yml 22 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/config/routing_prod.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | homepage: 9 | pattern: / 10 | defaults: 11 | _controller: 'AppBundle:Default:index' 12 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/config/routing_test.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | _dev: 9 | resource: routing_dev.yml 10 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/config/security.yml: -------------------------------------------------------------------------------- 1 | # This file is part of the ddd-symfony package. 2 | # 3 | # (c) Beñat Espiña 4 | # 5 | # For the full copyright and license information, please view the LICENSE 6 | # file that was distributed with this source code. 7 | 8 | security: 9 | encoders: 10 | Symfony\Component\Security\Core\User\User: plaintext 11 | 12 | role_hierarchy: 13 | ROLE_ADMIN: ROLE_USER 14 | ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 15 | 16 | providers: 17 | in_memory: 18 | memory: 19 | users: 20 | user: { password: userpass, roles: [ 'ROLE_USER' ] } 21 | admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } 22 | 23 | firewalls: 24 | dev: 25 | pattern: ^/(_(profiler|wdt)|css|images|js)/ 26 | security: false 27 | demo_login: 28 | pattern: ^/demo/secured/login$ 29 | security: false 30 | 31 | demo_secured_area: 32 | pattern: ^/demo/secured/ 33 | form_login: 34 | check_path: _demo_security_check 35 | login_path: _demo_login 36 | logout: 37 | path: _demo_logout 38 | target: _demo 39 | 40 | access_control: 41 | #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 42 | -------------------------------------------------------------------------------- /src/Infrastructure/Symfony/app/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | 8 | * 9 | * For the full copyright and license information, please view the LICENSE 10 | * file that was distributed with this source code. 11 | */ 12 | 13 | use Symfony\Bundle\FrameworkBundle\Console\Application; 14 | use Symfony\Component\Console\Input\ArgvInput; 15 | use Symfony\Component\Debug\Debug; 16 | use Symfony\Component\Yaml\Yaml; 17 | 18 | set_time_limit(0); 19 | 20 | require_once __DIR__ . '/../../../../vendor/autoload.php'; 21 | require_once __DIR__ . '/AppKernel.php'; 22 | 23 | $parameters = Yaml::parse(__DIR__ . '/../../../../parameters.yml'); 24 | $symfony = $parameters['parameters']['symfony']; 25 | 26 | $input = new ArgvInput(); 27 | 28 | if ($debug = (bool)$symfony['debug']) { 29 | Debug::enable(); 30 | } 31 | 32 | $kernel = new AppKernel($symfony['env'], $debug); 33 | $application = new Application($kernel); 34 | $application->run($input); 35 | -------------------------------------------------------------------------------- /src/Infrastructure/Ui/Twig/views/Default/index.html.twig: -------------------------------------------------------------------------------- 1 | {% extends 'layout.html.twig' %} 2 | 3 | {% block stylesheets %} 4 | 5 | {% endblock %} 6 | 7 | {% block body %}{% endblock %} 8 | 9 | {% block javascripts %} 10 | 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /src/Infrastructure/Ui/Twig/views/layout.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %}Wlingua - Admin{% endblock %} 6 | {% block stylesheets %}{% endblock %} 7 | 8 | 9 | 10 | {% block body %}{% endblock %} 11 | {% block javascripts %}{% endblock %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/Infrastructure/Ui/public/img/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benatespina/ddd-symfony/139b2710b57fd8e31a2129d05d706263bac046f7/src/Infrastructure/Ui/public/img/image.png -------------------------------------------------------------------------------- /src/Infrastructure/Ui/public/js/script.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This file is part of the ddd-symfony package. 3 | * 4 | * (c) Beñat Espiña 5 | * 6 | * For the full copyright and license information, please view the LICENSE 7 | * file that was distributed with this source code. 8 | */ 9 | -------------------------------------------------------------------------------- /src/Infrastructure/Ui/public/scss/sass.scss: -------------------------------------------------------------------------------- 1 | // This file is part of the ddd-symfony package. 2 | // 3 | // (c) Beñat Espiña 4 | // 5 | // For the full copyright and license information, please view the LICENSE 6 | // file that was distributed with this source code. 7 | -------------------------------------------------------------------------------- /var/cache/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benatespina/ddd-symfony/139b2710b57fd8e31a2129d05d706263bac046f7/var/cache/.gitkeep -------------------------------------------------------------------------------- /var/logs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benatespina/ddd-symfony/139b2710b57fd8e31a2129d05d706263bac046f7/var/logs/.gitkeep -------------------------------------------------------------------------------- /web/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benatespina/ddd-symfony/139b2710b57fd8e31a2129d05d706263bac046f7/web/apple-touch-icon.png -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benatespina/ddd-symfony/139b2710b57fd8e31a2129d05d706263bac046f7/web/favicon.ico -------------------------------------------------------------------------------- /web/index.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | use Symfony\Component\HttpFoundation\Request; 13 | use Symfony\Component\Debug\Debug; 14 | use Symfony\Component\Yaml\Yaml; 15 | 16 | require_once __DIR__ . '/../vendor/autoload.php'; 17 | require_once __DIR__ . '/../src/Infrastructure/Symfony/app/AppKernel.php'; 18 | 19 | $parameters = Yaml::parse(__DIR__ . '/../parameters.yml'); 20 | $symfony = $parameters['parameters']['symfony']; 21 | 22 | if ($debug = (bool) $symfony['debug']) { 23 | Debug::enable(); 24 | } 25 | 26 | $request = Request::createFromGlobals(); 27 | $kernel = new AppKernel($symfony['env'], $debug); 28 | $response = $kernel->handle($request); 29 | $response->send(); 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /web/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | # www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449 3 | 4 | User-agent: * 5 | --------------------------------------------------------------------------------