Skip to content

Commit

Permalink
Merge pull request #179 from wmde/throwsTags
Browse files Browse the repository at this point in the history
More specific type hints in deserializers
  • Loading branch information
Benestar committed Feb 18, 2016
2 parents 275c6ff + b87a204 commit 87855ad
Show file tree
Hide file tree
Showing 14 changed files with 45 additions and 43 deletions.
8 changes: 4 additions & 4 deletions src/Deserializers/AliasGroupListDeserializer.php
Expand Up @@ -21,7 +21,7 @@ class AliasGroupListDeserializer implements Deserializer {
/**
* @see Deserializer::deserialize
*
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
* @return AliasGroupList
Expand All @@ -32,11 +32,11 @@ public function deserialize( $serialization ) {
}

/**
* @param array $serialization
* @param array[] $serialization
*
* @return AliasGroupList
*/
private function getDeserialized( $serialization ) {
private function getDeserialized( array $serialization ) {
$aliasGroupList = new AliasGroupList();

foreach ( $serialization as $languageCode => $aliasGroupSerialization ) {
Expand Down Expand Up @@ -66,7 +66,7 @@ private function deserializeAliasGroup( array $serialization, $languageCode ) {
}

/**
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
*/
Expand Down
2 changes: 1 addition & 1 deletion src/Deserializers/EntityIdDeserializer.php
Expand Up @@ -47,7 +47,7 @@ public function deserialize( $serialization ) {
}

/**
* @param mixed $serialization
* @param string $serialization
*
* @throws DeserializationException
*/
Expand Down
4 changes: 2 additions & 2 deletions src/Deserializers/ReferenceListDeserializer.php
Expand Up @@ -29,7 +29,7 @@ public function __construct( Deserializer $referenceDeserializer ) {
/**
* @see Deserializer::deserialize
*
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
* @return ReferenceList
Expand All @@ -41,7 +41,7 @@ public function deserialize( $serialization ) {
}

/**
* @param array $serialization
* @param array[] $serialization
*
* @return ReferenceList
*/
Expand Down
4 changes: 2 additions & 2 deletions src/Deserializers/SnakListDeserializer.php
Expand Up @@ -30,7 +30,7 @@ public function __construct( Deserializer $snakDeserializer ) {
/**
* @see Deserializer::deserialize
*
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
* @return SnakList
Expand Down Expand Up @@ -63,7 +63,7 @@ private function getDeserialized( array $serialization ) {
}

/**
* @param mixed $serialization
* @param array[] $serialization
*
* @throws DeserializationException
*/
Expand Down
2 changes: 1 addition & 1 deletion src/Deserializers/StatementListDeserializer.php
Expand Up @@ -30,7 +30,7 @@ public function __construct( Deserializer $statementDeserializer ) {
/**
* @see Deserializer::deserialize
*
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
* @return StatementList
Expand Down
28 changes: 17 additions & 11 deletions src/Deserializers/TermDeserializer.php
Expand Up @@ -17,7 +17,7 @@
class TermDeserializer implements Deserializer {

/**
* @param mixed $serialization
* @param string[] $serialization
*
* @return Term
* @throws DeserializationException
Expand All @@ -28,16 +28,18 @@ public function deserialize( $serialization ) {
}

/**
* @param array $serialization
* @param string[] $serialization
*
* @return Term
*/
private function getDeserialized( $serialization ) {
private function getDeserialized( array $serialization ) {
return new Term( $serialization['language'], $serialization['value'] );
}

/**
* @param array $serialization
* @param string[] $serialization
*
* @throws DeserializationException
*/
private function assertCanDeserialize( $serialization ) {
if ( !is_array( $serialization ) ) {
Expand All @@ -49,23 +51,25 @@ private function assertCanDeserialize( $serialization ) {
// Do not deserialize term fallbacks
$this->assertNotAttribute( $serialization, 'source' );

$this->assertAttributeInternalType( $serialization, 'language', 'string' );
$this->assertAttributeInternalType( $serialization, 'value', 'string' );
$this->assertAttributeIsString( $serialization, 'language' );
$this->assertAttributeIsString( $serialization, 'value' );
}

private function assertAttributeInternalType( array $array, $attributeName, $internalType ) {
if ( gettype( $array[$attributeName] ) !== $internalType ) {
private function assertAttributeIsString( array $array, $attributeName ) {
if ( !is_string( $array[$attributeName] ) ) {
throw new InvalidAttributeException(
$attributeName,
$array[$attributeName],
"The internal type of attribute '$attributeName' needs to be '$internalType'"
"The internal type of attribute '$attributeName' needs to be 'string'"
);
}
}

/**
* @param array $serialization
* @param string[] $serialization
* @param string $attribute
*
* @throws MissingAttributeException
*/
private function requireAttribute( $serialization, $attribute ) {
if ( !is_array( $serialization ) || !array_key_exists( $attribute, $serialization ) ) {
Expand All @@ -74,8 +78,10 @@ private function requireAttribute( $serialization, $attribute ) {
}

/**
* @param array $array
* @param string[] $array
* @param string $key
*
* @throws InvalidAttributeException
*/
private function assertNotAttribute( array $array, $key ) {
if ( array_key_exists( $key, $array ) ) {
Expand Down
16 changes: 6 additions & 10 deletions src/Deserializers/TermListDeserializer.php
Expand Up @@ -31,7 +31,7 @@ public function __construct( Deserializer $termDeserializer ) {
/**
* @see Deserializer::deserialize
*
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
* @return TermList
Expand All @@ -42,11 +42,11 @@ public function deserialize( $serialization ) {
}

/**
* @param array $serialization
* @param array[] $serialization
*
* @return TermList
*/
private function getDeserialized( $serialization ) {
private function getDeserialized( array $serialization ) {
$termList = new TermList();

foreach ( $serialization as $termSerialization ) {
Expand All @@ -57,7 +57,7 @@ private function getDeserialized( $serialization ) {
}

/**
* @param array $serialization
* @param array[] $serialization
*
* @throws DeserializationException
*/
Expand Down Expand Up @@ -86,15 +86,11 @@ private function assertRequestedAndActualLanguageMatch(
}

private function assertAttributeIsArray( array $array, $attributeName ) {
$this->assertAttributeInternalType( $array, $attributeName, 'array' );
}

private function assertAttributeInternalType( array $array, $attributeName, $internalType ) {
if ( gettype( $array[$attributeName] ) !== $internalType ) {
if ( !is_array( $array[$attributeName] ) ) {
throw new InvalidAttributeException(
$attributeName,
$array[$attributeName],
"The internal type of attribute '$attributeName' needs to be '$internalType'"
"The internal type of attribute '$attributeName' needs to be 'array'"
);
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/Serializers/AliasGroupListSerializer.php
Expand Up @@ -37,7 +37,7 @@ public function __construct( Serializer $aliasGroupSerializer, $useObjectsForMap
/**
* @param AliasGroupList $object
*
* @return array
* @return array[]
*/
public function serialize( $object ) {
$this->assertIsSerializerFor( $object );
Expand All @@ -56,7 +56,7 @@ private function assertIsSerializerFor( $object ) {
/**
* @param AliasGroupList $aliasGroupList
*
* @return array
* @return array[]
*/
private function getSerialized( AliasGroupList $aliasGroupList ) {
$serialization = array();
Expand Down
6 changes: 3 additions & 3 deletions src/Serializers/AliasGroupSerializer.php
@@ -1,6 +1,7 @@
<?php

namespace Wikibase\DataModel\Serializers;

use Serializers\Exceptions\UnsupportedObjectException;
use Serializers\Serializer;
use Wikibase\DataModel\Term\AliasGroup;
Expand All @@ -14,11 +15,10 @@
*/
class AliasGroupSerializer implements Serializer {


/**
* @param AliasGroup $object
*
* @return array
* @return array[]
*/
public function serialize( $object ) {
$this->assertIsSerializerFor( $object );
Expand All @@ -37,7 +37,7 @@ private function assertIsSerializerFor( $object ) {
/**
* @param AliasGroup $aliasGroup
*
* @return array
* @return array[]
*/
private function getSerialized( AliasGroup $aliasGroup ) {
$serialization = array();
Expand Down
2 changes: 1 addition & 1 deletion src/Serializers/ReferenceListSerializer.php
Expand Up @@ -45,7 +45,7 @@ public function isSerializerFor( $object ) {
* @param ReferenceList $object
*
* @throws SerializationException
* @return array
* @return array[]
*/
public function serialize( $object ) {
if ( !$this->isSerializerFor( $object ) ) {
Expand Down
2 changes: 1 addition & 1 deletion src/Serializers/SnakListSerializer.php
Expand Up @@ -53,7 +53,7 @@ public function isSerializerFor( $object ) {
* @param SnakList $object
*
* @throws SerializationException
* @return array
* @return array[]
*/
public function serialize( $object ) {
if ( !$this->isSerializerFor( $object ) ) {
Expand Down
2 changes: 1 addition & 1 deletion src/Serializers/StatementListSerializer.php
Expand Up @@ -52,7 +52,7 @@ public function isSerializerFor( $object ) {
* @param StatementList $object
*
* @throws SerializationException
* @return array
* @return array[]
*/
public function serialize( $object ) {
if ( !$this->isSerializerFor( $object ) ) {
Expand Down
4 changes: 2 additions & 2 deletions src/Serializers/TermListSerializer.php
Expand Up @@ -39,7 +39,7 @@ public function __construct( Serializer $termSerializer, $useObjectsForMaps ) {
*
* @param TermList $object
*
* @return array
* @return array[]
* @throws SerializationException
*/
public function serialize( $object ) {
Expand All @@ -59,7 +59,7 @@ private function assertIsSerializerFor( $object ) {
/**
* @param TermList $termList
*
* @return array
* @return array[]
*/
private function getSerialized( TermList $termList ) {
$serialization = array();
Expand Down
4 changes: 2 additions & 2 deletions src/Serializers/TermSerializer.php
Expand Up @@ -18,7 +18,7 @@ class TermSerializer implements Serializer {
/**
* @param Term $object
*
* @return array
* @return string[]
*/
public function serialize( $object ) {
$this->assertIsSerializerFor( $object );
Expand All @@ -37,7 +37,7 @@ private function assertIsSerializerFor( $object ) {
/**
* @param Term $term
*
* @return array
* @return string[]
*/
private function getSerialized( Term $term ) {
$result = array(
Expand Down

0 comments on commit 87855ad

Please sign in to comment.