Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
BNodeLabeler
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
2 / 2
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
4
 getLabel
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace Wikimedia\Purtle;
4
5use InvalidArgumentException;
6
7/**
8 * Helper class for generating labels for blank nodes.
9 *
10 * This serves as a holder for the bnode counter that can be shared between multiple RdfWriter
11 * instances, to avoid conflicting ids.
12 *
13 * @license GPL-2.0-or-later
14 * @author Daniel Kinzler
15 */
16class BNodeLabeler {
17
18    /**
19     * @var string
20     */
21    private $prefix;
22
23    /**
24     * @var int
25     */
26    private $counter;
27
28    /**
29     * @param string $prefix
30     * @param int $start
31     *
32     * @throws InvalidArgumentException
33     */
34    public function __construct( $prefix = 'genid', $start = 1 ) {
35        if ( !is_string( $prefix ) ) {
36            throw new InvalidArgumentException( '$prefix must be a string' );
37        }
38
39        if ( !is_int( $start ) || $start < 1 ) {
40            throw new InvalidArgumentException( '$start must be an int >= 1' );
41        }
42
43        $this->prefix = $prefix;
44        $this->counter = $start;
45    }
46
47    /**
48     * @param string|null $label node label; will be generated if not given.
49     *
50     * @return string
51     */
52    public function getLabel( $label = null ) {
53        if ( $label === null ) {
54            $label = $this->prefix . $this->counter;
55            $this->counter++;
56        }
57
58        return $label;
59    }
60
61}