83 lines
1.6 KiB
PHP
83 lines
1.6 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Prophecy.
|
|
* (c) Konstantin Kudryashov <ever.zet@gmail.com>
|
|
* Marcello Duarte <marcello.duarte@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Prophecy\Argument\Token;
|
|
|
|
/**
|
|
* Array every entry token.
|
|
*
|
|
* @author Adrien Brault <adrien.brault@gmail.com>
|
|
*/
|
|
class ArrayEveryEntryToken implements TokenInterface
|
|
{
|
|
/**
|
|
* @var TokenInterface
|
|
*/
|
|
private $value;
|
|
|
|
/**
|
|
* @param mixed $value exact value or token
|
|
*/
|
|
public function __construct($value)
|
|
{
|
|
if (!$value instanceof TokenInterface) {
|
|
$value = new ExactValueToken($value);
|
|
}
|
|
|
|
$this->value = $value;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function scoreArgument($argument)
|
|
{
|
|
if (!$argument instanceof \Traversable && !is_array($argument)) {
|
|
return false;
|
|
}
|
|
|
|
$scores = array();
|
|
foreach ($argument as $key => $argumentEntry) {
|
|
$scores[] = $this->value->scoreArgument($argumentEntry);
|
|
}
|
|
|
|
if (empty($scores) || in_array(false, $scores, true)) {
|
|
return false;
|
|
}
|
|
|
|
return array_sum($scores) / count($scores);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function isLast()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function __toString()
|
|
{
|
|
return sprintf('[%s, ..., %s]', $this->value, $this->value);
|
|
}
|
|
|
|
/**
|
|
* @return TokenInterface
|
|
*/
|
|
public function getValue()
|
|
{
|
|
return $this->value;
|
|
}
|
|
}
|