Jeroen De Dauw has uploaded a new change for review. https://gerrit.wikimedia.org/r/255371
Change subject: Move statement filtering from GetClaims API to dedicated class ...................................................................... Move statement filtering from GetClaims API to dedicated class Change-Id: I89e6815a3774e4c0a4d68b193bb044a9ea07017c --- M repo/includes/api/GetClaims.php A repo/includes/api/GetClaimsStatementFilter.php 2 files changed, 86 insertions(+), 38 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/71/255371/1 diff --git a/repo/includes/api/GetClaims.php b/repo/includes/api/GetClaims.php index 3edc4e7..1f0bb4e 100644 --- a/repo/includes/api/GetClaims.php +++ b/repo/includes/api/GetClaims.php @@ -27,7 +27,7 @@ * @author Jeroen De Dauw < jeroended...@gmail.com > * @author Adam Shorland */ -class GetClaims extends ApiBase implements StatementFilter { +class GetClaims extends ApiBase { /** * @var StatementGuidValidator @@ -129,49 +129,19 @@ } if ( $guid === null ) { - return $entity->getStatements()->filter( $this ); + return $entity->getStatements()->filter( $this->newRequestParamsBasedFilter() ); } $statement = $entity->getStatements()->getFirstStatementWithGuid( $guid ); return $statement === null ? array() : array( $statement ); } - public function statementMatches( Statement $statement ) { - return $this->rankMatchesFilter( $statement->getRank() ) - && $this->propertyMatchesFilter( $statement->getPropertyId() ); - } - - private function rankMatchesFilter( $rank ) { - if ( $rank === null ) { - return true; - } - $params = $this->extractRequestParams(); - - if ( isset( $params['rank'] ) ) { - $statementRankSerializer = new StatementRankSerializer(); - $unserializedRank = $statementRankSerializer->deserialize( $params['rank'] ); - $matchFilter = $rank === $unserializedRank; - return $matchFilter; - } - - return true; - } - - private function propertyMatchesFilter( EntityId $propertyId ) { - $params = $this->extractRequestParams(); - - if ( isset( $params['property'] ) ) { - try { - $parsedProperty = $this->idParser->parse( $params['property'] ); - } catch ( EntityIdParsingException $e ) { - $this->errorReporter->dieException( $e, 'param-invalid' ); - } - - /** @var EntityId $parsedProperty */ - return $propertyId->equals( $parsedProperty ); - } - - return true; + private function newRequestParamsBasedFilter() { + return new GetClaimsStatementFilter( + $this->idParser, + $this->errorReporter, + $this->extractRequestParams() + ); } /** diff --git a/repo/includes/api/GetClaimsStatementFilter.php b/repo/includes/api/GetClaimsStatementFilter.php new file mode 100644 index 0000000..424893c --- /dev/null +++ b/repo/includes/api/GetClaimsStatementFilter.php @@ -0,0 +1,78 @@ +<?php + +namespace Wikibase\Repo\Api; + +use Wikibase\DataModel\Entity\EntityId; +use Wikibase\DataModel\Entity\EntityIdParser; +use Wikibase\DataModel\Entity\EntityIdParsingException; +use Wikibase\DataModel\Statement\Statement; +use Wikibase\DataModel\Statement\StatementFilter; +use Wikibase\StatementRankSerializer; + +/** + * @licence GNU GPL v2+ + * @author Jeroen De Dauw < jeroended...@gmail.com > + */ +class GetClaimsStatementFilter implements StatementFilter { + + /** + * @var ApiErrorReporter + */ + private $errorReporter; + + /** + * @var EntityIdParser + */ + private $idParser; + + /** + * @var array + */ + private $requestParams; + + public function __construct( EntityIdParser $idParser, ApiErrorReporter $errorReporter, array $requestParams ) { + $this->idParser = $idParser; + $this->errorReporter = $errorReporter; + $this->requestParams = $requestParams; + } + + /** + * @param Statement $statement + * + * @return boolean + */ + public function statementMatches( Statement $statement ) { + return $this->rankMatchesFilter( $statement->getRank() ) + && $this->propertyMatchesFilter( $statement->getPropertyId() ); + } + + private function rankMatchesFilter( $rank ) { + if ( $rank === null ) { + return true; + } + + if ( isset( $this->requestParams['rank'] ) ) { + $statementRankSerializer = new StatementRankSerializer(); + $unserializedRank = $statementRankSerializer->deserialize( $this->requestParams['rank'] ); + return $rank === $unserializedRank; + } + + return true; + } + + private function propertyMatchesFilter( EntityId $propertyId ) { + if ( isset( $this->requestParams['property'] ) ) { + try { + $parsedProperty = $this->idParser->parse( $this->requestParams['property'] ); + } catch ( EntityIdParsingException $e ) { + $this->errorReporter->dieException( $e, 'param-invalid' ); + } + + /** @var EntityId $parsedProperty */ + return $propertyId->equals( $parsedProperty ); + } + + return true; + } + +} -- To view, visit https://gerrit.wikimedia.org/r/255371 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I89e6815a3774e4c0a4d68b193bb044a9ea07017c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits