Skip to content

Commit f4232a5

Browse files
authored
Do not use anymore child matcher errors in Json/XML matchers (#172)
* Simplified factory and make explicit dependency from JSON/XML from Array matcher * Simplified SimpleFactory * Deprecated SimpleFactory in favor of MatcherFactory * Do not use anymore child matcher errors in Json/XML matchers
1 parent 84e17ab commit f4232a5

16 files changed

+172
-181
lines changed

README.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ if (!PHPMatcher::match("lorem ipsum dolor", "@string@", $error)) {
4545
```php
4646
<?php
4747

48-
use Coduo\PHPMatcher\Factory\SimpleFactory;
48+
use Coduo\PHPMatcher\Factory\MatcherFactory;
4949

50-
$factory = new SimpleFactory();
50+
$factory = new MatcherFactory();
5151
$matcher = $factory->createMatcher();
5252

5353
$match = $matcher->match("lorem ipsum dolor", "@string@");
@@ -98,9 +98,9 @@ $matcher->getError(); // returns null or error message
9898
```php
9999
<?php
100100

101-
use Coduo\PHPMatcher\Factory\SimpleFactory;
101+
use Coduo\PHPMatcher\Factory\MatcherFactory;
102102

103-
$factory = new SimpleFactory();
103+
$factory = new MatcherFactory();
104104
$matcher = $factory->createMatcher();
105105

106106
$matcher->match(1, 1);
@@ -112,9 +112,9 @@ $matcher->match('string', 'string');
112112
```php
113113
<?php
114114

115-
use Coduo\PHPMatcher\Factory\SimpleFactory;
115+
use Coduo\PHPMatcher\Factory\MatcherFactory;
116116

117-
$factory = new SimpleFactory();
117+
$factory = new MatcherFactory();
118118
$matcher = $factory->createMatcher();
119119

120120
$matcher->match('Norbert', '@string@');
@@ -127,9 +127,9 @@ $matcher->match("lorem ipsum dolor", "@[email protected]('lorem').contains('ips
127127
```php
128128
<?php
129129

130-
use Coduo\PHPMatcher\Factory\SimpleFactory;
130+
use Coduo\PHPMatcher\Factory\MatcherFactory;
131131

132-
$factory = new SimpleFactory();
132+
$factory = new MatcherFactory();
133133
$matcher = $factory->createMatcher();
134134

135135
$matcher->match('2014-08-19', '@[email protected]()');
@@ -143,9 +143,9 @@ $matcher->match('2014-08-19', '@[email protected]().before("today").after("+ 10
143143
```php
144144
<?php
145145

146-
use Coduo\PHPMatcher\Factory\SimpleFactory;
146+
use Coduo\PHPMatcher\Factory\MatcherFactory;
147147

148-
$factory = new SimpleFactory();
148+
$factory = new MatcherFactory();
149149
$matcher = $factory->createMatcher();
150150

151151
$matcher->match(100, '@integer@');
@@ -158,9 +158,9 @@ $matcher->match(100, '@[email protected](200).greaterThan(10)');
158158
```php
159159
<?php
160160

161-
use Coduo\PHPMatcher\Factory\SimpleFactory;
161+
use Coduo\PHPMatcher\Factory\MatcherFactory;
162162

163-
$factory = new SimpleFactory();
163+
$factory = new MatcherFactory();
164164
$matcher = $factory->createMatcher();
165165

166166
$matcher->match(100, '@number@');
@@ -175,9 +175,9 @@ $matcher->match(0b10100111001, '@number@');
175175
```php
176176
<?php
177177

178-
use Coduo\PHPMatcher\Factory\SimpleFactory;
178+
use Coduo\PHPMatcher\Factory\MatcherFactory;
179179

180-
$factory = new SimpleFactory();
180+
$factory = new MatcherFactory();
181181
$matcher = $factory->createMatcher();
182182

183183
$matcher->match(10.1, "@double@");
@@ -189,9 +189,9 @@ $matcher->match(10.1, "@[email protected](50.12).greaterThan(10)");
189189
```php
190190
<?php
191191

192-
use Coduo\PHPMatcher\Factory\SimpleFactory;
192+
use Coduo\PHPMatcher\Factory\MatcherFactory;
193193

194-
$factory = new SimpleFactory();
194+
$factory = new MatcherFactory();
195195
$matcher = $factory->createMatcher();
196196

197197
$matcher->match(true, "@boolean@");
@@ -203,9 +203,9 @@ $matcher->match(false, "@boolean@");
203203
```php
204204
<?php
205205

206-
use Coduo\PHPMatcher\Factory\SimpleFactory;
206+
use Coduo\PHPMatcher\Factory\MatcherFactory;
207207

208-
$factory = new SimpleFactory();
208+
$factory = new MatcherFactory();
209209
$matcher = $factory->createMatcher();
210210

211211
$matcher->match("@integer@", "@*@");
@@ -221,9 +221,9 @@ $matcher->match(new \stdClass, "@wildcard@");
221221
```php
222222
<?php
223223

224-
use Coduo\PHPMatcher\Factory\SimpleFactory;
224+
use Coduo\PHPMatcher\Factory\MatcherFactory;
225225

226-
$factory = new SimpleFactory();
226+
$factory = new MatcherFactory();
227227
$matcher = $factory->createMatcher();
228228

229229
$matcher->match(new \DateTime('2014-04-01'), "expr(value.format('Y-m-d') == '2014-04-01'");
@@ -235,9 +235,9 @@ $matcher->match("Norbert", "expr(value === 'Norbert')");
235235
```php
236236
<?php
237237

238-
use Coduo\PHPMatcher\Factory\SimpleFactory;
238+
use Coduo\PHPMatcher\Factory\MatcherFactory;
239239

240-
$factory = new SimpleFactory();
240+
$factory = new MatcherFactory();
241241
$matcher = $factory->createMatcher();
242242

243243
$matcher->match('9f4db639-0e87-4367-9beb-d64e3f42ae18', '@uuid@');
@@ -248,9 +248,9 @@ $matcher->match('9f4db639-0e87-4367-9beb-d64e3f42ae18', '@uuid@');
248248
```php
249249
<?php
250250

251-
use Coduo\PHPMatcher\Factory\SimpleFactory;
251+
use Coduo\PHPMatcher\Factory\MatcherFactory;
252252

253-
$factory = new SimpleFactory();
253+
$factory = new MatcherFactory();
254254
$matcher = $factory->createMatcher();
255255

256256
$matcher->match(
@@ -307,9 +307,9 @@ $matcher->match(
307307
```php
308308
<?php
309309

310-
use Coduo\PHPMatcher\Factory\SimpleFactory;
310+
use Coduo\PHPMatcher\Factory\MatcherFactory;
311311

312-
$factory = new SimpleFactory();
312+
$factory = new MatcherFactory();
313313
$matcher = $factory->createMatcher();
314314

315315
$matcher->match(
@@ -341,9 +341,9 @@ $matcher->match(
341341
```php
342342
<?php
343343

344-
use Coduo\PHPMatcher\Factory\SimpleFactory;
344+
use Coduo\PHPMatcher\Factory\MatcherFactory;
345345

346-
$factory = new SimpleFactory();
346+
$factory = new MatcherFactory();
347347
$matcher = $factory->createMatcher();
348348

349349
$matcher->match(
@@ -399,9 +399,9 @@ $matcher->match(
399399
```php
400400
<?php
401401

402-
use Coduo\PHPMatcher\Factory\SimpleFactory;
402+
use Coduo\PHPMatcher\Factory\MatcherFactory;
403403

404-
$factory = new SimpleFactory();
404+
$factory = new MatcherFactory();
405405
$matcher = $factory->createMatcher();
406406

407407
$matcher->match(<<<XML

src/Factory/MatcherFactory.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Coduo\PHPMatcher\Factory;
6+
7+
use Coduo\PHPMatcher\Factory;
8+
use Coduo\PHPMatcher\Lexer;
9+
use Coduo\PHPMatcher\Matcher;
10+
use Coduo\PHPMatcher\Parser;
11+
12+
final class MatcherFactory implements Factory
13+
{
14+
public function createMatcher() : Matcher
15+
{
16+
return new Matcher($this->buildMatchers($this->buildParser()));
17+
}
18+
19+
protected function buildMatchers(Parser $parser) : Matcher\ChainMatcher
20+
{
21+
$scalarMatchers = $this->buildScalarMatchers($parser);
22+
$arrayMatcher = $this->buildArrayMatcher($scalarMatchers, $parser);
23+
24+
$chainMatcher = new Matcher\ChainMatcher([
25+
$scalarMatchers,
26+
$arrayMatcher,
27+
new Matcher\OrMatcher($scalarMatchers),
28+
new Matcher\JsonMatcher($arrayMatcher),
29+
new Matcher\XmlMatcher($arrayMatcher),
30+
new Matcher\TextMatcher($scalarMatchers, $parser)
31+
]);
32+
33+
return $chainMatcher;
34+
}
35+
36+
protected function buildArrayMatcher(Matcher\ChainMatcher $scalarMatchers, Parser $parser) : Matcher\ArrayMatcher
37+
{
38+
$orMatcher = new Matcher\OrMatcher($scalarMatchers);
39+
$arrayMatcher = new Matcher\ArrayMatcher(
40+
new Matcher\ChainMatcher([
41+
$orMatcher,
42+
$scalarMatchers,
43+
new Matcher\TextMatcher($scalarMatchers, $parser)
44+
]),
45+
$parser
46+
);
47+
48+
return $arrayMatcher;
49+
}
50+
51+
protected function buildScalarMatchers(Parser $parser) : Matcher\ChainMatcher
52+
{
53+
return new Matcher\ChainMatcher([
54+
new Matcher\CallbackMatcher(),
55+
new Matcher\ExpressionMatcher(),
56+
new Matcher\NullMatcher(),
57+
new Matcher\StringMatcher($parser),
58+
new Matcher\IntegerMatcher($parser),
59+
new Matcher\BooleanMatcher($parser),
60+
new Matcher\DoubleMatcher($parser),
61+
new Matcher\NumberMatcher($parser),
62+
new Matcher\ScalarMatcher(),
63+
new Matcher\WildcardMatcher(),
64+
new Matcher\UuidMatcher($parser),
65+
new Matcher\JsonObjectMatcher($parser)
66+
]);
67+
}
68+
69+
protected function buildParser() : Parser
70+
{
71+
return new Parser(new Lexer(), new Parser\ExpanderInitializer());
72+
}
73+
}

src/Factory/SimpleFactory.php

Lines changed: 4 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -5,87 +5,15 @@
55
namespace Coduo\PHPMatcher\Factory;
66

77
use Coduo\PHPMatcher\Factory;
8-
use Coduo\PHPMatcher\Lexer;
98
use Coduo\PHPMatcher\Matcher;
10-
use Coduo\PHPMatcher\Parser;
119

10+
/**
11+
* @deprecated Please use \Coduo\PHPMatcher\Factory\MatcherFactory instead
12+
*/
1213
class SimpleFactory implements Factory
1314
{
14-
private $parser;
15-
1615
public function createMatcher() : Matcher
1716
{
18-
return new Matcher($this->buildMatchers());
19-
}
20-
21-
protected function buildMatchers() : Matcher\ChainMatcher
22-
{
23-
$scalarMatchers = $this->buildScalarMatchers();
24-
$orMatcher = $this->buildOrMatcher();
25-
26-
$chainMatcher = new Matcher\ChainMatcher([
27-
$scalarMatchers,
28-
$orMatcher,
29-
new Matcher\JsonMatcher($orMatcher, $this->buildParser()),
30-
new Matcher\XmlMatcher($orMatcher),
31-
new Matcher\TextMatcher($scalarMatchers, $this->buildParser())
32-
]);
33-
34-
return $chainMatcher;
35-
}
36-
37-
protected function buildOrMatcher() : Matcher\ChainMatcher
38-
{
39-
$scalarMatchers = $this->buildScalarMatchers();
40-
$orMatcher = new Matcher\OrMatcher($scalarMatchers);
41-
$arrayMatcher = new Matcher\ArrayMatcher(
42-
new Matcher\ChainMatcher([
43-
$orMatcher,
44-
$scalarMatchers,
45-
new Matcher\TextMatcher($scalarMatchers, $this->buildParser())
46-
]),
47-
$this->buildParser()
48-
);
49-
50-
$chainMatcher = new Matcher\ChainMatcher([
51-
$orMatcher,
52-
$arrayMatcher,
53-
]);
54-
55-
return $chainMatcher;
56-
}
57-
58-
/**
59-
* @return Matcher\ChainMatcher
60-
*/
61-
protected function buildScalarMatchers() : Matcher\ChainMatcher
62-
{
63-
$parser = $this->buildParser();
64-
65-
return new Matcher\ChainMatcher([
66-
new Matcher\CallbackMatcher(),
67-
new Matcher\ExpressionMatcher(),
68-
new Matcher\NullMatcher(),
69-
new Matcher\StringMatcher($parser),
70-
new Matcher\IntegerMatcher($parser),
71-
new Matcher\BooleanMatcher($parser),
72-
new Matcher\DoubleMatcher($parser),
73-
new Matcher\NumberMatcher($parser),
74-
new Matcher\ScalarMatcher(),
75-
new Matcher\WildcardMatcher(),
76-
new Matcher\UuidMatcher($parser),
77-
new Matcher\JsonObjectMatcher($parser)
78-
]);
79-
}
80-
81-
protected function buildParser() : Parser
82-
{
83-
if ($this->parser) {
84-
return $this->parser;
85-
}
86-
87-
$this->parser = new Parser(new Lexer(), new Parser\ExpanderInitializer());
88-
89-
return $this->parser;
17+
return (new MatcherFactory())->createMatcher();
9018
}
9119
}

0 commit comments

Comments
 (0)