From 208ca94b67ad1cefc26d07bc663c3dc618181ad0 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 22 Apr 2015 14:35:58 +0200 Subject: [PATCH] [VarDumper] Allow preserving a subset of cut arrays --- .../VarDumper/Caster/CutArrayStub.php | 30 +++++++++++++++++++ .../Component/VarDumper/Caster/SplCaster.php | 13 +------- .../Component/VarDumper/Caster/StubCaster.php | 5 ++++ .../VarDumper/Cloner/AbstractCloner.php | 1 + .../VarDumper/Tests/Caster/SplCasterTest.php | 4 +-- 5 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 src/Symfony/Component/VarDumper/Caster/CutArrayStub.php diff --git a/src/Symfony/Component/VarDumper/Caster/CutArrayStub.php b/src/Symfony/Component/VarDumper/Caster/CutArrayStub.php new file mode 100644 index 0000000000000..f2a803053a6c0 --- /dev/null +++ b/src/Symfony/Component/VarDumper/Caster/CutArrayStub.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Caster; + +/** + * Represents a cut array. + * + * @author Nicolas Grekas + */ +class CutArrayStub extends CutStub +{ + public $preservedSubset; + + public function __construct(array $value, array $preservedKeys) + { + parent::__construct($value); + + $this->preservedSubset = array_intersect_key($value, array_flip($preservedKeys)); + $this->cut -= count($this->preservedSubset); + } +} diff --git a/src/Symfony/Component/VarDumper/Caster/SplCaster.php b/src/Symfony/Component/VarDumper/Caster/SplCaster.php index a4d4760500d83..f4b1f47cf78ee 100644 --- a/src/Symfony/Component/VarDumper/Caster/SplCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/SplCaster.php @@ -160,18 +160,7 @@ public static function castFileObject(\SplFileObject $c, array $a, Stub $stub, $ } if (isset($a[$prefix.'fstat'])) { - $fstat = $a[$prefix.'fstat']; - $fstat = array( - 'dev' => $fstat['dev'], - 'ino' => $fstat['ino'], - 'nlink' => $fstat['nlink'], - 'rdev' => $fstat['rdev'], - 'blksize' => $fstat['blksize'], - 'blocks' => $fstat['blocks'], - '…' => '…'.(count($fstat) - 6), - ); - - $a[$prefix.'fstat'] = $fstat; + $a[$prefix.'fstat'] = new CutArrayStub($a[$prefix.'fstat'], array('dev', 'ino', 'nlink', 'rdev', 'blksize', 'blocks')); } return $a; diff --git a/src/Symfony/Component/VarDumper/Caster/StubCaster.php b/src/Symfony/Component/VarDumper/Caster/StubCaster.php index ab0f52e55ae9d..542f8a19f4afb 100644 --- a/src/Symfony/Component/VarDumper/Caster/StubCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/StubCaster.php @@ -33,6 +33,11 @@ public static function castStub(Stub $c, array $a, Stub $stub, $isNested) } } + public static function castCutArray(CutArrayStub $c, array $a, Stub $stub, $isNested) + { + return $isNested ? $c->preservedSubset : $a; + } + public static function cutInternals($obj, array $a, Stub $stub, $isNested) { if ($isNested) { diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php index 83cb921319dda..180b1b373efa8 100644 --- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php @@ -23,6 +23,7 @@ abstract class AbstractCloner implements ClonerInterface { public static $defaultCasters = array( 'Symfony\Component\VarDumper\Caster\CutStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castStub', + 'Symfony\Component\VarDumper\Caster\CutArrayStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castCutArray', 'Symfony\Component\VarDumper\Caster\ConstStub' => 'Symfony\Component\VarDumper\Caster\StubCaster::castStub', 'Closure' => 'Symfony\Component\VarDumper\Caster\ReflectionCaster::castClosure', diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php index 299a3f93f56a4..121428ccfedef 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php @@ -106,14 +106,14 @@ public function testCastFileObject() ] flags: DROP_NEW_LINE|SKIP_EMPTY maxLineLen: 0 - fstat: array:7 [ + fstat: array:26 [ "dev" => %d "ino" => %d "nlink" => %d "rdev" => 0 "blksize" => %d "blocks" => %d - "…" => "…20" + …20 ] eof: false key: 0 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy