1: <?php
2:
3: /**
4: * This file is part of expect package.
5: *
6: * (c) Noritaka Horio <holy.shared.design@gmail.com>
7: *
8: * This source file is subject to the MIT license that is bundled
9: * with this source code in the file LICENSE.
10: */
11: namespace expect;
12:
13: use expect\registry\MatcherNotRegisteredException;
14:
15: /**
16: * Implementation of container.
17: *
18: * @author Noritaka Horio <holy.shared.design@gmail.com>
19: * @copyright Noritaka Horio <holy.shared.design@gmail.com>
20: *
21: * @see \expect\MatcherContainer
22: */
23: trait MatcherLookupTable
24: {
25: /**
26: * Dictionary of matcher class.
27: *
28: * @var \expect\Dictionary
29: */
30: private $matchers;
31:
32: /**
33: * {@inheritdoc}
34: */
35: public function has($name)
36: {
37: return $this->matchers->containsKey($name);
38: }
39:
40: /**
41: * Find the matcher class by name.
42: * Returns true if it is not found.
43: *
44: * @param string $name macther name
45: *
46: * @return bool
47: */
48: public function hasNot($name)
49: {
50: return $this->has($name) === false;
51: }
52:
53: /**
54: * {@inheritdoc}
55: */
56: public function get($name)
57: {
58: if ($this->hasNot($name)) {
59: throw new MatcherNotRegisteredException("$name is not registered");
60: }
61:
62: $matcherClass = $this->matchers->get($name);
63:
64: return $matcherClass;
65: }
66: }
67: