Test Failed
Push — master ( 05b030...31551e )
by Andy
02:05
created

BooleanFormatter::getValues()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 0
cts 0
cp 0
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Palmtree\Csv\Formatter;
4
5
/**
6
 * BooleanFormatter formats a CSV cell as a boolean
7
 */
8
class BooleanFormatter extends AbstractFormatter
9
{
10
    /**
11
     * @var array $defaultPairs Default truthy/falsey pairs.
12
     */
13
    public static $defaultPairs = [
14
        'true'    => 'false',
15
        '1'       => '0',
16
        'on'      => 'off',
17
        'yes'     => 'no',
18
        'enabled' => 'disabled',
19
    ];
20
21
    /** @var array */
22
    protected $values = [];
23
    /** @var bool */
24
    protected $nullable;
25
    /** @var bool */
26
    protected $caseSensitive;
27 3
28
    /**
29 3
     * BooleanFormatter constructor.
30
     *
31 3
     * @param null|FormatterInterface $formatter
32
     * @param bool                    $nullable
33
     * @param bool                    $caseSensitive
34
     * @param array|null              $pairs
35 3
     */
36 3
    public function __construct($formatter = null, $nullable = false, $caseSensitive = false, $pairs = null)
37
    {
38
        if (!is_array($pairs)) {
39
            $pairs = static::$defaultPairs;
40
        }
41 2
42
        $this->setNullable($nullable)
43 2
             ->setCaseSensitive($caseSensitive)
44
             ->setPairs($pairs);
45
46
        parent::__construct($formatter);
47
    }
48
49
    /**
50
     * @param array $pairs
51 3
     *
52
     * @return BooleanFormatter
53 3
     */
54
    public function setPairs(array $pairs)
55 3
    {
56
        $this->values = [];
57
58
        foreach ($pairs as $truthy => $falsey) {
59
            $this->addPair($truthy, $falsey);
60
        }
61
62
        return $this;
63 2
    }
64
65 2
    /**
66
     * @param string $truthy
67 2
     * @param string $falsey
68
     */
69
    public function addPair($truthy, $falsey)
70
    {
71
        if (!$this->isCaseSensitive()) {
72
            $truthy = mb_strtolower($truthy);
73
            $falsey = mb_strtolower($falsey);
74
        }
75
76
        $this->values[$truthy] = true;
77
        $this->values[$falsey] = false;
78
    }
79
80
    /**
81
     * @return array
82
     */
83
    public function getValues()
84
    {
85
        return $this->values;
86
    }
87
88
    /**
89
     * @param $value
90 3
     *
91
     * @return bool|null
92 3
     */
93
    protected function getFormattedValue($value)
94
    {
95
        $value = trim($value);
96
97
        if (!$this->isCaseSensitive()) {
98
            $value = mb_strtolower($value);
99
        }
100 3
101
        if (isset($this->values[$value])) {
102 3
            return $this->values[$value];
103
        }
104 3
105 3
        return $this->isNullable() ? null : false;
106 2
    }
107
108
    /**
109 3
     * @param bool $caseSensitive
110 3
     *
111
     * @return BooleanFormatter
112
     */
113
    public function setCaseSensitive($caseSensitive)
114 2
    {
115
        $this->caseSensitive = $caseSensitive;
116
117
        return $this;
118
    }
119
120
    /**
121
     * @return bool
122
     */
123
    public function isCaseSensitive()
124
    {
125
        return $this->caseSensitive;
126
    }
127
128
    /**
129
     * @param bool $nullable
130
     *
131
     * @return BooleanFormatter
132
     */
133
    public function setNullable($nullable)
134
    {
135
        $this->nullable = (bool)$nullable;
136
137
        return $this;
138
    }
139
140
    /**
141
     * @return bool
142
     */
143
    public function isNullable()
144
    {
145
        return $this->nullable;
146
    }
147
}
148