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\factory;
12:
13: use expect\MatcherContainer;
14: use expect\MatcherFactory;
15:
16: /**
17: * Default factory of matcher.
18: *
19: * <code>
20: * $dict = new MatcherDictionary([
21: * 'toEqual' => new MatcherClass('\\expect\\matcher', 'ToEqual')
22: * ]);
23: * $factory = new DefaultMatcherFactory($dict);
24: * $matcher = $factory->create('toEqual', [ 'foo' ]); //return \expect\matcher\ToEqual instance
25: * </code>
26: *
27: * @author Noritaka Horio <holy.shared.design@gmail.com>
28: * @copyright Noritaka Horio <holy.shared.design@gmail.com>
29: *
30: * @see \expect\MatcherDictionary
31: * @see \expect\package\MatcherClass
32: */
33: class DefaultMatcherFactory implements MatcherFactory
34: {
35: /**
36: * @var \expect\MatcherContainer
37: */
38: private $container;
39:
40: /**
41: * @param \expect\MatcherContainer $container macther container
42: */
43: public function __construct(MatcherContainer $container)
44: {
45: $this->container = $container;
46: }
47:
48: /**
49: * {@inheritdoc}
50: */
51: public function create($name, array $arguments = [])
52: {
53: $matcherClass = $this->container->get($name);
54:
55: if (count($arguments) <= 1) {
56: $matcher = $matcherClass->newInstance($arguments);
57: } else {
58: $matcher = $matcherClass->newInstance([$arguments]);
59: }
60:
61: return $matcher;
62: }
63: }
64: