Hello Ori.livneh,

I'd like you to do a code review.  Please visit

    https://gerrit.wikimedia.org/r/180771

to review the following change.

Change subject: Allow to get JsonContent data as associative array
......................................................................

Allow to get JsonContent data as associative array

The deprecated JsonContent::getJsonData method allowed to get data as
associative array. The suggested replacement JsonContent::getData no
longer allows this. As this is causing issues for extensions as
EventLogging, we teach JsonContent::getData to allow returning
associative arrays.

Change-Id: Ifea3096d3fbc03dd81a7093fc6ee3a521df48305
---
M includes/content/JsonContent.php
M tests/phpunit/includes/content/JsonContentTest.php
2 files changed, 28 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/71/180771/1

diff --git a/includes/content/JsonContent.php b/includes/content/JsonContent.php
index ff3b25b..d871ae7 100644
--- a/includes/content/JsonContent.php
+++ b/includes/content/JsonContent.php
@@ -43,9 +43,14 @@
        /**
         * Decodes the JSON string into a PHP object.
         *
+        * @param bool $assoc When true, returned objects will be converted 
into associative arrays.
+        *
         * @return Status
         */
-       public function getData() {
+       public function getData( $assoc = false ) {
+               if ( $assoc ) {
+                       return FormatJson::parse( $this->getNativeData(), 
FormatJson::FORCE_ASSOC );
+               }
                if ( $this->jsonParse === null ) {
                        $this->jsonParse = FormatJson::parse( 
$this->getNativeData() );
                }
diff --git a/tests/phpunit/includes/content/JsonContentTest.php 
b/tests/phpunit/includes/content/JsonContentTest.php
index 0ad8ecc..f2aba51 100644
--- a/tests/phpunit/includes/content/JsonContentTest.php
+++ b/tests/phpunit/includes/content/JsonContentTest.php
@@ -139,4 +139,26 @@
                $this->assertInstanceOf( 'ParserOutput', $parserOutput );
                $this->assertEquals( $expected, $parserOutput->getText() );
        }
+
+       public function testGetDataAsArray() {
+               $obj = new JsonContent( '{ "foo": { "bar": "baz", "qux": 1 }, 
"quux": 2}' );
+               $dataStatus = $obj->getData( true );
+
+               $this->assertTrue( $dataStatus->isGood() );
+
+               $data = $dataStatus->getValue();
+               $expected = array( 'foo' => array( 'bar' => 'baz', 'qux' => 1 
), 'quux' => 2 );
+               $this->assertEquals( $expected, $data );
+       }
+
+       public function testGetDataAsObject() {
+               $obj = new JsonContent( '{ "foo": { "bar": "baz", "qux": 1 }, 
"quux": 2}' );
+               $dataStatus = $obj->getData();
+
+               $this->assertTrue( $dataStatus->isGood() );
+
+               $data = $dataStatus->getValue();
+               $expected = (object) array( 'foo' => (object) array( 'bar' => 
'baz', 'qux' => 1 ), 'quux' => 2 );
+               $this->assertEquals( $expected, $data );
+       }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/180771
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifea3096d3fbc03dd81a7093fc6ee3a521df48305
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: QChris <christ...@quelltextlich.at>
Gerrit-Reviewer: Ori.livneh <o...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to