Completed
Push — master ( 31551e...68bd4b )
by Andy
02:07
created

BooleanFormatter::setNullable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

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