Commit 79941b52 authored by webchick's avatar webchick

Issue #1894508 by linclark, damiankloip, scor: Update symfony/serializer.

parent b261004a
......@@ -9,7 +9,7 @@
"symfony/http-foundation": "<2.4",
"symfony/http-kernel": "<2.4",
"symfony/routing": "<2.4",
"symfony/serializer": "<2.4",
"symfony/serializer": "2.2.0-BETA2",
"symfony/validator": "<2.4",
"symfony/yaml": "<2.4",
"twig/twig": "1.*@stable",
......
{
"hash": "fb8595c6fbaaa5bf51bf7efeb67d73bc",
"hash": "c087560024f328e26e2ed57c9b2aa703",
"packages": [
{
"name": "doctrine/common",
......@@ -25,7 +25,6 @@
"dev-master": "2.3.x-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Doctrine\\Common": "lib/"
......@@ -98,7 +97,6 @@
},
"time": "2013-01-13 01:20:04",
"type": "library",
"installation-source": "source",
"autoload": {
"psr-0": {
"EasyRdf_": "lib/"
......@@ -152,7 +150,6 @@
"dev-master": "3.0-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Guzzle\\Common": ""
......@@ -200,7 +197,6 @@
"dev-master": "3.0-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Guzzle\\Http": ""
......@@ -252,7 +248,6 @@
"dev-master": "3.0-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Guzzle\\Parser": ""
......@@ -298,7 +293,6 @@
"dev-master": "3.0-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Guzzle\\Stream": ""
......@@ -360,7 +354,6 @@
"dev-master": "1.1-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Assetic": "src/"
......@@ -412,7 +405,6 @@
"dev-master": "1.0-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Cmf\\Component\\Routing": ""
......@@ -463,7 +455,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\ClassLoader\\": ""
......@@ -519,7 +510,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\DependencyInjection\\": ""
......@@ -574,7 +564,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\EventDispatcher\\": ""
......@@ -622,7 +611,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\HttpFoundation\\": ""
......@@ -694,7 +682,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\HttpKernel\\": ""
......@@ -737,7 +724,6 @@
},
"time": "2012-12-06 10:00:55",
"type": "library",
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Process": ""
......@@ -796,7 +782,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Routing\\": ""
......@@ -821,30 +806,29 @@
},
{
"name": "symfony/serializer",
"version": "dev-master",
"version": "v2.2.0-BETA2",
"target-dir": "Symfony/Component/Serializer",
"source": {
"type": "git",
"url": "https://github.com/symfony/Serializer",
"reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0"
"reference": "v2.2.0-BETA2"
},
"dist": {
"type": "zip",
"url": "https://github.com/symfony/Serializer/archive/ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0.zip",
"reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0",
"url": "https://github.com/symfony/Serializer/archive/v2.2.0-BETA2.zip",
"reference": "v2.2.0-BETA2",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"time": "2012-12-19 07:09:49",
"time": "2013-01-19 07:50:02",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Serializer\\": ""
......@@ -900,7 +884,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Translation\\": ""
......@@ -961,7 +944,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Validator\\": ""
......@@ -1009,7 +991,6 @@
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Yaml\\": ""
......@@ -1056,7 +1037,6 @@
"dev-master": "1.11-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Twig_": "lib/"
......@@ -1089,6 +1069,7 @@
],
"minimum-stability": "dev",
"stability-flags": {
"symfony/serializer": 10,
"twig/twig": 0,
"doctrine/common": 0,
"guzzle/http": 0,
......
......@@ -32,7 +32,7 @@ class ComplexDataNormalizer extends NormalizerBase {
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
$attributes = array();
foreach ($object as $name => $field) {
$attributes[$name] = $this->serializer->normalize($field, $format);
......
......@@ -31,7 +31,7 @@ class ListNormalizer extends NormalizerBase {
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
$attributes = array();
foreach ($object as $fieldItem) {
$attributes[] = $this->serializer->normalize($fieldItem, $format);
......
......@@ -25,7 +25,7 @@ class TypedDataNormalizer extends NormalizerBase {
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize().
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
return $object->getValue();
}
......
......@@ -44,9 +44,9 @@ public function __construct() {
/**
* Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
*/
public function encode($data, $format){
$normalized = $this->serializer->normalize($data, $format);
return $this->baseEncoder->encode($normalized, $format);
public function encode($data, $format, array $context = array()){
$normalized = $this->serializer->normalize($data, $format, $context);
return $this->baseEncoder->encode($normalized, $format, $context);
}
/**
......@@ -59,8 +59,8 @@ public function supportsEncoding($format) {
/**
* Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::decode().
*/
public function decode($data, $format){
return $this->baseEncoder->decode($data, $format);
public function decode($data, $format, array $context = array()){
return $this->baseEncoder->decode($data, $format, $context);
}
/**
......
......@@ -27,7 +27,7 @@ class JsonldEntityNormalizer extends JsonldNormalizerBase implements Denormalize
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
*/
public function normalize($entity, $format = NULL) {
public function normalize($entity, $format = NULL, array $context = array()) {
$entity_wrapper = new JsonldEntityWrapper($entity, $format, $this->serializer, $this->siteSchemaManager);
$attributes = $entity_wrapper->getProperties();
......@@ -43,7 +43,7 @@ public function normalize($entity, $format = NULL) {
*
* @throws \Symfony\Component\Serializer\Exception\UnexpectedValueException
*/
public function denormalize($data, $class, $format = null) {
public function denormalize($data, $class, $format = null, array $context = array()) {
if (!isset($data['@type'])) {
throw new UnexpectedValueException('JSON-LD @type parameter must be included.');
}
......
......@@ -30,7 +30,7 @@ class JsonldEntityReferenceNormalizer extends JsonldNormalizerBase implements De
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
// @todo If an $options parameter is added to the serialize signature, as
// requested in https://github.com/symfony/symfony/pull/4938, then instead
// of creating the array of properties, we could simply call normalize and
......@@ -45,7 +45,7 @@ public function normalize($object, $format = NULL) {
/**
* Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::denormalize()
*/
public function denormalize($data, $class, $format = null) {
public function denormalize($data, $class, $format = null, array $context = array()) {
// @todo Support denormalization for Entity Reference.
return array();
}
......
......@@ -27,14 +27,14 @@ class JsonldFieldItemNormalizer extends JsonldNormalizerBase implements Denormal
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
return $object->getPropertyValues();
}
/**
* Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::denormalize()
*/
public function denormalize($data, $class, $format = null) {
public function denormalize($data, $class, $format = null, array $context = array()) {
// For most fields, the field items array should simply be returned as is.
return $data;
}
......
......@@ -25,7 +25,7 @@ class JsonldRdfSchemaNormalizer extends JsonldNormalizerBase {
/**
* Implements \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
*/
public function normalize($data, $format = NULL) {
public function normalize($data, $format = NULL, array $context = array()) {
$normalized = array();
$graph = $data->getGraph();
......
......@@ -29,7 +29,7 @@ class SerializationTestEncoder implements EncoderInterface {
* @return string
* A string representation of $data in the requested format.
*/
public function encode($data, $format) {
public function encode($data, $format, array $context = array()) {
// @see Drupal\serialization_test\SerializationTestNormalizer::normalize().
return 'Normalized by ' . $data['normalized_by'] . ', Encoded by SerializationTestEncoder';
}
......
......@@ -30,7 +30,7 @@ class SerializationTestNormalizer implements NormalizerInterface {
* An array containing a normalized representation of $object, appropriate
* for encoding to the requested format.
*/
public function normalize($object, $format = NULL) {
public function normalize($object, $format = NULL, array $context = array()) {
$normalized = (array) $object;
// Add identifying value that can be used to verify that the expected
// normalizer was invoked.
......
......@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInitb72eabc903127a0c876d43163fd09a25::getLoader();
return ComposerAutoloaderInit4166b4dc5e0c1c9d89ac8e8f9eefcd74::getLoader();
......@@ -75,30 +75,63 @@ public function addClassMap(array $classMap)
}
/**
* Registers a set of classes
* Registers a set of classes, merging with any others previously set.
*
* @param string $prefix The classes prefix
* @param array|string $paths The location(s) of the classes
* @param string $prefix The classes prefix
* @param array|string $paths The location(s) of the classes
* @param bool $prepend Prepend the location(s)
*/
public function add($prefix, $paths)
public function add($prefix, $paths, $prepend = false)
{
if (!$prefix) {
foreach ((array) $paths as $path) {
$this->fallbackDirs[] = $path;
if ($prepend) {
$this->fallbackDirs = array_merge(
(array) $paths,
$this->fallbackDirs
);
} else {
$this->fallbackDirs = array_merge(
$this->fallbackDirs,
(array) $paths
);
}
return;
}
if (isset($this->prefixes[$prefix])) {
if (!isset($this->prefixes[$prefix])) {
$this->prefixes[$prefix] = (array) $paths;
return;
}
if ($prepend) {
$this->prefixes[$prefix] = array_merge(
(array) $paths,
$this->prefixes[$prefix]
);
} else {
$this->prefixes[$prefix] = array_merge(
$this->prefixes[$prefix],
(array) $paths
);
} else {
$this->prefixes[$prefix] = (array) $paths;
}
}
/**
* Registers a set of classes, replacing any others previously set.
*
* @param string $prefix The classes prefix
* @param array|string $paths The location(s) of the classes
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirs = (array) $paths;
return;
}
$this->prefixes[$prefix] = (array) $paths;
}
/**
* Turns on searching the include path for class files.
*
......
......@@ -2,7 +2,7 @@
// autoload_real.php generated by Composer
class ComposerAutoloaderInitb72eabc903127a0c876d43163fd09a25
class ComposerAutoloaderInit4166b4dc5e0c1c9d89ac8e8f9eefcd74
{
private static $loader;
......@@ -19,9 +19,9 @@ public static function getLoader()
return self::$loader;
}
spl_autoload_register(array('ComposerAutoloaderInitb72eabc903127a0c876d43163fd09a25', 'loadClassLoader'));
spl_autoload_register(array('ComposerAutoloaderInit4166b4dc5e0c1c9d89ac8e8f9eefcd74', 'loadClassLoader'));
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInitb72eabc903127a0c876d43163fd09a25', 'loadClassLoader'));
spl_autoload_unregister(array('ComposerAutoloaderInit4166b4dc5e0c1c9d89ac8e8f9eefcd74', 'loadClassLoader'));
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
......@@ -36,7 +36,7 @@ public static function getLoader()
$loader->addClassMap($classMap);
}
$loader->register();
$loader->register(true);
return $loader;
}
......
......@@ -575,55 +575,6 @@
"description": "Symfony Routing Component",
"homepage": "http://symfony.com"
},
{
"name": "symfony/serializer",
"version": "dev-master",
"version_normalized": "9999999-dev",
"target-dir": "Symfony/Component/Serializer",
"source": {
"type": "git",
"url": "https://github.com/symfony/Serializer",
"reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0"
},
"dist": {
"type": "zip",
"url": "https://github.com/symfony/Serializer/archive/ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0.zip",
"reference": "ef3d92815bdb07281ee8cbd73b3e3f9e41bdc1a0",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"time": "2012-12-19 07:09:49",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
}
},
"installation-source": "source",
"autoload": {
"psr-0": {
"Symfony\\Component\\Serializer\\": ""
}
},
"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 Serializer Component",
"homepage": "http://symfony.com"
},
{
"name": "symfony/yaml",
"version": "dev-master",
......@@ -1099,5 +1050,54 @@
],
"description": "Symfony Validator Component",
"homepage": "http://symfony.com"
},
{
"name": "symfony/serializer",
"version": "v2.2.0-BETA2",
"version_normalized": "2.2.0.0-beta2",
"target-dir": "Symfony/Component/Serializer",
"source": {
"type": "git",
"url": "https://github.com/symfony/Serializer",
"reference": "v2.2.0-BETA2"
},
"dist": {
"type": "zip",
"url": "https://github.com/symfony/Serializer/archive/v2.2.0-BETA2.zip",
"reference": "v2.2.0-BETA2",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"time": "2013-01-19 07:50:02",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2-dev"
}
},
"installation-source": "dist",
"autoload": {
"psr-0": {
"Symfony\\Component\\Serializer\\": ""
}
},
"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 Serializer Component",
"homepage": "http://symfony.com"
}
]
CHANGELOG
=========
2.2.0
-----
* [BC BREAK] All Serializer, Normalizer and Encoder interfaces have been
modified to include an optional `$context` array parameter.
* The XML Root name can now be configured with the `xml_root_name`
parameter in the context option to the `XmlEncoder`.
* Options to `json_encode` and `json_decode` can be passed through
the context options of `JsonEncode` and `JsonDecode` encoder/decoders.
2.1.0
-----
......
......@@ -34,9 +34,9 @@ public function __construct(array $decoders = array())
/**
* {@inheritdoc}
*/
final public function decode($data, $format)
final public function decode($data, $format, array $context = array())
{
return $this->getDecoder($format)->decode($data, $format);
return $this->getDecoder($format)->decode($data, $format, $context);
}
/**
......
......@@ -35,9 +35,9 @@ public function __construct(array $encoders = array())
/**
* {@inheritdoc}
*/
final public function encode($data, $format)
final public function encode($data, $format, array $context = array())
{
return $this->getEncoder($format)->encode($data, $format);
return $this->getEncoder($format)->encode($data, $format, $context);
}
/**
......
......@@ -23,10 +23,11 @@ interface DecoderInterface
*
* @param scalar $data Data to decode
* @param string $format Format name
* @param array $context options that decoders have access to.
*
* @return mixed
*/
public function decode($data, $format);
public function decode($data, $format, array $context = array());
/**
* Checks whether the serializer can decode from given format
......
......@@ -23,10 +23,11 @@ interface EncoderInterface
*
* @param mixed $data Data to encode
* @param string $format Format name
* @param array $context options that normalizers/encoders have access to.
*
* @return scalar
*/
public function encode($data, $format);
public function encode($data, $format, array $context = array());
/**
* Checks whether the serializer can encode to given format
......
......@@ -21,6 +21,7 @@ class JsonDecode implements DecoderInterface
private $associative;
private $recursionDepth;
private $lastError = JSON_ERROR_NONE;
protected $serializer;
public function __construct($associative = false, $depth = 512)
{
......@@ -48,9 +49,20 @@ public function getLastError()
*
* @return mixed
*/
public function decode($data, $format)
public function decode($data, $format, array $context = array())
{
$decodedData = json_decode($data, $this->associative, $this->recursionDepth);
$context = $this->resolveContext($context);
$associative = $context['json_decode_associative'];
$recursionDepth = $context['json_decode_recursion_depth'];
$options = $context['json_decode_options'];
if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
$decodedData = json_decode($data, $associative, $recursionDepth, $options);
} else {
$decodedData = json_decode($data, $associative, $recursionDepth);
}
$this->lastError = json_last_error();
return $decodedData;
......@@ -63,4 +75,21 @@ public function supportsDecoding($format)
{
return JsonEncoder::FORMAT === $format;
}
/**
* Merge the default options of the Json Decoder with the passed context.
*
* @param array $context
* @return array
*/
private function resolveContext(array $context)
{
$defaultOptions = array(
'json_decode_associative' => $this->associative,
'json_decode_recursion_depth' => $this->recursionDepth,
'json_decode_options' => 0
);
return array_merge($defaultOptions, $context);
}
}
......@@ -41,14 +41,13 @@ public function getLastError()
/**
* Encodes PHP data to a JSON string
*
* @param mixed $data
* @param string $format
*
* @return string
* {@inheritdoc}
*/
public function encode($data, $format)
public function encode($data, $format, array $context = array())
{
$encodedJson = json_encode($data, $this->options);
$context = $this->resolveContext($context);
$encodedJson = json_encode($data, $context['json_encode_options']);
$this->lastError = json_last_error();
return $encodedJson;
......@@ -61,4 +60,15 @@ public function supportsEncoding($format)
{
return JsonEncoder::FORMAT === $format;
}
/**
* Merge default json encode options with context.
*
* @param array $context