Code Duplication    Length = 122-122 lines in 2 locations

generator/templates/static/BaseType.php 1 location

@@ 10-131 (lines=122) @@
7
use DateTimeInterface;
8
use Spatie\SchemaOrg\Exceptions\InvalidProperty;
9
10
abstract class BaseType implements Type, \ArrayAccess, \JsonSerializable
11
{
12
    /** @var array */
13
    protected $properties = [];
14
15
    public function getContext(): string
16
    {
17
        return 'http://schema.org';
18
    }
19
20
    public function getType(): string
21
    {
22
        return (new ReflectionClass($this))->getShortName();
23
    }
24
25
    public function setProperty(string $property, $value)
26
    {
27
        $this->properties[$property] = $value;
28
29
        return $this;
30
    }
31
32
    public function addProperties(array $properties)
33
    {
34
        foreach ($properties as $property => $value) {
35
            $this->setProperty($property, $value);
36
        }
37
38
        return $this;
39
    }
40
41
    public function if($condition, $callback)
42
    {
43
        if ($condition) {
44
            $callback($this);
45
        }
46
47
        return $this;
48
    }
49
50
    public function getProperty(string $property, $default = null)
51
    {
52
        return $this->properties[$property] ?? $default;
53
    }
54
55
    public function getProperties(): array
56
    {
57
        return $this->properties;
58
    }
59
60
    public function offsetExists($offset)
61
    {
62
        return array_key_exists($offset, $this->properties);
63
    }
64
65
    public function offsetGet($offset)
66
    {
67
        return $this->getProperty($offset);
68
    }
69
70
    public function offsetSet($offset, $value)
71
    {
72
        $this->setProperty($offset, $value);
73
    }
74
75
    public function offsetUnset($offset)
76
    {
77
        unset($this->properties[$offset]);
78
    }
79
80
    public function toArray(): array
81
    {
82
        $properties = $this->serializeProperty($this->getProperties());
83
84
        return [
85
            '@context' => $this->getContext(),
86
            '@type' => $this->getType(),
87
        ] + $properties;
88
    }
89
90
    protected function serializeProperty($property)
91
    {
92
        if (is_array($property)) {
93
            return array_map([$this, 'serializeProperty'], $property);
94
        }
95
96
        if ($property instanceof Type) {
97
            $property = $property->toArray();
98
            unset($property['@context']);
99
        }
100
101
        if ($property instanceof DateTimeInterface) {
102
            $property = $property->format(DateTime::ATOM);
103
        }
104
105
        if (is_object($property)) {
106
            throw new InvalidProperty();
107
        }
108
109
        return $property;
110
    }
111
112
    public function toScript(): string
113
    {
114
        return '<script type="application/ld+json">'.json_encode($this->toArray(), JSON_UNESCAPED_UNICODE).'</script>';
115
    }
116
117
    public function jsonSerialize()
118
    {
119
        return $this->toArray();
120
    }
121
122
    public function __call(string $method, array $arguments)
123
    {
124
        return $this->setProperty($method, $arguments[0] ?? '');
125
    }
126
127
    public function __toString(): string
128
    {
129
        return $this->toScript();
130
    }
131
}
132

src/BaseType.php 1 location

@@ 10-131 (lines=122) @@
7
use DateTimeInterface;
8
use Spatie\SchemaOrg\Exceptions\InvalidProperty;
9
10
abstract class BaseType implements Type, \ArrayAccess, \JsonSerializable
11
{
12
    /** @var array */
13
    protected $properties = [];
14
15
    public function getContext(): string
16
    {
17
        return 'https://schema.org';
18
    }
19
20
    public function getType(): string
21
    {
22
        return (new ReflectionClass($this))->getShortName();
23
    }
24
25
    public function setProperty(string $property, $value)
26
    {
27
        $this->properties[$property] = $value;
28
29
        return $this;
30
    }
31
32
    public function addProperties(array $properties)
33
    {
34
        foreach ($properties as $property => $value) {
35
            $this->setProperty($property, $value);
36
        }
37
38
        return $this;
39
    }
40
41
    public function if($condition, $callback)
42
    {
43
        if ($condition) {
44
            $callback($this);
45
        }
46
47
        return $this;
48
    }
49
50
    public function getProperty(string $property, $default = null)
51
    {
52
        return $this->properties[$property] ?? $default;
53
    }
54
55
    public function getProperties(): array
56
    {
57
        return $this->properties;
58
    }
59
60
    public function offsetExists($offset)
61
    {
62
        return array_key_exists($offset, $this->properties);
63
    }
64
65
    public function offsetGet($offset)
66
    {
67
        return $this->getProperty($offset);
68
    }
69
70
    public function offsetSet($offset, $value)
71
    {
72
        $this->setProperty($offset, $value);
73
    }
74
75
    public function offsetUnset($offset)
76
    {
77
        unset($this->properties[$offset]);
78
    }
79
80
    public function toArray(): array
81
    {
82
        $properties = $this->serializeProperty($this->getProperties());
83
84
        return [
85
            '@context' => $this->getContext(),
86
            '@type' => $this->getType(),
87
        ] + $properties;
88
    }
89
90
    protected function serializeProperty($property)
91
    {
92
        if (is_array($property)) {
93
            return array_map([$this, 'serializeProperty'], $property);
94
        }
95
96
        if ($property instanceof Type) {
97
            $property = $property->toArray();
98
            unset($property['@context']);
99
        }
100
101
        if ($property instanceof DateTimeInterface) {
102
            $property = $property->format(DateTime::ATOM);
103
        }
104
105
        if (is_object($property)) {
106
            throw new InvalidProperty();
107
        }
108
109
        return $property;
110
    }
111
112
    public function toScript(): string
113
    {
114
        return '<script type="application/ld+json">'.json_encode($this->toArray(), JSON_UNESCAPED_UNICODE).'</script>';
115
    }
116
117
    public function jsonSerialize()
118
    {
119
        return $this->toArray();
120
    }
121
122
    public function __call(string $method, array $arguments)
123
    {
124
        return $this->setProperty($method, $arguments[0] ?? '');
125
    }
126
127
    public function __toString(): string
128
    {
129
        return $this->toScript();
130
    }
131
}
132