ReturnArgumentPromise::execute()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 3
1
<?php
2
3
/*
4
 * This file is part of the Prophecy.
5
 * (c) Konstantin Kudryashov <[email protected]>
6
 *     Marcello Duarte <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Prophecy\Promise;
13
14
use Prophecy\Exception\InvalidArgumentException;
15
use Prophecy\Prophecy\ObjectProphecy;
16
use Prophecy\Prophecy\MethodProphecy;
17
18
/**
19
 * Return argument promise.
20
 *
21
 * @author Konstantin Kudryashov <[email protected]>
22
 */
23
class ReturnArgumentPromise implements PromiseInterface
24
{
25
    /**
26
     * @var int
27
     */
28
    private $index;
29
30
    /**
31
     * Initializes callback promise.
32
     *
33
     * @param int $index The zero-indexed number of the argument to return
34
     *
35
     * @throws \Prophecy\Exception\InvalidArgumentException
36
     */
37
    public function __construct($index = 0)
38
    {
39
        if (!is_int($index) || $index < 0) {
40
            throw new InvalidArgumentException(sprintf(
41
                'Zero-based index expected as argument to ReturnArgumentPromise, but got %s.',
42
                $index
43
            ));
44
        }
45
        $this->index = $index;
46
    }
47
48
    /**
49
     * Returns nth argument if has one, null otherwise.
50
     *
51
     * @param array          $args
52
     * @param ObjectProphecy $object
53
     * @param MethodProphecy $method
54
     *
55
     * @return null|mixed
56
     */
57
    public function execute(array $args, ObjectProphecy $object, MethodProphecy $method)
58
    {
59
        return count($args) > $this->index ? $args[$this->index] : null;
60
    }
61
}
62