Passed
Branch master (3daac1)
by Vincent
07:53
created

anonymous//src/Leaf/IntegerElementBuilder.php$0   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 4
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 3
c 0
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
1
<?php
2
3
namespace Bdf\Form\Leaf;
4
5
use Bdf\Form\Aggregate\FormBuilderInterface;
6
use Bdf\Form\ElementInterface;
7
use Bdf\Form\Transformer\DataTransformerAdapter;
8
use Bdf\Form\Transformer\TransformerInterface;
9
use Bdf\Form\Validator\ValueValidatorInterface;
10
use Symfony\Component\Form\Extension\Core\DataTransformer\IntegerToLocalizedStringTransformer;
11
12
/**
13
 * Builder for an integer element
14
 *
15
 * <code>
16
 * $builder->integer('id')
17
 *     ->required()
18
 *     ->min(15)
19
 *     ->raw()
20
 * ;
21
 * </code>
22
 *
23
 * @see IntegerElement
24
 * @see FormBuilderInterface::integer()
25
 *
26
 * @extends NumberElementBuilder<IntegerElement>
27
 */
28
class IntegerElementBuilder extends NumberElementBuilder
29
{
30
    /**
31
     * @var bool
32
     */
33
    private $grouping = false;
34
35
    /**
36
     * @var int
37
     */
38
    private $roundingMode = IntegerToLocalizedStringTransformer::ROUND_DOWN;
39
40
41
    /**
42
     * Enable grouping of thousands
43
     *
44
     * Note: The element must not in raw() mode to works
45
     *
46
     * @param bool $flag Enable or disable grouping
47
     *
48
     * @return $this
49
     */
50 1
    public function grouping(bool $flag = true): self
51
    {
52 1
        $this->grouping = $flag;
53
54 1
        return $this;
55
    }
56
57
    /**
58
     * How to round the decimal values
59
     *
60
     * Note: The element must not in raw() mode to works
61
     *
62
     * @param int $mode One of the IntegerToLocalizedStringTransformer::ROUND_ constant
63
     *
64
     * @return $this
65
     */
66 1
    public function roundingMode(int $mode): self
67
    {
68 1
        $this->roundingMode = $mode;
69
70 1
        return $this;
71
    }
72
73
    /**
74
     * {@inheritdoc}
75
     */
76 94
    protected function createElement(ValueValidatorInterface $validator, TransformerInterface $transformer): ElementInterface
77
    {
78 94
        return new IntegerElement($validator, $transformer, $this->getChoices());
79
    }
80
81
    /**
82
     * {@inheritdoc}
83
     */
84
    protected function numberTransformer(): TransformerInterface
85
    {
86
        // Handle null and scalar types
87
        return new DataTransformerAdapter(new class($this->grouping, $this->roundingMode) extends IntegerToLocalizedStringTransformer {
88 50
            public function reverseTransform($value)
89
            {
90 50
                return parent::reverseTransform(is_scalar($value) || $value === null ? (string) $value : $value);
91
            }
92
        });
93
    }
94
}
95