Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
47.62% covered (danger)
47.62%
10 / 21
20.00% covered (danger)
20.00%
2 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
EntitySchemaValue
47.62% covered (danger)
47.62%
10 / 21
20.00% covered (danger)
20.00%
2 / 10
42.17
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __serialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 serialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 __unserialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 unserialize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getType
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getValue
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 newFromArray
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
5
 getArrayValue
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getSchemaId
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php declare( strict_types=1 );
2
3namespace EntitySchema\Wikibase\DataValues;
4
5use DataValues\DataValueObject;
6use DataValues\IllegalValueException;
7use EntitySchema\Domain\Model\EntitySchemaId;
8use InvalidArgumentException;
9use Wikibase\DataModel\Entity\EntityIdValue;
10
11/**
12 * @license GPL-2.0-or-later
13 */
14class EntitySchemaValue extends DataValueObject {
15
16    public const TYPE = 'entity-schema';
17
18    private EntitySchemaId $id;
19
20    public function __construct( EntitySchemaId $id ) {
21        $this->id = $id;
22    }
23
24    public function __serialize(): array {
25        return [ 'entityId' => $this->id ];
26    }
27
28    /**
29     * @inheritDoc
30     * Serialization is required by SnakList to compare two snak values
31     * by the hash of their serialization. These values are not saved anywhere
32     * so Unserialize is never required.
33     */
34    public function serialize() {
35        return serialize( $this->id );
36    }
37
38    /**
39     * @param array $data The array representation of the object
40     * @return never-returns
41     */
42    public function __unserialize( array $data ) {
43        throw new \LogicException( 'Method not implemented' );
44    }
45
46    /**
47     * @param string $data The serialized representation of the object
48     * @return never-returns
49     */
50    public function unserialize( $data ): void {
51        throw new \LogicException( 'Method not implemented' );
52    }
53
54    /** @inheritDoc */
55    public static function getType() {
56        return EntityIdValue::getType();
57    }
58
59    /** @inheritDoc */
60    public function getValue() {
61        return $this;
62    }
63
64    /**
65     * Constructs a new instance from the provided data. Required for @see DataValueDeserializer.
66     * This is expected to round-trip with @see getArrayValue.
67     *
68     * @param array $value
69     * @return self
70     */
71    public static function newFromArray( $value ): self {
72        if ( !is_array( $value ) ) {
73            throw new IllegalValueException( 'The value supplied must be an array' );
74        }
75        if ( !array_key_exists( 'id', $value ) ) {
76            throw new IllegalValueException( 'The value must contain an "id" key' );
77        }
78        if ( !is_string( $value['id'] ) ) {
79            throw new IllegalValueException( 'The "id" element must be a string' );
80        }
81
82        try {
83            return new self( new EntitySchemaId( $value['id'] ) );
84        } catch ( InvalidArgumentException $e ) {
85            throw new IllegalValueException( $e->getMessage(), 0, $e );
86        }
87    }
88
89    /** @inheritDoc */
90    public function getArrayValue(): array {
91        // similar to EntityIdValue::getArrayValue() but without deprecated numeric-id
92        return [
93            'id' => $this->id->getId(),
94            'entity-type' => self::TYPE,
95        ];
96    }
97
98    public function getSchemaId(): string {
99        return $this->id->getId();
100    }
101}