diff --git a/.gitignore b/.gitignore index 5cc78c4..9f388ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,59 @@ -phpunit.xml +### +# .gitignore +### + +### +# Common pollution +### +*~ +*.DS_Store +*.settings +*Thumb.db + +### +# Temporary, cache, backup and buffer files +### +*.tmp +*.swp +*.lock +~* +.*.sw[a-z] +.Trashes +.sass-cache +*.swp +composer.lock + +### +# Development environement common files +### +*nbproject +*.project +*.idea +*atlassian-ide-plugin.xml +*catalog.xml +*.sublime* +.Spotlight-V100 +Thumb.db +Vagrantfile +.vagrant* +nbproject/ + +### +# Generated files and directories +### +coverage/ vendor/ +cache/ +log/ +app/cache/* +app/logs/* +clover.xml +web/bundles/nelmioapidoc + +### +# Excluded executables +### +bin/ +composer.phar + diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index fe41d90..1864296 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -69,9 +69,51 @@ public function getConfigTreeBuilder() ->end() ->end() ->arrayNode('method_access_control') + ->beforeNormalization() + ->always(function ($node) { + /** This is a backward compatibility layer */ + if (is_array($node)) { + foreach ($node as $key => $value) { + if (is_string($value)) { + $node[$key] = array( + 'pre_authorize' => $value + ); + } + } + } + + return $node; + }) + ->end() ->useAttributeAsKey('pattern') - ->prototype('scalar')->isRequired()->cannotBeEmpty()->end() - ->end() + ->prototype('array') + ->children() + ->scalarNode('pattern')->end() + ->scalarNode('pre_authorize')->cannotBeEmpty()->end() + ->arrayNode('secure') + ->fixXmlConfig('role') + ->children() + ->arrayNode('roles')->prototype('scalar')->end() + ->end() + ->arrayNode('secure_param') + ->fixXmlConfig('permission') + ->children() + ->scalarNode('name')->end() + ->arrayNode('permissions')->prototype('scalar')->end() + ->end() + ->arrayNode('secure_return') + ->fixXmlConfig('permission') + ->children() + ->arrayNode('permissions')->prototype('scalar')->end() + ->end() + ->arrayNode('run_as') + ->fixXmlConfig('role') + ->children() + ->arrayNode('roles')->prototype('scalar')->end() + ->end() + ->booleanNode('satisfies_parent_security_policy')->end() + ->end() + ->end() ->arrayNode('util') ->addDefaultsIfNotSet() ->children() diff --git a/Metadata/ClassMetadata.php b/Metadata/ClassMetadata.php index 0f00c8f..3e4f3f8 100644 --- a/Metadata/ClassMetadata.php +++ b/Metadata/ClassMetadata.php @@ -20,7 +20,7 @@ use JMS\SecurityExtraBundle\Exception\RuntimeException; use JMS\SecurityExtraBundle\Exception\InvalidArgumentException; -use Metadata\MethodMetadata; +use Metadata\MethodMetadata as PlainMethodMetadata; use Metadata\MergeableInterface; use Metadata\MergeableClassMetadata; @@ -31,7 +31,7 @@ */ class ClassMetadata extends MergeableClassMetadata { - public function addMethodMetadata(MethodMetadata $metadata) + public function addMethodMetadata(PlainMethodMetadata $metadata) { if ($this->reflection->isFinal()) { throw new RuntimeException(sprintf('Class "%s" is declared final, and cannot be secured.', $reflection->name)); diff --git a/Metadata/Driver/AnnotationDriver.php b/Metadata/Driver/AnnotationDriver.php index 44de17e..05b48f5 100644 --- a/Metadata/Driver/AnnotationDriver.php +++ b/Metadata/Driver/AnnotationDriver.php @@ -132,4 +132,4 @@ private function convertMethodAnnotations(\ReflectionMethod $method, array $anno return $hasSecurityMetadata ? $methodMetadata : null; } -} +} \ No newline at end of file diff --git a/Metadata/Driver/ConfigDriver.php b/Metadata/Driver/ConfigDriver.php index 767e30d..3ae3ae8 100644 --- a/Metadata/Driver/ConfigDriver.php +++ b/Metadata/Driver/ConfigDriver.php @@ -17,10 +17,14 @@ class ConfigDriver implements DriverInterface private $bundles; private $config; + /** + * @param array $bundles A list of used bundles indexed by name. + * @param array $config Metadata configuration + */ public function __construct(array $bundles, array $config) { - uasort($bundles, function($a, $b) { - return strlen($b) - strlen($a); + uasort($bundles, function($operandA, $operandB) { + return strlen($operandB) - strlen($operandA); }); foreach ($bundles as $name => $namespace) { @@ -28,51 +32,122 @@ public function __construct(array $bundles, array $config) } $this->bundles = $bundles; - $this->config = $config; + $this->setConfigs($config); } + /** + * {@inheritDoc} + */ public function loadMetadataForClass(\ReflectionClass $class) { $metadata = new ClassMetadata($class->name); - foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $method) { + $methods = $class->getMethods( + \ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED + ); + + foreach ($methods as $method) { if ($method->getDeclaringClass()->name !== $class->name) { continue; } - $expression = null; - if (null !== $notation = $this->getControllerNotation($method)) { - $expression = $this->getExpressionForSignature($notation); - } + $methodMetadataConfig = $this->getMethodScopeMetadata($method); - if (null === $expression && null === $expression = - $this->getExpressionForSignature($method->class.'::'.$method->name)) { - continue; + $methodMetadata = $this->fromMetadataConfig($method, $methodMetadataConfig); + + if ($methodMetadata) { + $metadata->addMethodMetadata($methodMetadata); } + } - $methodMetadata = new MethodMetadata($method->class, $method->name); - $methodMetadata->roles = array(new Expression($expression)); - $metadata->addMethodMetadata($methodMetadata); + return $this->metadataPostTreatment($metadata); + } + + protected function getMethodScopeMetadata(\ReflectionMethod $method) + { + $configurationFound = null; + + if (null !== $notation = $this->getControllerNotation($method)) { + $configurationFound = $this->getConfigForSignature($notation); } - if (!$metadata->methodMetadata) { - return null; + if (null === $configurationFound) { + $configurationFound = $this->getConfigForSignature($method->class.'::'.$method->name); } - return $metadata; + return $configurationFound ? $configurationFound : array(); + } + + protected function fromMetadataConfig(\ReflectionMethod $method, array $configs) + { + $parameters = array(); + foreach ($method->getParameters() as $index => $parameter) { + $parameters[$parameter->getName()] = $index; + } + + $methodMetadata = new MethodMetadata($method->class, $method->name); + + $hasSecurityMetadata = false; + + foreach ($configs as $name => $config) { + switch ($name) { + case "pre_authorize": + $methodMetadata->roles = array(new Expression($config)); + $hasSecurityMetadata = true; + break; + case "secure": + $methodMetadata->roles = $config['roles']; + $hasSecurityMetadata = true; + break; + case "secure_param": + $this->assertParamExistsForMethod($parameters, $config['name'], $method->name); + $methodMetadata->addParamPermissions( + $parameters[$config['name']], $config['permissions'] + ); + $hasSecurityMetadata = true; + break; + case "secure_return": + $methodMetadata->returnPermissions = $config['permissions']; + $hasSecurityMetadata = true; + break; + case "run_as": + $methodMetadata->runAsRoles = $config['roles']; + $hasSecurityMetadata = true; + break; + case "satisfies_parent_security_policy": + $methodMetadata->satisfiesParentSecurityPolicy = true; + $hasSecurityMetadata = true; + break; + } + } + + return $hasSecurityMetadata ? $methodMetadata : null; } - private function getExpressionForSignature($signature) + protected function getConfigForSignature($signature) { - foreach ($this->config as $pattern => $expr) { + $configurationFound = null; + + foreach ($this->config as $pattern => $config) { if (!preg_match('#'.$pattern.'#i', $signature)) { continue; } - return $expr; + $configurationFound = $config; + + break; } - return null; + return $configurationFound; + } + + protected function metadataPostTreatment(ClassMetadata $metadata) + { + if (!$metadata->methodMetadata) { + $metadata = null; + } + + return $metadata; } // TODO: Is it feasible to reverse-engineer the notation for service controllers? @@ -81,7 +156,13 @@ private function getControllerNotation(\ReflectionMethod $method) $signature = $method->class.'::'.$method->name; // check if class is a controller - if (0 === preg_match('#\\\\Controller\\\\([^\\\\]+)Controller::(.+)Action$#', $signature, $match)) { + $matched = preg_match( + '#\\\\Controller\\\\([^\\\\]+)Controller::(.+)Action$#', + $signature, + $match + ); + + if (!$matched) { return null; } @@ -96,4 +177,31 @@ private function getControllerNotation(\ReflectionMethod $method) return null; } -} + + private function assertParamExistsForMethod(array $params, $name, $method) + { + if (!isset($params[$name])) { + throw new \InvalidArgumentException( + sprintf( + 'The parameter "%s" does not exist for method "%s".', + $name, + $method + ) + ); + } + } + + private function setConfigs(array $config) + { + $this->config = array(); + foreach ($config as $key => $value) { + if (is_string($value)) { + $this->config[$key] = array( + 'pre_authorize' => $value + ); + } else { + $this->config[$key] = $value; + } + } + } +} \ No newline at end of file diff --git a/Security/Authorization/Expression/Compiler/Func/ServiceCallbackFunctionCompiler.php b/Security/Authorization/Expression/Compiler/Func/ServiceCallbackFunctionCompiler.php index 3cf2266..9e72e7a 100644 --- a/Security/Authorization/Expression/Compiler/Func/ServiceCallbackFunctionCompiler.php +++ b/Security/Authorization/Expression/Compiler/Func/ServiceCallbackFunctionCompiler.php @@ -54,4 +54,4 @@ public function getName() { return $this->functionName; } -} \ No newline at end of file +} diff --git a/Tests/DependencyInjection/JMSSecurityExtraExtensionTest.php b/Tests/DependencyInjection/JMSSecurityExtraExtensionTest.php index 9eedce9..802c7c6 100644 --- a/Tests/DependencyInjection/JMSSecurityExtraExtensionTest.php +++ b/Tests/DependencyInjection/JMSSecurityExtraExtensionTest.php @@ -60,7 +60,12 @@ public function testConfigLoadWithMethodAccessControl() ) )), $container = $this->getContainer()); - $this->assertEquals(array(':login$' => 'hasRole("FOO")'), + $this->assertEquals( + array( + ':login$' => array( + 'pre_authorize' => 'hasRole("FOO")', + ) + ), $container->getParameter('security.access.method_access_control')); } @@ -71,7 +76,7 @@ public function testConfigLoadThrowsExceptionWhenMethodAccessControlWithoutExpre { $this->extension->load(array(array( 'expressions' => false, - 'method_access_control' => array('foo' => 'bar'), + 'method_access_control' => array('foo' => 'bar', 'FOO' => 'BAR'), )), $this->getContainer()); } diff --git a/Tests/Functional/MethodAccessControlTest.php b/Tests/Functional/MethodAccessControlTest.php index 36f07d4..cae96db 100644 --- a/Tests/Functional/MethodAccessControlTest.php +++ b/Tests/Functional/MethodAccessControlTest.php @@ -61,6 +61,17 @@ public function testUserManagerDeleteIsSecure() $manager->delete(); } + /** + * @runInSeparateProcess + */ + public function testCrudDeleteIsSecureWithAdvancedConfiguration() + { + $client = $this->createClient(array('config' => 'method_access_control.yml')); + + $client->request('GET', '/delete'); + $this->assertRedirectedToLogin($client->getResponse()); + } + /** * @runInSeparateProcess */ @@ -73,6 +84,7 @@ public function testFunctionEvaluator() $client->request('GET', '/post/foo'); $response = $client->getResponse(); + $this->assertEquals('foo', $response->getContent()); $this->assertEquals(1, $evaluator->getNbCalls()); @@ -123,4 +135,4 @@ private function assertRedirectedToLogin(Response $response) $this->assertEquals(302, $response->getStatusCode()); $this->assertEquals('http://localhost/login', $response->headers->get('Location')); } -} \ No newline at end of file +} diff --git a/Tests/Functional/TestBundle/Controller/CrudController.php b/Tests/Functional/TestBundle/Controller/CrudController.php index ae90060..4be6a55 100644 --- a/Tests/Functional/TestBundle/Controller/CrudController.php +++ b/Tests/Functional/TestBundle/Controller/CrudController.php @@ -15,4 +15,9 @@ public function editAction() { return new Response(); } -} \ No newline at end of file + + public function deleteAction() + { + return new Response(); + } +} diff --git a/Tests/Functional/TestBundle/Controller/FooController.php b/Tests/Functional/TestBundle/Controller/FooController.php index 2ab9752..cf62350 100644 --- a/Tests/Functional/TestBundle/Controller/FooController.php +++ b/Tests/Functional/TestBundle/Controller/FooController.php @@ -20,4 +20,4 @@ public function barAction() { return new Response(); } -} \ No newline at end of file +} diff --git a/Tests/Functional/config/method_access_control.yml b/Tests/Functional/config/method_access_control.yml index 937de7c..bf0a1c0 100644 --- a/Tests/Functional/config/method_access_control.yml +++ b/Tests/Functional/config/method_access_control.yml @@ -11,4 +11,7 @@ jms_security_extra: 'UserManager::delete$': 'hasRole("FOO")' 'TestBundle:Crud:add': 'hasRole("FOO")' 'TestBundle:Foo:exception': 'permitAll' - 'TestBundle:Foo:.*': 'hasRole("MOO")' \ No newline at end of file + 'TestBundle:Foo:.*': 'hasRole("MOO")' + AdvancedConfig: + pattern: 'TestBundle:Crud:delete$' + pre_authorize: 'hasRole("FOO")' diff --git a/Tests/Functional/config/routing.yml b/Tests/Functional/config/routing.yml index 8550813..ea5c48f 100644 --- a/Tests/Functional/config/routing.yml +++ b/Tests/Functional/config/routing.yml @@ -8,6 +8,11 @@ crud_controller_edit: defaults: _controller: TestBundle:Crud:edit +crud_controller_delete: + pattern: /delete + defaults: + _controller: TestBundle:Crud:delete + post_controller_add: pattern: /post/add defaults: @@ -44,4 +49,4 @@ foo_bar: foo_exception: pattern: /foo/exception defaults: - _controller: TestBundle:Foo:exception \ No newline at end of file + _controller: TestBundle:Foo:exception diff --git a/Tests/Metadata/ClassMetadataTest.php b/Tests/Metadata/ClassMetadataTest.php index b7c0086..11c965f 100644 --- a/Tests/Metadata/ClassMetadataTest.php +++ b/Tests/Metadata/ClassMetadataTest.php @@ -47,14 +47,14 @@ public function testAnalyzeThrowsNoExceptionWhenAbstractMethodIsNotOverridenInDi $metadata = $metadata->methodMetadata['abstractMethod']; $this->assertEquals(array('VIEW'), $metadata->returnPermissions); } - + public function testAnalyzeThrowsNoExceptionWhenSatisfiesParentSecurityPolicyIsDefined() { $metadata = $this ->getFactory() ->getMetadataForClass('JMS\SecurityExtraBundle\Tests\Fixtures\CorrectSubService') ; - + $methods = $metadata->methodMetadata; $this->assertTrue(isset($methods['differentMethodSignature'])); diff --git a/Tests/Metadata/Driver/AnnotationDriverTest.php b/Tests/Metadata/Driver/AnnotationDriverTest.php index 16dc7cd..43035da 100644 --- a/Tests/Metadata/Driver/AnnotationDriverTest.php +++ b/Tests/Metadata/Driver/AnnotationDriverTest.php @@ -24,6 +24,9 @@ require_once __DIR__.'/Fixtures/services.php'; +/** + * @group driver + */ class AnnotationDriverTest extends \PHPUnit_Framework_TestCase { public function testLoadMetadataWithClassPreAuthorize() @@ -111,4 +114,4 @@ public function testLoadMetadataFromClassWithRolesAndPermissionsArrayNotation() $this->assertEquals(array(0 => array('OWNER')), $method->paramPermissions); $this->assertEquals(array('MASTER'), $method->returnPermissions); } -} \ No newline at end of file +} diff --git a/Tests/Metadata/Driver/ConfigDriverTest.php b/Tests/Metadata/Driver/ConfigDriverTest.php index bfd8d62..6604cf9 100644 --- a/Tests/Metadata/Driver/ConfigDriverTest.php +++ b/Tests/Metadata/Driver/ConfigDriverTest.php @@ -6,6 +6,9 @@ use JMS\SecurityExtraBundle\Metadata\MethodMetadata; use JMS\SecurityExtraBundle\Metadata\Driver\ConfigDriver; +/** + * @group driver + */ class ConfigDriverTest extends \PHPUnit_Framework_TestCase { public function testLoadMetadata() @@ -46,6 +49,160 @@ public function testLoadMetadataWithoutConfig() $this->assertNull($driver->loadMetadataForClass($this->getClass('Controller\\CrudController'))); } + /** + * @dataProvider advancedConfigProvider + */ + public function testLoadAdvancedMetadata($config, $securedClass, $securedMethods) + { + $driver = new ConfigDriver(array(), $config); + + $reflection = new \ReflectionClass( + 'JMS\SecurityExtraBundle\Tests\Mapping\Driver\\'.$securedClass + ); + + $metadata = $driver->loadMetadataForClass($reflection); + + $this->assertEquals(1, count($metadata->methodMetadata)); + + foreach ($config as $configEntry) { + foreach ($configEntry as $key => $content) { + switch ($key) { + case 'pattern' : + break 2; + case 'pre_authorize': + $assert = "assertPreAuthorize"; + break; + case 'secure' : + $assert = "assertSecure"; + break; + case 'secure_param' : + $assert ="assertSecureParam"; + break; + case 'secure_return': + $assert = "assertSecureReturn"; + break; + case 'run_as' : + $assert = "assertRunAs"; + break; + case 'satisfies_parent_security_policy': + $assert = "assertSatisfiesParentSecurity"; + break; + default : + $this->fail("Unknown configuration key found: ". $key); + break; + } + + foreach ($metadata->methodMetadata as $name => $metadata) { + $this->assertEquals($name, current($securedMethods)); + $this->{$assert}($metadata, current($securedMethods), $content ); + + next($securedMethods); + } + } + } + } + + protected function assertPreAuthorize($loadedMethod, $config) + { + $expression = new Expression(current($config)); + + $this->assertEquals( + array($expression), $loadedMethod->roles, + sprintf("Expected expression %s got %s", $expression, $loadedMethod->roles) + ); + } + + protected function assertSecure($loadedMethod, $config) + { + $this->assertPreAuthorize($loadedMethod, $config); + } + + protected function assertSecureParam($loadedMethod, $config) + { + $expectedPermissions = $loadedMethod->paramPermissions[$config['name']]; + + $this->assertEquals( + $expectedPermissions, $config['permission'], + sprintf( + "Expected parameter permission %s got %s", $expectedPermissions, $config['permission'] + ) + ); + } + + protected function assertSecureReturn($loadedMethod, $config) + { + $this->assertEquals( + $loadedMethod->returnPermissions, $config, + sprintf( + "Expected return permission %s got %s". $loadedMethod->returnPermissions, $config + ) + ); + } + + public function advancedConfigProvider() + { + return array( + array( + 'config' => array('FooService::foo'=> array( + 'pattern' => 'FooService::foo', + 'secure' => array( + 'roles' => array( + 'ROLE_USER', 'ROLE_ADMIN', 'ROLE_SUPERADMIN' + ), + ), + 'secure_param' => array('name' => 'param', 'permissions' => array('VIEW')), + )), + 'securedClass' => 'FooService', + 'securedMethods' => array('foo'), + ), + array( + 'config' => array('FooService::shortNotation' => array( + 'pattern' => 'FooService::shortNotation', + 'secure' => array( + 'roles' => array('ROLE_FOO', 'ROLE_BAR') + ), + )), + 'securedClass' => 'FooService', + 'securedMethods' => array('shortNotation'), + ), + array( + 'config' => array('FooService::bar' => array( + 'pattern' => 'FooService::bar', + 'secure' => array('roles' => 'ROLE_FOO, ROLE_BAR'), + 'secure_param' => array( + 'name' => 'param', 'permissions' => array('OWNER') + ), + 'secure_return' => array('permissions' => 'MASTER'), + )), + 'securedClass' => 'FooService', + 'securedMethods' => array('bar'), + ), + array( + 'config' => array('FooSecureService::foo' => array( + 'pattern' => 'FooSecureService::foo', + 'secure_param' => array( + 'name' => 'anotherParam', 'permissions' => array('EDIT') + ), + )), + 'securedClass' => 'FooSecureService', + 'securedMethods' => array('foo'), + ), + array( + 'config' => array('FooMultipleSecureService::foo' => array( + 'pattern' => 'FooMultipleSecureService::foo', + 'secure_param' => array( + 'name' => 'param', 'permissions' => array('VIEW') + ), + 'secure_param' => array( + 'name' => 'anotherParam', 'permissions' => array('EDIT') + ), + )), + 'securedClass' => 'FooMultipleSecureService', + 'securedMethods' => array('foo'), + ), + ); + } + private function getClass($name) { return new \ReflectionClass('JMS\SecurityExtraBundle\Tests\Metadata\Driver\Fixtures\\'.$name); diff --git a/composer.lock b/composer.lock deleted file mode 100644 index cb0afed..0000000 --- a/composer.lock +++ /dev/null @@ -1,2852 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" - ], - "hash": "245b473818cbc4ba651db063782d7a2b", - "packages": [ - { - "name": "doctrine/annotations", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "v1.1.1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/v1.1.1", - "reference": "v1.1.1", - "shasum": "" - }, - "require": { - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "require-dev": { - "doctrine/cache": "1.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan H. Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "time": "2013-04-20 08:30:17" - }, - { - "name": "doctrine/cache", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "89493d2c6e1362f581f9de1c1871cc52eb29c030" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/89493d2c6e1362f581f9de1c1871cc52eb29c030", - "reference": "89493d2c6e1362f581f9de1c1871cc52eb29c030", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Cache\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Caching library offering an object-oriented API for many cache backends", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "cache", - "caching" - ], - "time": "2013-06-07 14:54:47" - }, - { - "name": "doctrine/collections", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "3db3ab843ff76774bee4679d4cb3a10cffb0a935" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/3db3ab843ff76774bee4679d4cb3a10cffb0a935", - "reference": "3db3ab843ff76774bee4679d4cb3a10cffb0a935", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Collections\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan H. Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Collections Abstraction library", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "array", - "collections", - "iterator" - ], - "time": "2013-05-26 05:21:22" - }, - { - "name": "doctrine/common", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common.git", - "reference": "2169b0ce1d253d448c60b7d40bbe4e4b5afe22fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/2169b0ce1d253d448c60b7d40bbe4e4b5afe22fe", - "reference": "2169b0ce1d253d448c60b7d40bbe4e4b5afe22fe", - "shasum": "" - }, - "require": { - "doctrine/annotations": "1.*", - "doctrine/cache": "1.*", - "doctrine/collections": "1.*", - "doctrine/inflector": "1.*", - "doctrine/lexer": "1.*", - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ], - "time": "2013-05-27 19:11:46" - }, - { - "name": "doctrine/inflector", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", - "reference": "8b4b3ccec7aafc596e2fc1e593c9f2e78f939c8c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "inflection", - "pluralize", - "singularize", - "string" - ], - "time": "2013-04-10 16:14:30" - }, - { - "name": "doctrine/lexer", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", - "reference": "bc0e1f0cc285127a38c6c8ea88bc5dba2fd53e94", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "lexer", - "parser" - ], - "time": "2013-03-07 12:15:25" - }, - { - "name": "jms/aop-bundle", - "version": "dev-master", - "target-dir": "JMS/AopBundle", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/JMSAopBundle.git", - "reference": "7018357f5bedf204979a88867a9da05973744422" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSAopBundle/zipball/7018357f5bedf204979a88867a9da05973744422", - "reference": "7018357f5bedf204979a88867a9da05973744422", - "shasum": "" - }, - "require": { - "jms/cg": "1.*", - "symfony/framework-bundle": "2.*" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "JMS\\AopBundle": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Adds AOP capabilities to Symfony2", - "keywords": [ - "annotations", - "aop" - ], - "time": "2013-01-09 08:03:40" - }, - { - "name": "jms/cg", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/cg-library.git", - "reference": "75a519d83a33f6b893a25aef835a1e5fc166a6d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/cg-library/zipball/75a519d83a33f6b893a25aef835a1e5fc166a6d7", - "reference": "75a519d83a33f6b893a25aef835a1e5fc166a6d7", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-0": { - "CG\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Toolset for generating PHP code", - "keywords": [ - "code generation" - ], - "time": "2013-03-23 08:03:00" - }, - { - "name": "jms/di-extra-bundle", - "version": "dev-master", - "target-dir": "JMS/DiExtraBundle", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/JMSDiExtraBundle.git", - "reference": "a15367768d8bbf0b5eac135adf31880ed99cc12d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSDiExtraBundle/zipball/a15367768d8bbf0b5eac135adf31880ed99cc12d", - "reference": "a15367768d8bbf0b5eac135adf31880ed99cc12d", - "shasum": "" - }, - "require": { - "jms/aop-bundle": ">=1.0.0,<1.2-dev", - "jms/metadata": "1.*", - "symfony/finder": ">=2.1,<3.0", - "symfony/framework-bundle": ">=2.1,<3.0", - "symfony/process": ">=2.1,<3.0" - }, - "require-dev": { - "doctrine/doctrine-bundle": "*", - "doctrine/orm": "*", - "jms/security-extra-bundle": "1.*", - "phpcollection/phpcollection": ">=0.1,<0.3-dev", - "sensio/framework-extra-bundle": "*", - "symfony/browser-kit": "*", - "symfony/class-loader": "*", - "symfony/form": "*", - "symfony/security-bundle": "*", - "symfony/twig-bundle": "*", - "symfony/validator": "*", - "symfony/yaml": "*" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-0": { - "JMS\\DiExtraBundle": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Allows to configure dependency injection using annotations", - "homepage": "http://jmsyst.com/bundles/JMSDiExtraBundle", - "keywords": [ - "annotations", - "dependency injection" - ], - "time": "2013-03-21 16:34:41" - }, - { - "name": "jms/metadata", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/metadata.git", - "reference": "0979c7d9eb7f0031a3c5ffed1d6e1fa4eb846e4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/0979c7d9eb7f0031a3c5ffed1d6e1fa4eb846e4e", - "reference": "0979c7d9eb7f0031a3c5ffed1d6e1fa4eb846e4e", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "doctrine/common": ">=2.0,<2.4-dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Metadata\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Class/method/property metadata management in PHP", - "keywords": [ - "annotations", - "metadata", - "xml", - "yaml" - ], - "time": "2013-03-28 16:32:37" - }, - { - "name": "jms/parser-lib", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/parser-lib.git", - "reference": "4d469a70c6dd03f921cbdeadafbcb261bb23e8b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/4d469a70c6dd03f921cbdeadafbcb261bb23e8b0", - "reference": "4d469a70c6dd03f921cbdeadafbcb261bb23e8b0", - "shasum": "" - }, - "require": { - "phpoption/phpoption": ">=0.9,<2.0-dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-0": { - "JMS\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "description": "A library for easily creating recursive-descent parsers.", - "time": "2012-11-30 08:11:04" - }, - { - "name": "phpoption/phpoption", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "1c7e8016289d17d83ced49c56d0f266fd0568941" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/1c7e8016289d17d83ced49c56d0f266fd0568941", - "reference": "1c7e8016289d17d83ced49c56d0f266fd0568941", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "psr-0": { - "PhpOption\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache2" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "time": "2013-05-19 11:09:35" - }, - { - "name": "psr/log", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log", - "reference": "1.0.0" - }, - "dist": { - "type": "zip", - "url": "https://github.com/php-fig/log/archive/1.0.0.zip", - "reference": "1.0.0", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-0": { - "Psr\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "time": "2012-12-21 11:40:51" - }, - { - "name": "symfony/config", - "version": "dev-master", - "target-dir": "Symfony/Component/Config", - "source": { - "type": "git", - "url": "https://github.com/symfony/Config.git", - "reference": "c2e148f4d1daa2ae407a27a07ff433fadfd6de77" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Config/zipball/c2e148f4d1daa2ae407a27a07ff433fadfd6de77", - "reference": "c2e148f4d1daa2ae407a27a07ff433fadfd6de77", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/filesystem": ">=2.3,<3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Config\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Config Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/debug", - "version": "dev-master", - "target-dir": "Symfony/Component/Debug", - "source": { - "type": "git", - "url": "https://github.com/symfony/Debug.git", - "reference": "bcf326c347d9e2ccafde5e30fb938e09255f6c1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Debug/zipball/bcf326c347d9e2ccafde5e30fb938e09255f6c1a", - "reference": "bcf326c347d9e2ccafde5e30fb938e09255f6c1a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/http-kernel": ">=2.1,<3.0" - }, - "suggest": { - "symfony/class-loader": "", - "symfony/http-foundation": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Debug\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Debug Component", - "homepage": "http://symfony.com", - "time": "2013-06-02 12:05:59" - }, - { - "name": "symfony/dependency-injection", - "version": "dev-master", - "target-dir": "Symfony/Component/DependencyInjection", - "source": { - "type": "git", - "url": "https://github.com/symfony/DependencyInjection.git", - "reference": "db5cf551bfebe8fbb0a0734eaf5d732aa10b74e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/db5cf551bfebe8fbb0a0734eaf5d732aa10b74e9", - "reference": "db5cf551bfebe8fbb0a0734eaf5d732aa10b74e9", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "symfony/config": "", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\DependencyInjection\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony DependencyInjection Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/event-dispatcher", - "version": "dev-master", - "target-dir": "Symfony/Component/EventDispatcher", - "source": { - "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "4b34aad44d0a2d91f301ee967151ce0980f39930" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/4b34aad44d0a2d91f301ee967151ce0980f39930", - "reference": "4b34aad44d0a2d91f301ee967151ce0980f39930", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/filesystem", - "version": "dev-master", - "target-dir": "Symfony/Component/Filesystem", - "source": { - "type": "git", - "url": "https://github.com/symfony/Filesystem.git", - "reference": "3567f5f48305098044c6d6a383f5cefec9c45efa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Filesystem/zipball/3567f5f48305098044c6d6a383f5cefec9c45efa", - "reference": "3567f5f48305098044c6d6a383f5cefec9c45efa", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Filesystem\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Filesystem Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/finder", - "version": "dev-master", - "target-dir": "Symfony/Component/Finder", - "source": { - "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "b709a80b766b47761ae1d1e27a6fa6b4e62dcf08" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/b709a80b766b47761ae1d1e27a6fa6b4e62dcf08", - "reference": "b709a80b766b47761ae1d1e27a6fa6b4e62dcf08", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Finder\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "http://symfony.com", - "time": "2013-06-02 12:05:59" - }, - { - "name": "symfony/framework-bundle", - "version": "dev-master", - "target-dir": "Symfony/Bundle/FrameworkBundle", - "source": { - "type": "git", - "url": "https://github.com/symfony/FrameworkBundle.git", - "reference": "28fa76f09660af3fa45dde1ad4c296c8758cec5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/FrameworkBundle/zipball/28fa76f09660af3fa45dde1ad4c296c8758cec5e", - "reference": "28fa76f09660af3fa45dde1ad4c296c8758cec5e", - "shasum": "" - }, - "require": { - "doctrine/common": ">=2.2,<3.0", - "php": ">=5.3.3", - "symfony/config": ">=2.2,<3.0", - "symfony/dependency-injection": ">=2.2,<3.0", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/filesystem": ">=2.3,<3.0", - "symfony/http-kernel": ">=2.3,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/stopwatch": ">=2.3,<3.0", - "symfony/templating": ">=2.1,<3.0", - "symfony/translation": ">=2.3,<3.0" - }, - "require-dev": { - "symfony/class-loader": ">=2.1,<3.0", - "symfony/finder": ">=2.0,<3.0", - "symfony/form": ">=2.3,<3.0", - "symfony/security": ">=2.3,<3.0", - "symfony/validator": ">=2.1,<3.0" - }, - "suggest": { - "symfony/console": "", - "symfony/finder": "", - "symfony/form": "", - "symfony/validator": "" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Bundle\\FrameworkBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony FrameworkBundle", - "homepage": "http://symfony.com", - "time": "2013-06-02 12:05:59" - }, - { - "name": "symfony/http-foundation", - "version": "dev-master", - "target-dir": "Symfony/Component/HttpFoundation", - "source": { - "type": "git", - "url": "https://github.com/symfony/HttpFoundation.git", - "reference": "f484475d926fe5dad901c559ef1bef395385b3a9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpFoundation/zipball/f484475d926fe5dad901c559ef1bef395385b3a9", - "reference": "f484475d926fe5dad901c559ef1bef395385b3a9", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "classmap": [ - "Symfony/Component/HttpFoundation/Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony HttpFoundation Component", - "homepage": "http://symfony.com", - "time": "2013-06-04 15:12:29" - }, - { - "name": "symfony/http-kernel", - "version": "dev-master", - "target-dir": "Symfony/Component/HttpKernel", - "source": { - "type": "git", - "url": "https://github.com/symfony/HttpKernel.git", - "reference": "884e196581541a9801e1a0b0000ddf2118dcc30c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/HttpKernel/zipball/884e196581541a9801e1a0b0000ddf2118dcc30c", - "reference": "884e196581541a9801e1a0b0000ddf2118dcc30c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "psr/log": ">=1.0,<2.0", - "symfony/debug": ">=2.3,<3.0", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/http-foundation": ">=2.2,<3.0" - }, - "require-dev": { - "symfony/browser-kit": "2.2.*", - "symfony/class-loader": ">=2.1,<3.0", - "symfony/config": ">=2.0,<3.0", - "symfony/console": "2.2.*", - "symfony/dependency-injection": ">=2.0,<3.0", - "symfony/finder": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/stopwatch": ">=2.2,<3.0" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/class-loader": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/finder": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\HttpKernel\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony HttpKernel Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/process", - "version": "dev-master", - "target-dir": "Symfony/Component/Process", - "source": { - "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "75c810176f8e069714cef8696d7ecc3aa86e8168" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/75c810176f8e069714cef8696d7ecc3aa86e8168", - "reference": "75c810176f8e069714cef8696d7ecc3aa86e8168", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Process\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/routing", - "version": "dev-master", - "target-dir": "Symfony/Component/Routing", - "source": { - "type": "git", - "url": "https://github.com/symfony/Routing.git", - "reference": "93fa88b2494d3262c87ca0762551a658cc390669" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Routing/zipball/93fa88b2494d3262c87ca0762551a658cc390669", - "reference": "93fa88b2494d3262c87ca0762551a658cc390669", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "doctrine/common": ">=2.2,<3.0", - "psr/log": ">=1.0,<2.0", - "symfony/config": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "doctrine/common": "", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Routing\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Routing Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/security", - "version": "dev-master", - "target-dir": "Symfony/Component/Security", - "source": { - "type": "git", - "url": "https://github.com/symfony/Security.git", - "reference": "693c2395ef2f1d27d04c56bf6172202c90c95697" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Security/zipball/693c2395ef2f1d27d04c56bf6172202c90c95697", - "reference": "693c2395ef2f1d27d04c56bf6172202c90c95697", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/http-kernel": ">=2.1,<3.0" - }, - "require-dev": { - "doctrine/common": ">=2.2,<3.0", - "doctrine/dbal": ">=2.2,<3.0", - "ircmaxell/password-compat": "1.0.*", - "psr/log": ">=1.0,<2.0", - "symfony/form": ">=2.0,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/validator": ">=2.2,<3.0" - }, - "suggest": { - "doctrine/dbal": "to use the built-in ACL implementation", - "ircmaxell/password-compat": "", - "symfony/class-loader": "", - "symfony/finder": "", - "symfony/form": "", - "symfony/routing": "", - "symfony/validator": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Security\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Security Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/security-bundle", - "version": "dev-master", - "target-dir": "Symfony/Bundle/SecurityBundle", - "source": { - "type": "git", - "url": "https://github.com/symfony/SecurityBundle.git", - "reference": "ff1b9ca906cd405f0a3e07841abcc9c8417f44cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/SecurityBundle/zipball/ff1b9ca906cd405f0a3e07841abcc9c8417f44cd", - "reference": "ff1b9ca906cd405f0a3e07841abcc9c8417f44cd", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/http-kernel": ">=2.2,<3.0", - "symfony/security": ">=2.2,<3.0" - }, - "require-dev": { - "symfony/form": ">=2.1,<3.0", - "symfony/framework-bundle": ">=2.2,<3.0", - "symfony/twig-bundle": ">=2.2,<3.0", - "symfony/validator": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Bundle\\SecurityBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony SecurityBundle", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/stopwatch", - "version": "dev-master", - "target-dir": "Symfony/Component/Stopwatch", - "source": { - "type": "git", - "url": "https://github.com/symfony/Stopwatch.git", - "reference": "453f661bad0ec73417ccce9853b1dc6c2a885db1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/453f661bad0ec73417ccce9853b1dc6c2a885db1", - "reference": "453f661bad0ec73417ccce9853b1dc6c2a885db1", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Stopwatch\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Stopwatch Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/templating", - "version": "dev-master", - "target-dir": "Symfony/Component/Templating", - "source": { - "type": "git", - "url": "https://github.com/symfony/Templating.git", - "reference": "cd1b2c0a6f67844f44efdbd365bcd33b546ce713" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Templating/zipball/cd1b2c0a6f67844f44efdbd365bcd33b546ce713", - "reference": "cd1b2c0a6f67844f44efdbd365bcd33b546ce713", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Templating\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Templating Component", - "homepage": "http://symfony.com", - "time": "2013-06-04 15:16:10" - }, - { - "name": "symfony/translation", - "version": "dev-master", - "target-dir": "Symfony/Component/Translation", - "source": { - "type": "git", - "url": "https://github.com/symfony/Translation.git", - "reference": "ed0c7257bfc533205dff78f9d247c2544c830ddc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Translation/zipball/ed0c7257bfc533205dff78f9d247c2544c830ddc", - "reference": "ed0c7257bfc533205dff78f9d247c2544c830ddc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/config": ">=2.0,<3.0", - "symfony/yaml": ">=2.2,<3.0" - }, - "suggest": { - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Translation Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - } - ], - "packages-dev": [ - { - "name": "doctrine/dbal", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "5a8eedf627339ed682d1a2d8d3a4aaf8ac8af750" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5a8eedf627339ed682d1a2d8d3a4aaf8ac8af750", - "reference": "5a8eedf627339ed682d1a2d8d3a4aaf8ac8af750", - "shasum": "" - }, - "require": { - "doctrine/common": "2.4.*@beta", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "symfony/console": "2.*" - }, - "suggest": { - "symfony/console": "Allows use of the command line interface" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\DBAL\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - } - ], - "description": "Database Abstraction Layer", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "persistence", - "queryobject" - ], - "time": "2013-06-07 18:55:27" - }, - { - "name": "doctrine/doctrine-bundle", - "version": "dev-master", - "target-dir": "Doctrine/Bundle/DoctrineBundle", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "9218b4116e86b1d278564b8550fb2f53eb400093" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/9218b4116e86b1d278564b8550fb2f53eb400093", - "reference": "9218b4116e86b1d278564b8550fb2f53eb400093", - "shasum": "" - }, - "require": { - "doctrine/dbal": ">=2.2,<2.5-dev", - "jdorn/sql-formatter": ">=1.1,<2.0", - "php": ">=5.3.2", - "symfony/doctrine-bridge": ">=2.2,<3.0", - "symfony/framework-bundle": ">=2.2,<3.0" - }, - "require-dev": { - "doctrine/orm": ">=2.2,<2.5-dev", - "symfony/validator": ">=2.2,<3.0", - "symfony/yaml": ">=2.2,<3.0" - }, - "suggest": { - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "to use the data collector" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Bundle\\DoctrineBundle": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - } - ], - "description": "Symfony DoctrineBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "orm", - "persistence" - ], - "time": "2013-05-04 07:57:29" - }, - { - "name": "doctrine/orm", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/doctrine2.git", - "reference": "462173ad71ae63cd9877e1e642f7968ed1f9971b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/462173ad71ae63cd9877e1e642f7968ed1f9971b", - "reference": "462173ad71ae63cd9877e1e642f7968ed1f9971b", - "shasum": "" - }, - "require": { - "doctrine/collections": ">=1.1,<2.0", - "doctrine/dbal": ">=2.4-beta,<2.5-dev", - "ext-pdo": "*", - "php": ">=5.3.2", - "symfony/console": "2.*" - }, - "require-dev": { - "symfony/yaml": "2.1" - }, - "suggest": { - "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" - }, - "bin": [ - "bin/doctrine", - "bin/doctrine.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\ORM\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - } - ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "orm" - ], - "time": "2013-06-07 21:42:59" - }, - { - "name": "jdorn/sql-formatter", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/jdorn/sql-formatter.git", - "reference": "v1.2.9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jdorn/sql-formatter/zipball/v1.2.9", - "reference": "v1.2.9", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "lib" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "http://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/jdorn/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "time": "2013-04-26 18:42:52" - }, - { - "name": "sensio/framework-extra-bundle", - "version": "dev-master", - "target-dir": "Sensio/Bundle/FrameworkExtraBundle", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "v2.3.0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/v2.3.0", - "reference": "v2.3.0", - "shasum": "" - }, - "require": { - "doctrine/common": ">=2.2,<3.0", - "symfony/framework-bundle": ">=2.2,<3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Sensio\\Bundle\\FrameworkExtraBundle": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "This bundle provides a way to configure your controllers with annotations", - "keywords": [ - "annotations", - "controllers" - ], - "time": "2013-06-02 16:13:20" - }, - { - "name": "symfony/browser-kit", - "version": "dev-master", - "target-dir": "Symfony/Component/BrowserKit", - "source": { - "type": "git", - "url": "https://github.com/symfony/BrowserKit.git", - "reference": "2d2343dac844a365bd28a7cefd56b47d09e62dda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/2d2343dac844a365bd28a7cefd56b47d09e62dda", - "reference": "2d2343dac844a365bd28a7cefd56b47d09e62dda", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/dom-crawler": ">=2.0,<3.0" - }, - "require-dev": { - "symfony/css-selector": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0" - }, - "suggest": { - "symfony/process": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\BrowserKit\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony BrowserKit Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/class-loader", - "version": "dev-master", - "target-dir": "Symfony/Component/ClassLoader", - "source": { - "type": "git", - "url": "https://github.com/symfony/ClassLoader.git", - "reference": "0cea075c5e7fa61c86ca3cf6cfbed65cf0b1f776" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/0cea075c5e7fa61c86ca3cf6cfbed65cf0b1f776", - "reference": "0cea075c5e7fa61c86ca3cf6cfbed65cf0b1f776", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/finder": ">=2.0,<3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\ClassLoader\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony ClassLoader Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/console", - "version": "dev-master", - "target-dir": "Symfony/Component/Console", - "source": { - "type": "git", - "url": "https://github.com/symfony/Console.git", - "reference": "28b4eced63a11275583345feb3c8269967819eca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Console/zipball/28b4eced63a11275583345feb3c8269967819eca", - "reference": "28b4eced63a11275583345feb3c8269967819eca", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/event-dispatcher": ">=2.1,<3.0" - }, - "suggest": { - "symfony/event-dispatcher": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Console\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Console Component", - "homepage": "http://symfony.com", - "time": "2013-06-04 15:09:18" - }, - { - "name": "symfony/css-selector", - "version": "dev-master", - "target-dir": "Symfony/Component/CssSelector", - "source": { - "type": "git", - "url": "https://github.com/symfony/CssSelector.git", - "reference": "504601ed1aff97d2327a4f65f3f76ac478c57d45" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/CssSelector/zipball/504601ed1aff97d2327a4f65f3f76ac478c57d45", - "reference": "504601ed1aff97d2327a4f65f3f76ac478c57d45", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\CssSelector\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/doctrine-bridge", - "version": "dev-master", - "target-dir": "Symfony/Bridge/Doctrine", - "source": { - "type": "git", - "url": "https://github.com/symfony/DoctrineBridge.git", - "reference": "b65586b8cf8b5907a3de7290c0b43822ccb5edc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/DoctrineBridge/zipball/b65586b8cf8b5907a3de7290c0b43822ccb5edc8", - "reference": "b65586b8cf8b5907a3de7290c0b43822ccb5edc8", - "shasum": "" - }, - "require": { - "doctrine/common": ">=2.2,<3.0", - "php": ">=5.3.3" - }, - "require-dev": { - "doctrine/data-fixtures": "1.0.*", - "doctrine/dbal": ">=2.2,<3.0", - "doctrine/orm": ">=2.2,<3.0,>=2.2.3", - "symfony/dependency-injection": ">=2.0,<3.0", - "symfony/form": ">=2.2,<3.0", - "symfony/http-kernel": ">=2.2,<3.0", - "symfony/security": ">=2.2,<3.0", - "symfony/stopwatch": ">=2.2,<3.0", - "symfony/validator": ">=2.2,<3.0" - }, - "suggest": { - "doctrine/data-fixtures": "", - "doctrine/dbal": "", - "doctrine/orm": "", - "symfony/form": "", - "symfony/validator": "" - }, - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Bridge\\Doctrine\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Doctrine Bridge", - "homepage": "http://symfony.com", - "time": "2013-05-16 20:40:38" - }, - { - "name": "symfony/dom-crawler", - "version": "dev-master", - "target-dir": "Symfony/Component/DomCrawler", - "source": { - "type": "git", - "url": "https://github.com/symfony/DomCrawler.git", - "reference": "09f0cd5980511ee77c2e8142405ccd5c867506b9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/09f0cd5980511ee77c2e8142405ccd5c867506b9", - "reference": "09f0cd5980511ee77c2e8142405ccd5c867506b9", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/css-selector": ">=2.0,<3.0" - }, - "suggest": { - "symfony/css-selector": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\DomCrawler\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/form", - "version": "dev-master", - "target-dir": "Symfony/Component/Form", - "source": { - "type": "git", - "url": "https://github.com/symfony/Form.git", - "reference": "3f33335a1217b6e7d2489dbde50da6b4bf3593cc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Form/zipball/3f33335a1217b6e7d2489dbde50da6b4bf3593cc", - "reference": "3f33335a1217b6e7d2489dbde50da6b4bf3593cc", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1,<3.0", - "symfony/intl": ">=2.3,<3.0", - "symfony/options-resolver": ">=2.1,<3.0", - "symfony/property-access": ">=2.2,<3.0" - }, - "require-dev": { - "symfony/http-foundation": ">=2.2,<3.0", - "symfony/validator": ">=2.2,<3.0" - }, - "suggest": { - "symfony/http-foundation": "", - "symfony/validator": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Form\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Form Component", - "homepage": "http://symfony.com", - "time": "2013-06-02 12:05:59" - }, - { - "name": "symfony/icu", - "version": "1.2.x-dev", - "target-dir": "Symfony/Component/Icu", - "source": { - "type": "git", - "url": "https://github.com/symfony/Icu.git", - "reference": "v1.2.0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Icu/zipball/v1.2.0", - "reference": "v1.2.0", - "shasum": "" - }, - "require": { - "lib-icu": ">=4.4", - "php": ">=5.3.3", - "symfony/intl": ">=2.3,<3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "Symfony\\Component\\Icu\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Contains an excerpt of the ICU data and classes to load it.", - "homepage": "http://symfony.com", - "keywords": [ - "icu", - "intl" - ], - "time": "2013-06-03 18:32:58" - }, - { - "name": "symfony/intl", - "version": "dev-master", - "target-dir": "Symfony/Component/Intl", - "source": { - "type": "git", - "url": "https://github.com/symfony/Intl.git", - "reference": "5199c826bc2c44cd8becfc75e6ab266b37d01b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Intl/zipball/5199c826bc2c44cd8becfc75e6ab266b37d01b6a", - "reference": "5199c826bc2c44cd8becfc75e6ab266b37d01b6a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/icu": ">=1.0-RC,<2.0" - }, - "require-dev": { - "symfony/filesystem": ">=2.1" - }, - "suggest": { - "ext-intl": "to use the component with locales other than \"en\"" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Intl\\": "" - }, - "classmap": [ - "Symfony/Component/Intl/Resources/stubs" - ], - "files": [ - "Symfony/Component/Intl/Resources/stubs/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch", - "homepage": "http://wiedler.ch/igor/" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Eriksen Costa", - "email": "eriksen.costa@infranology.com.br" - } - ], - "description": "A PHP replacement layer for the C intl extension that includes additional data from the ICU library.", - "homepage": "http://symfony.com", - "keywords": [ - "i18n", - "icu", - "internationalization", - "intl", - "l10n", - "localization" - ], - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/options-resolver", - "version": "dev-master", - "target-dir": "Symfony/Component/OptionsResolver", - "source": { - "type": "git", - "url": "https://github.com/symfony/OptionsResolver.git", - "reference": "48d9182e515128e6d18be9ca776a818223d39f52" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/OptionsResolver/zipball/48d9182e515128e6d18be9ca776a818223d39f52", - "reference": "48d9182e515128e6d18be9ca776a818223d39f52", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\OptionsResolver\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony OptionsResolver Component", - "homepage": "http://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/property-access", - "version": "dev-master", - "target-dir": "Symfony/Component/PropertyAccess", - "source": { - "type": "git", - "url": "https://github.com/symfony/PropertyAccess.git", - "reference": "3ed937623a4c1e491f46ebf8111f177ce67e13ba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/PropertyAccess/zipball/3ed937623a4c1e491f46ebf8111f177ce67e13ba", - "reference": "3ed937623a4c1e491f46ebf8111f177ce67e13ba", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\PropertyAccess\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony PropertyAccess Component", - "homepage": "http://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property path", - "reflection" - ], - "time": "2013-05-16 07:54:39" - }, - { - "name": "symfony/twig-bridge", - "version": "dev-master", - "target-dir": "Symfony/Bridge/Twig", - "source": { - "type": "git", - "url": "https://github.com/symfony/TwigBridge.git", - "reference": "126d31387ab33074ffa9d023cc83a700ad1db238" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/TwigBridge/zipball/126d31387ab33074ffa9d023cc83a700ad1db238", - "reference": "126d31387ab33074ffa9d023cc83a700ad1db238", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "twig/twig": ">=1.11.0,<2.0" - }, - "require-dev": { - "symfony/form": "2.2.*", - "symfony/http-kernel": ">=2.2,<3.0", - "symfony/routing": ">=2.2,<3.0", - "symfony/security": ">=2.0,<3.0", - "symfony/templating": ">=2.1,<3.0", - "symfony/translation": ">=2.2,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "symfony/form": "", - "symfony/http-kernel": "", - "symfony/routing": "", - "symfony/security": "", - "symfony/templating": "", - "symfony/translation": "", - "symfony/yaml": "" - }, - "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Bridge\\Twig\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Twig Bridge", - "homepage": "http://symfony.com", - "time": "2013-05-16 20:40:38" - }, - { - "name": "symfony/twig-bundle", - "version": "dev-master", - "target-dir": "Symfony/Bundle/TwigBundle", - "source": { - "type": "git", - "url": "https://github.com/symfony/TwigBundle.git", - "reference": "c502e341a0b8ed25e76d692f5fcc18640bb7b80a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/TwigBundle/zipball/c502e341a0b8ed25e76d692f5fcc18640bb7b80a", - "reference": "c502e341a0b8ed25e76d692f5fcc18640bb7b80a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/http-kernel": ">=2.1,<3.0", - "symfony/twig-bridge": ">=2.2,<3.0" - }, - "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/dependency-injection": ">=2.0,<3.0", - "symfony/stopwatch": ">=2.2,<3.0" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Bundle\\TwigBundle\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony TwigBundle", - "homepage": "http://symfony.com", - "time": "2013-05-27 14:49:42" - }, - { - "name": "symfony/validator", - "version": "dev-master", - "target-dir": "Symfony/Component/Validator", - "source": { - "type": "git", - "url": "https://github.com/symfony/Validator.git", - "reference": "a530bb62eb01865e1212ef1bf1e2166151c33c17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Validator/zipball/a530bb62eb01865e1212ef1bf1e2166151c33c17", - "reference": "a530bb62eb01865e1212ef1bf1e2166151c33c17", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/translation": ">=2.0,<3.0" - }, - "require-dev": { - "symfony/config": ">=2.2,<3.0", - "symfony/http-foundation": ">=2.1,<3.0", - "symfony/intl": ">=2.3,<3.0", - "symfony/yaml": ">=2.0,<3.0" - }, - "suggest": { - "doctrine/common": "", - "symfony/config": "", - "symfony/http-foundation": "", - "symfony/intl": "", - "symfony/yaml": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Validator\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Validator Component", - "homepage": "http://symfony.com", - "time": "2013-06-02 12:05:59" - }, - { - "name": "symfony/yaml", - "version": "dev-master", - "target-dir": "Symfony/Component/Yaml", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "82100c7732c95452702d11433aad50988700d36c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/82100c7732c95452702d11433aad50988700d36c", - "reference": "82100c7732c95452702d11433aad50988700d36c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "http://symfony.com", - "time": "2013-05-16 07:54:39" - }, - { - "name": "twig/twig", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/fabpot/Twig.git", - "reference": "1a6507043782f18e3765b52712cf78d16f3117e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fabpot/Twig/zipball/1a6507043782f18e3765b52712cf78d16f3117e7", - "reference": "1a6507043782f18e3765b52712cf78d16f3117e7", - "shasum": "" - }, - "require": { - "php": ">=5.2.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.13-dev" - } - }, - "autoload": { - "psr-0": { - "Twig_": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ], - "time": "2013-06-07 06:24:46" - } - ], - "aliases": [ - - ], - "minimum-stability": "dev", - "stability-flags": [ - - ], - "platform": [ - - ], - "platform-dev": [ - - ] -}