Skip to content

Commit 90ab336

Browse files
committed
Add createFromConfig factory methods
This little bit of syntactical sugar makes it cleaner to use the Config class to load the system resolver configuration. Which right now is limited to only one nameserver. By introducing this factory method completing the implementation in #131 will also allow for instant multiple server support out of the box without any need for users to change code on their end to implement it.
1 parent c7b1105 commit 90ab336

File tree

9 files changed

+59
-32
lines changed

9 files changed

+59
-32
lines changed

README.md

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,8 @@ names, baby!
3535
```php
3636
$loop = React\EventLoop\Factory::create();
3737

38-
$config = React\Dns\Config\Config::loadSystemConfigBlocking();
39-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
40-
4138
$factory = new React\Dns\Resolver\Factory();
42-
$dns = $factory->create($server, $loop);
39+
$dns = $factory->createFromConfig(React\Dns\Config\Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
4340

4441
$dns->resolve('igor.io')->then(function ($ip) {
4542
echo "Host: $ip\n";
@@ -72,11 +69,8 @@ You can cache results by configuring the resolver to use a `CachedExecutor`:
7269
```php
7370
$loop = React\EventLoop\Factory::create();
7471

75-
$config = React\Dns\Config\Config::loadSystemConfigBlocking();
76-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
77-
7872
$factory = new React\Dns\Resolver\Factory();
79-
$dns = $factory->createCached($server, $loop);
73+
$dns = $factory->createCachedFromConfig(React\Dns\Config\Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
8074

8175
$dns->resolve('igor.io')->then(function ($ip) {
8276
echo "Host: $ip\n";

examples/01-one.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77

88
$loop = React\EventLoop\Factory::create();
99

10-
$config = Config::loadSystemConfigBlocking();
11-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
12-
1310
$factory = new Factory();
14-
$resolver = $factory->create($server, $loop);
11+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1512

1613
$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
1714

examples/02-concurrent.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77

88
$loop = React\EventLoop\Factory::create();
99

10-
$config = Config::loadSystemConfigBlocking();
11-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
12-
1310
$factory = new Factory();
14-
$resolver = $factory->create($server, $loop);
11+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1512

1613
$names = array_slice($argv, 1);
1714
if (!$names) {

examples/03-cached.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,8 @@
77

88
$loop = React\EventLoop\Factory::create();
99

10-
$config = Config::loadSystemConfigBlocking();
11-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
12-
1310
$factory = new Factory();
14-
$resolver = $factory->createCached($server, $loop);
11+
$resolver = $factory->createCachedFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1512

1613
$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
1714

examples/11-all-ips.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@
88

99
$loop = React\EventLoop\Factory::create();
1010

11-
$config = Config::loadSystemConfigBlocking();
12-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
13-
1411
$factory = new Factory();
15-
$resolver = $factory->create($server, $loop);
12+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1613

1714
$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
1815

examples/12-all-types.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@
1010

1111
$loop = React\EventLoop\Factory::create();
1212

13-
$config = Config::loadSystemConfigBlocking();
14-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
15-
1613
$factory = new Factory();
17-
$resolver = $factory->create($server, $loop);
14+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1815

1916
$name = isset($argv[1]) ? $argv[1] : 'google.com';
2017
$type = constant('React\Dns\Model\Message::TYPE_' . (isset($argv[2]) ? $argv[2] : 'TXT'));

examples/13-reverse-dns.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,8 @@
88

99
$loop = React\EventLoop\Factory::create();
1010

11-
$config = Config::loadSystemConfigBlocking();
12-
$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
13-
1411
$factory = new Factory();
15-
$resolver = $factory->create($server, $loop);
12+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8');
1613

1714
$ip = isset($argv[1]) ? $argv[1] : '8.8.8.8';
1815

src/Resolver/Factory.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use React\Cache\ArrayCache;
66
use React\Cache\CacheInterface;
7+
use React\Dns\Config\Config;
78
use React\Dns\Config\HostsFile;
89
use React\Dns\Query\CachingExecutor;
910
use React\Dns\Query\CoopExecutor;
@@ -18,6 +19,29 @@
1819

1920
final class Factory
2021
{
22+
/**
23+
* @param Config $config
24+
* @param LoopInterface $loop
25+
* @param string $fallbackNameserver
26+
* @return \React\Dns\Resolver\ResolverInterface
27+
*/
28+
public function createFromConfig(Config $config, LoopInterface $loop, $fallbackNameserver)
29+
{
30+
return self::create($config->nameservers ? reset($config->nameservers) : $fallbackNameserver, $loop);
31+
}
32+
33+
/**
34+
* @param Config $config
35+
* @param LoopInterface $loop
36+
* @param string $fallbackNameserver
37+
* @param ?CacheInterface $cache
38+
* @return \React\Dns\Resolver\ResolverInterface
39+
*/
40+
public function createCachedFromConfig(Config $config, LoopInterface $loop, $fallbackNameserver, CacheInterface $cache = null)
41+
{
42+
return self::createCached($config->nameservers ? reset($config->nameservers) : $fallbackNameserver, $loop, $cache);
43+
}
44+
2145
/**
2246
* @param string $nameserver
2347
* @param LoopInterface $loop

tests/Resolver/FactoryTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,24 @@
22

33
namespace React\Tests\Dns\Resolver;
44

5+
use React\Dns\Config\Config;
56
use React\Dns\Resolver\Factory;
67
use React\Tests\Dns\TestCase;
78
use React\Dns\Query\HostsFileExecutor;
89

910
class FactoryTest extends TestCase
1011
{
12+
/** @test */
13+
public function createFromConfigShouldCreateResolver()
14+
{
15+
$loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
16+
17+
$factory = new Factory();
18+
$resolver = $factory->createFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8:53');
19+
20+
$this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
21+
}
22+
1123
/** @test */
1224
public function createShouldCreateResolver()
1325
{
@@ -159,6 +171,21 @@ public function createCachedShouldCreateResolverWithCachingExecutor()
159171
$this->assertInstanceOf('React\Cache\ArrayCache', $cache);
160172
}
161173

174+
/** @test */
175+
public function createCachedFromConfigShouldCreateResolverWithCachingExecutor()
176+
{
177+
$loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
178+
179+
$factory = new Factory();
180+
$resolver = $factory->createCachedFromConfig(Config::loadSystemConfigBlocking(), $loop, '8.8.8.8:53');
181+
182+
$this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
183+
$executor = $this->getResolverPrivateExecutor($resolver);
184+
$this->assertInstanceOf('React\Dns\Query\CachingExecutor', $executor);
185+
$cache = $this->getCachingExecutorPrivateMemberValue($executor, 'cache');
186+
$this->assertInstanceOf('React\Cache\ArrayCache', $cache);
187+
}
188+
162189
/** @test */
163190
public function createCachedShouldCreateResolverWithCachingExecutorWithCustomCache()
164191
{

0 commit comments

Comments
 (0)