├── src ├── Blog │ ├── PostRepositoryWriterInterface.php │ ├── PostRepositoryReaderInterface.php │ ├── Author.php │ ├── State.php │ └── Post.php └── .htaccess ├── .travis.yml ├── .gitignore ├── spec └── Liuggio │ └── Blog │ ├── AuthorSpec.php │ ├── StateSpec.php │ └── PostSpec.php ├── features ├── bootstrap │ └── FeatureContext.php └── post.feature ├── composer.json ├── LICENSE └── composer.lock /src/Blog/PostRepositoryWriterInterface.php: -------------------------------------------------------------------------------- 1 | 2 | Require all denied 3 | 4 | 5 | Order deny,allow 6 | Deny from all 7 | 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 5.3.3 5 | - 5.3 6 | - 5.4 7 | 8 | before_script: composer install -n 9 | 10 | script: 11 | - bin/phpspec run --format=pretty 12 | -------------------------------------------------------------------------------- /src/Blog/PostRepositoryReaderInterface.php: -------------------------------------------------------------------------------- 1 | nickname = $nickname; 12 | } 13 | 14 | /** 15 | * @return mixed 16 | */ 17 | public function getNickname() 18 | { 19 | return $this->nickname; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /spec/Liuggio/Blog/AuthorSpec.php: -------------------------------------------------------------------------------- 1 | beConstructedWith($nickname); 13 | $this->shouldHaveType('Liuggio\Blog\Author'); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /features/bootstrap/FeatureContext.php: -------------------------------------------------------------------------------- 1 | beConstructedWith(State::STATE_DRAFT); 14 | } 15 | 16 | function it_is_initializable() 17 | { 18 | $this->shouldHaveType('Liuggio\Blog\State'); 19 | } 20 | 21 | function it_is_initializable_by_factory_method() 22 | { 23 | $this::published()->shouldHaveType('Liuggio\Blog\State'); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "liuggio/ddd-with-syfmony2-my-stupid-blog", 3 | "description": "Just an example of DDD and BDD", 4 | "authors": [ 5 | { 6 | "name": "liuggio", 7 | "email": "liuggio@gmail.com" 8 | } 9 | ], 10 | "type": "project", 11 | "require": { 12 | "php": ">=5.3.3" 13 | }, 14 | "config": { 15 | "bin-dir": "bin" 16 | }, 17 | "require-dev": { 18 | "phpspec/phpspec": "~2", 19 | "behat/behat": "~2" 20 | }, 21 | "autoload": {"psr-4": {"Liuggio\\": "src/"}}, 22 | "license": "MIT" 23 | } 24 | -------------------------------------------------------------------------------- /features/post.feature: -------------------------------------------------------------------------------- 1 | @posts 2 | Feature: Posts 3 | In order to create blog-post 4 | As a blog Author 5 | I want to be able to manage Posts 6 | 7 | Scenario: Create a new blog post 8 | Given I am an author 9 | When I fill in the following: 10 | | First Post | Great Description | 11 | Then the "First Post" post should be saved. 12 | 13 | Scenario: Publish a blog post 14 | Given I am an author 15 | And I have a post with "First Post" and "Great Description" as description 16 | When I publish the "First Post" post 17 | Then the "First Post" post should be public. 18 | 19 | Scenario: List of all my posts 20 | Given I am an author 21 | And I have written the following: 22 | | First Post | Great Description | 23 | | Second Post | Bad Description | 24 | When I see the list of all my post 25 | Then the "First Post" and the "Second Post" should be shown. -------------------------------------------------------------------------------- /spec/Liuggio/Blog/PostSpec.php: -------------------------------------------------------------------------------- 1 | beConstructedWith($author, 'title', 'body'); 14 | } 15 | 16 | function it_should_be_created_with_author_title_and_text() 17 | { 18 | $this->shouldHaveType('Liuggio\Blog\Post'); 19 | } 20 | 21 | function it_should_be_created_as_drafted() 22 | { 23 | $this->isPublic()->shouldBe(false); 24 | } 25 | 26 | function it_should_move_from_drafted_to_published() 27 | { 28 | $this->publish(); 29 | $this->isPublic()->shouldBe(true); 30 | } 31 | 32 | function it_should_raise_exception_during_publish_if_it_was_alread_public() 33 | { 34 | $this->publish(); 35 | $this->shouldThrow('Exception')->duringPublish(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/Blog/State.php: -------------------------------------------------------------------------------- 1 | isAValidState($state)) { 16 | throw new \Exception('Invalid state ...'); 17 | } 18 | $this->state = $state; 19 | } 20 | 21 | public static function draft() 22 | { 23 | return new self(self::STATE_DRAFT); 24 | } 25 | 26 | public static function published() 27 | { 28 | return new self(self::STATE_PUBLIC); 29 | } 30 | 31 | public function isPublic() 32 | { 33 | return ($this->state == self::STATE_PUBLIC); 34 | } 35 | 36 | public function __toString() 37 | { 38 | return $this->state; 39 | } 40 | 41 | private function isAValidState($state) 42 | { 43 | if ($state !== self::STATE_PUBLIC && $state !== self::STATE_DRAFT) 44 | { 45 | return false; 46 | } 47 | 48 | return true; 49 | } 50 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-2013 Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /src/Blog/Post.php: -------------------------------------------------------------------------------- 1 | author = $author; 16 | $this->title = $title; 17 | $this->body = $body; 18 | $this->state = State::draft(); 19 | $this->createdAt = new \Datetime("now"); 20 | } 21 | 22 | public function isPublic() 23 | { 24 | return $this->state->isPublic(); 25 | } 26 | 27 | public function publish() 28 | { 29 | if (!$this->couldBePublished()) { 30 | throw new \Exception("Could not do this transition"); 31 | } 32 | 33 | return $this->state = State::published(); 34 | } 35 | 36 | public function getAuthorNickname() { 37 | 38 | return $this->author->getNickname(); 39 | } 40 | 41 | public function getTitle() 42 | { 43 | return $this->title; 44 | } 45 | 46 | private function couldBePublished() 47 | { 48 | return !$this->isPublic(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /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 | ], 6 | "hash": "5335f9cfafc5e937f7425514e0707c0b", 7 | "packages": [ 8 | 9 | ], 10 | "packages-dev": [ 11 | { 12 | "name": "behat/behat", 13 | "version": "v2.5.3", 14 | "source": { 15 | "type": "git", 16 | "url": "https://github.com/Behat/Behat.git", 17 | "reference": "c3a105a3c0457df919879c72b63b910e63739e51" 18 | }, 19 | "dist": { 20 | "type": "zip", 21 | "url": "https://api.github.com/repos/Behat/Behat/zipball/c3a105a3c0457df919879c72b63b910e63739e51", 22 | "reference": "c3a105a3c0457df919879c72b63b910e63739e51", 23 | "shasum": "" 24 | }, 25 | "require": { 26 | "behat/gherkin": "~2.3.0", 27 | "php": ">=5.3.1", 28 | "symfony/config": "~2.0", 29 | "symfony/console": "~2.0", 30 | "symfony/dependency-injection": "~2.0", 31 | "symfony/event-dispatcher": "~2.0", 32 | "symfony/finder": "~2.0", 33 | "symfony/translation": "~2.0", 34 | "symfony/yaml": "~2.0" 35 | }, 36 | "require-dev": { 37 | "phpunit/phpunit": "~3.7.19" 38 | }, 39 | "suggest": { 40 | "behat/mink-extension": "for integration with Mink testing framework", 41 | "behat/symfony2-extension": "for integration with Symfony2 web framework", 42 | "behat/yii-extension": "for integration with Yii web framework" 43 | }, 44 | "bin": [ 45 | "bin/behat" 46 | ], 47 | "type": "library", 48 | "autoload": { 49 | "psr-0": { 50 | "Behat\\Behat": "src/" 51 | } 52 | }, 53 | "notification-url": "https://packagist.org/downloads/", 54 | "license": [ 55 | "MIT" 56 | ], 57 | "authors": [ 58 | { 59 | "name": "Konstantin Kudryashov", 60 | "email": "ever.zet@gmail.com", 61 | "homepage": "http://everzet.com" 62 | } 63 | ], 64 | "description": "Scenario-oriented BDD framework for PHP 5.3", 65 | "homepage": "http://behat.org/", 66 | "keywords": [ 67 | "BDD", 68 | "Behat", 69 | "Symfony2" 70 | ], 71 | "time": "2014-04-26 16:55:16" 72 | }, 73 | { 74 | "name": "behat/gherkin", 75 | "version": "v2.3.5", 76 | "source": { 77 | "type": "git", 78 | "url": "https://github.com/Behat/Gherkin.git", 79 | "reference": "2b33963da5525400573560c173ab5c9c057e1852" 80 | }, 81 | "dist": { 82 | "type": "zip", 83 | "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2b33963da5525400573560c173ab5c9c057e1852", 84 | "reference": "2b33963da5525400573560c173ab5c9c057e1852", 85 | "shasum": "" 86 | }, 87 | "require": { 88 | "php": ">=5.3.1", 89 | "symfony/finder": "~2.0" 90 | }, 91 | "require-dev": { 92 | "symfony/config": "~2.0", 93 | "symfony/translation": "~2.0", 94 | "symfony/yaml": "~2.0" 95 | }, 96 | "suggest": { 97 | "symfony/config": "If you want to use Config component to manage resources", 98 | "symfony/translation": "If you want to use Symfony2 translations adapter", 99 | "symfony/yaml": "If you want to parse features, represented in YAML files" 100 | }, 101 | "type": "library", 102 | "extra": { 103 | "branch-alias": { 104 | "dev-develop": "2.2-dev" 105 | } 106 | }, 107 | "autoload": { 108 | "psr-0": { 109 | "Behat\\Gherkin": "src/" 110 | } 111 | }, 112 | "notification-url": "https://packagist.org/downloads/", 113 | "license": [ 114 | "MIT" 115 | ], 116 | "authors": [ 117 | { 118 | "name": "Konstantin Kudryashov", 119 | "email": "ever.zet@gmail.com", 120 | "homepage": "http://everzet.com" 121 | } 122 | ], 123 | "description": "Gherkin DSL parser for PHP 5.3", 124 | "homepage": "http://behat.org/", 125 | "keywords": [ 126 | "BDD", 127 | "Behat", 128 | "DSL", 129 | "Symfony2", 130 | "parser" 131 | ], 132 | "time": "2013-10-15 11:22:17" 133 | }, 134 | { 135 | "name": "phpspec/php-diff", 136 | "version": "v1.0.2", 137 | "source": { 138 | "type": "git", 139 | "url": "https://github.com/phpspec/php-diff.git", 140 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a" 141 | }, 142 | "dist": { 143 | "type": "zip", 144 | "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a", 145 | "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a", 146 | "shasum": "" 147 | }, 148 | "type": "library", 149 | "autoload": { 150 | "psr-0": { 151 | "Diff": "lib/" 152 | } 153 | }, 154 | "notification-url": "https://packagist.org/downloads/", 155 | "license": [ 156 | "BSD-3-Clause" 157 | ], 158 | "authors": [ 159 | { 160 | "name": "Chris Boulton", 161 | "homepage": "http://github.com/chrisboulton" 162 | } 163 | ], 164 | "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", 165 | "time": "2013-11-01 13:02:21" 166 | }, 167 | { 168 | "name": "phpspec/phpspec", 169 | "version": "2.0.0", 170 | "source": { 171 | "type": "git", 172 | "url": "https://github.com/phpspec/phpspec.git", 173 | "reference": "1aade5766ddf4f28fdcf0a34d6ed642393d6c43d" 174 | }, 175 | "dist": { 176 | "type": "zip", 177 | "url": "https://api.github.com/repos/phpspec/phpspec/zipball/1aade5766ddf4f28fdcf0a34d6ed642393d6c43d", 178 | "reference": "1aade5766ddf4f28fdcf0a34d6ed642393d6c43d", 179 | "shasum": "" 180 | }, 181 | "require": { 182 | "php": ">=5.3.3", 183 | "phpspec/php-diff": "~1.0.0", 184 | "phpspec/prophecy": "~1.1", 185 | "symfony/console": "~2.1", 186 | "symfony/event-dispatcher": "~2.1", 187 | "symfony/finder": "~2.1", 188 | "symfony/yaml": "~2.1" 189 | }, 190 | "require-dev": { 191 | "behat/behat": "~2.5", 192 | "bossa/phpspec2-expect": "dev-master", 193 | "symfony/filesystem": "~2.1" 194 | }, 195 | "suggest": { 196 | "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters" 197 | }, 198 | "bin": [ 199 | "bin/phpspec" 200 | ], 201 | "type": "library", 202 | "extra": { 203 | "branch-alias": { 204 | "dev-master": "2.0.x-dev" 205 | } 206 | }, 207 | "autoload": { 208 | "psr-0": { 209 | "PhpSpec": "src/" 210 | } 211 | }, 212 | "notification-url": "https://packagist.org/downloads/", 213 | "license": [ 214 | "MIT" 215 | ], 216 | "authors": [ 217 | { 218 | "name": "Konstantin Kudryashov", 219 | "email": "ever.zet@gmail.com", 220 | "homepage": "http://everzet.com" 221 | }, 222 | { 223 | "name": "Marcello Duarte", 224 | "homepage": "http://marcelloduarte.net/" 225 | } 226 | ], 227 | "description": "Specification-oriented BDD framework for PHP 5.3+", 228 | "homepage": "http://phpspec.net/", 229 | "keywords": [ 230 | "BDD", 231 | "SpecBDD", 232 | "TDD", 233 | "spec", 234 | "specification", 235 | "testing", 236 | "tests" 237 | ], 238 | "time": "2014-03-19 14:23:43" 239 | }, 240 | { 241 | "name": "phpspec/prophecy", 242 | "version": "1.1.2", 243 | "source": { 244 | "type": "git", 245 | "url": "https://github.com/phpspec/prophecy.git", 246 | "reference": "976a65af02a2a0e17ce6c949f7b43437205628bb" 247 | }, 248 | "dist": { 249 | "type": "zip", 250 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/976a65af02a2a0e17ce6c949f7b43437205628bb", 251 | "reference": "976a65af02a2a0e17ce6c949f7b43437205628bb", 252 | "shasum": "" 253 | }, 254 | "require-dev": { 255 | "phpspec/phpspec": "2.0.*" 256 | }, 257 | "type": "library", 258 | "extra": { 259 | "branch-alias": { 260 | "dev-master": "1.1.x-dev" 261 | } 262 | }, 263 | "autoload": { 264 | "psr-0": { 265 | "Prophecy\\": "src/" 266 | } 267 | }, 268 | "notification-url": "https://packagist.org/downloads/", 269 | "license": [ 270 | "MIT" 271 | ], 272 | "authors": [ 273 | { 274 | "name": "Konstantin Kudryashov", 275 | "email": "ever.zet@gmail.com", 276 | "homepage": "http://everzet.com" 277 | }, 278 | { 279 | "name": "Marcello Duarte", 280 | "email": "marcello.duarte@gmail.com" 281 | } 282 | ], 283 | "description": "Highly opinionated mocking framework for PHP 5.3+", 284 | "homepage": "http://phpspec.org", 285 | "keywords": [ 286 | "Double", 287 | "Dummy", 288 | "fake", 289 | "mock", 290 | "spy", 291 | "stub" 292 | ], 293 | "time": "2014-01-24 11:03:43" 294 | }, 295 | { 296 | "name": "symfony/config", 297 | "version": "v2.4.4", 298 | "target-dir": "Symfony/Component/Config", 299 | "source": { 300 | "type": "git", 301 | "url": "https://github.com/symfony/Config.git", 302 | "reference": "2effc67af6f21a0d267210b72d0b0b691d113528" 303 | }, 304 | "dist": { 305 | "type": "zip", 306 | "url": "https://api.github.com/repos/symfony/Config/zipball/2effc67af6f21a0d267210b72d0b0b691d113528", 307 | "reference": "2effc67af6f21a0d267210b72d0b0b691d113528", 308 | "shasum": "" 309 | }, 310 | "require": { 311 | "php": ">=5.3.3", 312 | "symfony/filesystem": "~2.3" 313 | }, 314 | "type": "library", 315 | "extra": { 316 | "branch-alias": { 317 | "dev-master": "2.4-dev" 318 | } 319 | }, 320 | "autoload": { 321 | "psr-0": { 322 | "Symfony\\Component\\Config\\": "" 323 | } 324 | }, 325 | "notification-url": "https://packagist.org/downloads/", 326 | "license": [ 327 | "MIT" 328 | ], 329 | "authors": [ 330 | { 331 | "name": "Fabien Potencier", 332 | "email": "fabien@symfony.com", 333 | "homepage": "http://fabien.potencier.org", 334 | "role": "Lead Developer" 335 | }, 336 | { 337 | "name": "Symfony Community", 338 | "homepage": "http://symfony.com/contributors" 339 | } 340 | ], 341 | "description": "Symfony Config Component", 342 | "homepage": "http://symfony.com", 343 | "time": "2014-04-22 08:11:06" 344 | }, 345 | { 346 | "name": "symfony/console", 347 | "version": "v2.4.4", 348 | "target-dir": "Symfony/Component/Console", 349 | "source": { 350 | "type": "git", 351 | "url": "https://github.com/symfony/Console.git", 352 | "reference": "2e452005b1e1d003d23702d227e23614679eb5ca" 353 | }, 354 | "dist": { 355 | "type": "zip", 356 | "url": "https://api.github.com/repos/symfony/Console/zipball/2e452005b1e1d003d23702d227e23614679eb5ca", 357 | "reference": "2e452005b1e1d003d23702d227e23614679eb5ca", 358 | "shasum": "" 359 | }, 360 | "require": { 361 | "php": ">=5.3.3" 362 | }, 363 | "require-dev": { 364 | "symfony/event-dispatcher": "~2.1" 365 | }, 366 | "suggest": { 367 | "symfony/event-dispatcher": "" 368 | }, 369 | "type": "library", 370 | "extra": { 371 | "branch-alias": { 372 | "dev-master": "2.4-dev" 373 | } 374 | }, 375 | "autoload": { 376 | "psr-0": { 377 | "Symfony\\Component\\Console\\": "" 378 | } 379 | }, 380 | "notification-url": "https://packagist.org/downloads/", 381 | "license": [ 382 | "MIT" 383 | ], 384 | "authors": [ 385 | { 386 | "name": "Fabien Potencier", 387 | "email": "fabien@symfony.com", 388 | "homepage": "http://fabien.potencier.org", 389 | "role": "Lead Developer" 390 | }, 391 | { 392 | "name": "Symfony Community", 393 | "homepage": "http://symfony.com/contributors" 394 | } 395 | ], 396 | "description": "Symfony Console Component", 397 | "homepage": "http://symfony.com", 398 | "time": "2014-04-27 13:34:57" 399 | }, 400 | { 401 | "name": "symfony/dependency-injection", 402 | "version": "v2.4.4", 403 | "target-dir": "Symfony/Component/DependencyInjection", 404 | "source": { 405 | "type": "git", 406 | "url": "https://github.com/symfony/DependencyInjection.git", 407 | "reference": "f4f947f83aa2f1706ec8cf4f4ead6c85ea935156" 408 | }, 409 | "dist": { 410 | "type": "zip", 411 | "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/f4f947f83aa2f1706ec8cf4f4ead6c85ea935156", 412 | "reference": "f4f947f83aa2f1706ec8cf4f4ead6c85ea935156", 413 | "shasum": "" 414 | }, 415 | "require": { 416 | "php": ">=5.3.3" 417 | }, 418 | "require-dev": { 419 | "symfony/config": "~2.2", 420 | "symfony/expression-language": "~2.4", 421 | "symfony/yaml": "~2.0" 422 | }, 423 | "suggest": { 424 | "symfony/config": "", 425 | "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", 426 | "symfony/yaml": "" 427 | }, 428 | "type": "library", 429 | "extra": { 430 | "branch-alias": { 431 | "dev-master": "2.4-dev" 432 | } 433 | }, 434 | "autoload": { 435 | "psr-0": { 436 | "Symfony\\Component\\DependencyInjection\\": "" 437 | } 438 | }, 439 | "notification-url": "https://packagist.org/downloads/", 440 | "license": [ 441 | "MIT" 442 | ], 443 | "authors": [ 444 | { 445 | "name": "Fabien Potencier", 446 | "email": "fabien@symfony.com", 447 | "homepage": "http://fabien.potencier.org", 448 | "role": "Lead Developer" 449 | }, 450 | { 451 | "name": "Symfony Community", 452 | "homepage": "http://symfony.com/contributors" 453 | } 454 | ], 455 | "description": "Symfony DependencyInjection Component", 456 | "homepage": "http://symfony.com", 457 | "time": "2014-04-18 20:38:54" 458 | }, 459 | { 460 | "name": "symfony/event-dispatcher", 461 | "version": "v2.4.4", 462 | "target-dir": "Symfony/Component/EventDispatcher", 463 | "source": { 464 | "type": "git", 465 | "url": "https://github.com/symfony/EventDispatcher.git", 466 | "reference": "e539602e5455aa086c0e81e604745af7789e4d8a" 467 | }, 468 | "dist": { 469 | "type": "zip", 470 | "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/e539602e5455aa086c0e81e604745af7789e4d8a", 471 | "reference": "e539602e5455aa086c0e81e604745af7789e4d8a", 472 | "shasum": "" 473 | }, 474 | "require": { 475 | "php": ">=5.3.3" 476 | }, 477 | "require-dev": { 478 | "symfony/dependency-injection": "~2.0" 479 | }, 480 | "suggest": { 481 | "symfony/dependency-injection": "", 482 | "symfony/http-kernel": "" 483 | }, 484 | "type": "library", 485 | "extra": { 486 | "branch-alias": { 487 | "dev-master": "2.4-dev" 488 | } 489 | }, 490 | "autoload": { 491 | "psr-0": { 492 | "Symfony\\Component\\EventDispatcher\\": "" 493 | } 494 | }, 495 | "notification-url": "https://packagist.org/downloads/", 496 | "license": [ 497 | "MIT" 498 | ], 499 | "authors": [ 500 | { 501 | "name": "Fabien Potencier", 502 | "email": "fabien@symfony.com", 503 | "homepage": "http://fabien.potencier.org", 504 | "role": "Lead Developer" 505 | }, 506 | { 507 | "name": "Symfony Community", 508 | "homepage": "http://symfony.com/contributors" 509 | } 510 | ], 511 | "description": "Symfony EventDispatcher Component", 512 | "homepage": "http://symfony.com", 513 | "time": "2014-04-16 10:34:31" 514 | }, 515 | { 516 | "name": "symfony/filesystem", 517 | "version": "v2.4.4", 518 | "target-dir": "Symfony/Component/Filesystem", 519 | "source": { 520 | "type": "git", 521 | "url": "https://github.com/symfony/Filesystem.git", 522 | "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4" 523 | }, 524 | "dist": { 525 | "type": "zip", 526 | "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a3af8294bcce4a7c1b2892363b0c9d8109affad4", 527 | "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4", 528 | "shasum": "" 529 | }, 530 | "require": { 531 | "php": ">=5.3.3" 532 | }, 533 | "type": "library", 534 | "extra": { 535 | "branch-alias": { 536 | "dev-master": "2.4-dev" 537 | } 538 | }, 539 | "autoload": { 540 | "psr-0": { 541 | "Symfony\\Component\\Filesystem\\": "" 542 | } 543 | }, 544 | "notification-url": "https://packagist.org/downloads/", 545 | "license": [ 546 | "MIT" 547 | ], 548 | "authors": [ 549 | { 550 | "name": "Fabien Potencier", 551 | "email": "fabien@symfony.com", 552 | "homepage": "http://fabien.potencier.org", 553 | "role": "Lead Developer" 554 | }, 555 | { 556 | "name": "Symfony Community", 557 | "homepage": "http://symfony.com/contributors" 558 | } 559 | ], 560 | "description": "Symfony Filesystem Component", 561 | "homepage": "http://symfony.com", 562 | "time": "2014-04-16 10:34:31" 563 | }, 564 | { 565 | "name": "symfony/finder", 566 | "version": "v2.4.4", 567 | "target-dir": "Symfony/Component/Finder", 568 | "source": { 569 | "type": "git", 570 | "url": "https://github.com/symfony/Finder.git", 571 | "reference": "25e1e7d5e7376f8a92ae3b1d714d956edf33a730" 572 | }, 573 | "dist": { 574 | "type": "zip", 575 | "url": "https://api.github.com/repos/symfony/Finder/zipball/25e1e7d5e7376f8a92ae3b1d714d956edf33a730", 576 | "reference": "25e1e7d5e7376f8a92ae3b1d714d956edf33a730", 577 | "shasum": "" 578 | }, 579 | "require": { 580 | "php": ">=5.3.3" 581 | }, 582 | "type": "library", 583 | "extra": { 584 | "branch-alias": { 585 | "dev-master": "2.4-dev" 586 | } 587 | }, 588 | "autoload": { 589 | "psr-0": { 590 | "Symfony\\Component\\Finder\\": "" 591 | } 592 | }, 593 | "notification-url": "https://packagist.org/downloads/", 594 | "license": [ 595 | "MIT" 596 | ], 597 | "authors": [ 598 | { 599 | "name": "Fabien Potencier", 600 | "email": "fabien@symfony.com", 601 | "homepage": "http://fabien.potencier.org", 602 | "role": "Lead Developer" 603 | }, 604 | { 605 | "name": "Symfony Community", 606 | "homepage": "http://symfony.com/contributors" 607 | } 608 | ], 609 | "description": "Symfony Finder Component", 610 | "homepage": "http://symfony.com", 611 | "time": "2014-04-27 13:34:57" 612 | }, 613 | { 614 | "name": "symfony/translation", 615 | "version": "v2.4.4", 616 | "target-dir": "Symfony/Component/Translation", 617 | "source": { 618 | "type": "git", 619 | "url": "https://github.com/symfony/Translation.git", 620 | "reference": "d2c73ffa4a5ba1fa0c5d93f43b68331dffe898c5" 621 | }, 622 | "dist": { 623 | "type": "zip", 624 | "url": "https://api.github.com/repos/symfony/Translation/zipball/d2c73ffa4a5ba1fa0c5d93f43b68331dffe898c5", 625 | "reference": "d2c73ffa4a5ba1fa0c5d93f43b68331dffe898c5", 626 | "shasum": "" 627 | }, 628 | "require": { 629 | "php": ">=5.3.3" 630 | }, 631 | "require-dev": { 632 | "symfony/config": "~2.0", 633 | "symfony/yaml": "~2.2" 634 | }, 635 | "suggest": { 636 | "symfony/config": "", 637 | "symfony/yaml": "" 638 | }, 639 | "type": "library", 640 | "extra": { 641 | "branch-alias": { 642 | "dev-master": "2.4-dev" 643 | } 644 | }, 645 | "autoload": { 646 | "psr-0": { 647 | "Symfony\\Component\\Translation\\": "" 648 | } 649 | }, 650 | "notification-url": "https://packagist.org/downloads/", 651 | "license": [ 652 | "MIT" 653 | ], 654 | "authors": [ 655 | { 656 | "name": "Fabien Potencier", 657 | "email": "fabien@symfony.com", 658 | "homepage": "http://fabien.potencier.org", 659 | "role": "Lead Developer" 660 | }, 661 | { 662 | "name": "Symfony Community", 663 | "homepage": "http://symfony.com/contributors" 664 | } 665 | ], 666 | "description": "Symfony Translation Component", 667 | "homepage": "http://symfony.com", 668 | "time": "2014-04-18 21:02:05" 669 | }, 670 | { 671 | "name": "symfony/yaml", 672 | "version": "v2.4.4", 673 | "target-dir": "Symfony/Component/Yaml", 674 | "source": { 675 | "type": "git", 676 | "url": "https://github.com/symfony/Yaml.git", 677 | "reference": "65539ecde838f9c0d18b006b2101e3deb4b5c9ff" 678 | }, 679 | "dist": { 680 | "type": "zip", 681 | "url": "https://api.github.com/repos/symfony/Yaml/zipball/65539ecde838f9c0d18b006b2101e3deb4b5c9ff", 682 | "reference": "65539ecde838f9c0d18b006b2101e3deb4b5c9ff", 683 | "shasum": "" 684 | }, 685 | "require": { 686 | "php": ">=5.3.3" 687 | }, 688 | "type": "library", 689 | "extra": { 690 | "branch-alias": { 691 | "dev-master": "2.4-dev" 692 | } 693 | }, 694 | "autoload": { 695 | "psr-0": { 696 | "Symfony\\Component\\Yaml\\": "" 697 | } 698 | }, 699 | "notification-url": "https://packagist.org/downloads/", 700 | "license": [ 701 | "MIT" 702 | ], 703 | "authors": [ 704 | { 705 | "name": "Fabien Potencier", 706 | "email": "fabien@symfony.com", 707 | "homepage": "http://fabien.potencier.org", 708 | "role": "Lead Developer" 709 | }, 710 | { 711 | "name": "Symfony Community", 712 | "homepage": "http://symfony.com/contributors" 713 | } 714 | ], 715 | "description": "Symfony Yaml Component", 716 | "homepage": "http://symfony.com", 717 | "time": "2014-04-18 20:37:09" 718 | } 719 | ], 720 | "aliases": [ 721 | 722 | ], 723 | "minimum-stability": "stable", 724 | "stability-flags": [ 725 | 726 | ], 727 | "platform": { 728 | "php": ">=5.3.3" 729 | }, 730 | "platform-dev": [ 731 | 732 | ] 733 | } 734 | --------------------------------------------------------------------------------