Passed
Pull Request — master (#116)
by Théo
02:02
created

RequirementCollection::getIterator()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
eloc 1
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the box project.
5
 *
6
 * (c) Kevin Herrera <[email protected]>
7
 *     Théo Fidry <[email protected]>
8
 *
9
 * This source file is subject to the MIT license that is bundled
10
 * with this source code in the file LICENSE.
11
 */
12
13
namespace KevinGH\RequirementChecker;
14
15
use ArrayIterator;
16
use Countable;
17
use IteratorAggregate;
18
use Traversable;
19
20
/**
21
 * The code in this file must be PHP 5.3+ compatible as is used to know if the application can be run.
22
 *
23
 * @private
24
 */
25
final class RequirementCollection implements IteratorAggregate, Countable
26
{
27
    /**
28
     * @var Requirement[]
29
     */
30
    private $requirements = array();
31
32
    /**
33
     * {@inheritdoc}
34
     *
35
     * @return Requirement[]|Traversable
36
     */
37
    public function getIterator()
38
    {
39
        return new ArrayIterator($this->requirements);
40
    }
41
42
    /**
43
     * {@inheritdoc}
44
     */
45
    public function count()
46
    {
47
        return \count($this->requirements);
48
    }
49
50
    /**
51
     * @param Requirement $requirement
52
     */
53
    public function add(Requirement $requirement)
54
    {
55
        $this->requirements[] = $requirement;
56
    }
57
58
    /**
59
     * Adds a mandatory requirement evaluated lazily.
60
     *
61
     * @param string $checkIsFulfilled whether the requirement is fulfilled; This string is will be evaluated with `eval()` because
62
     *                                 PHP does not support the serialization or the export of closures
63
     * @param string $testMessage      The message for testing the requirement
64
     * @param string $helpText         The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags)
65
     */
66
    public function addRequirement($checkIsFulfilled, $testMessage, $helpText)
67
    {
68
        $this->add(new Requirement($checkIsFulfilled, $testMessage, $helpText));
69
    }
70
71
    /**
72
     * Returns all mandatory requirements.
73
     *
74
     * @return Requirement[]
75
     */
76
    public function getRequirements()
77
    {
78
        return $this->requirements;
79
    }
80
81
    /**
82
     * Returns the PHP configuration file (php.ini) path.
83
     *
84
     * @return false|string php.ini file path
85
     */
86
    public function getPhpIniPath()
87
    {
88
        return \get_cfg_var('cfg_file_path');
89
    }
90
91
    /**
92
     * @return bool
93
     */
94
    public function evaluateRequirements()
95
    {
96
        return \array_reduce(
97
            $this->requirements,
98
            /**
99
             * @param bool        $checkPassed
100
             * @param Requirement $requirement
101
             *
102
             * @return bool
103
             */
104
            function ($checkPassed, Requirement $requirement) {
105
                return $checkPassed && $requirement->isFulfilled();
106
            },
107
            true
108
        );
109
    }
110
}
111