[Yaml] Add flag to dump NULL as ~

This commit is contained in:
Oskar Stark 2019-07-23 08:41:15 +02:00
parent b5f592e06c
commit 749c11d94c
4 changed files with 25 additions and 3 deletions

View File

@ -1,6 +1,11 @@
CHANGELOG
=========
4.4.0
-----
* Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag.
4.3.0
-----

View File

@ -33,6 +33,7 @@ class Inline
private static $objectSupport = false;
private static $objectForMap = false;
private static $constantSupport = false;
private static $nullAsTilde = false;
/**
* @param int $flags
@ -45,6 +46,7 @@ class Inline
self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags);
self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags);
self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags);
self::$nullAsTilde = (bool) (Yaml::DUMP_NULL_AS_TILDE & $flags);
self::$parsedFilename = $parsedFilename;
if (null !== $parsedLineNumber) {
@ -129,7 +131,7 @@ class Inline
throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
}
return 'null';
return self::dumpNull($flags);
case $value instanceof \DateTimeInterface:
return $value->format('c');
case \is_object($value):
@ -155,11 +157,11 @@ class Inline
throw new DumpException('Object support when dumping a YAML file has been disabled.');
}
return 'null';
return self::dumpNull($flags);
case \is_array($value):
return self::dumpArray($value, $flags);
case null === $value:
return 'null';
return self::dumpNull($flags);
case true === $value:
return 'true';
case false === $value:
@ -256,6 +258,15 @@ class Inline
return sprintf('{ %s }', implode(', ', $output));
}
private static function dumpNull(int $flags): string
{
if (Yaml::DUMP_NULL_AS_TILDE & $flags) {
return '~';
}
return 'null';
}
/**
* Parses a YAML scalar.
*

View File

@ -513,6 +513,11 @@ YAML;
{
new Dumper(-4);
}
public function testDumpNullAsTilde()
{
$this->assertSame('{ foo: ~ }', $this->dumper->dump(['foo' => null], 0, 0, Yaml::DUMP_NULL_AS_TILDE));
}
}
class A

View File

@ -33,6 +33,7 @@ class Yaml
const PARSE_CONSTANT = 256;
const PARSE_CUSTOM_TAGS = 512;
const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;
const DUMP_NULL_AS_TILDE = 2048;
/**
* Parses a YAML file into a PHP value.