Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
WithAssignedField
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
1 / 1
 assign
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace Verja;
4
5trait WithAssignedField
6{
7    /** @var Field */
8    protected $field;
9
10    /**
11     * Assign $this to $field
12     *
13     * Clones $this when already assigned.
14     *
15     * @param Field $field
16     * @return $this
17     */
18    public function assign(Field $field)
19    {
20        if ($this->field !== null && $this->field !== $field) {
21            // already assigned - clone me and assign $field to the clone
22            $myField = $this->field;
23            $this->field = null;
24            $clone = clone $this;
25            $this->field = $myField;
26
27            return $clone->assign($field);
28        }
29
30        $this->field = $field;
31        return $this;
32    }
33}