Skip to content

Commit

Permalink
Switch to returning awesome promises
Browse files Browse the repository at this point in the history
  • Loading branch information
igorw committed Nov 8, 2012
1 parent 3750408 commit e1bc212
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 23 deletions.
8 changes: 5 additions & 3 deletions README.md
Expand Up @@ -22,9 +22,11 @@ The recommended way to install Wisdom is through
<?php

$wisdom = new Wisdom($client);
$wisdom->check('umpirsky.com', function ($domain, $available) {
printf('Domain %s is %s.', $domain, $available ? 'available' : 'taken');
});
$wisdom
->check('umpirsky.com')
->then(function ($available) use ($domain) {
printf('Domain %s is %s.', $domain, $available ? 'available' : 'taken');
});

// Outputs:
// Domain umpirsky.com is taken.
Expand Down
23 changes: 14 additions & 9 deletions examples/check.php
Expand Up @@ -14,22 +14,27 @@
$loop = React\EventLoop\Factory::create();
$factory = new React\Dns\Resolver\Factory();
$resolver = $factory->create('8.8.8.8', $loop);

$connFactory = function ($ip) use ($loop) {
$fd = stream_socket_client("tcp://$ip:43");

return new React\Socket\Connection($fd, $loop);
};
$connFactory = new React\Whois\ConnectionFactory($loop);

$domains = array(
'umpirsky.com',
'umpirsky.net',
);

$wisdom = new Wisdom\Wisdom(new React\Whois\Client($resolver, $connFactory));
$wisdom->check($domains, function ($domain, $available) {
printf('Domain %s is %s.%s', $domain, $available ? 'available' : 'taken', PHP_EOL);
});
$wisdom
->check('igor.io')
->then(function ($available) {
$domain = 'igor.io';
printf('Domain %s is %s.%s', $domain, $available ? 'available' : 'taken', PHP_EOL);
});
$wisdom
->checkAll($domains)
->then(function ($statuses) {
foreach ($statuses as $domain => $available) {
printf('Domain %s is %s.%s', $domain, $available ? 'available' : 'taken', PHP_EOL);
}
});

echo 'Checking domains...'.PHP_EOL;

Expand Down
28 changes: 21 additions & 7 deletions src/Wisdom/Wisdom.php
Expand Up @@ -11,6 +11,7 @@

namespace Wisdom;

use React\Promise\When;
use React\Whois\Client;
use Wisdom\Whois\Parser\Factory;

Expand Down Expand Up @@ -39,15 +40,28 @@ public function __construct(Client $client)
/**
* Checks domain availability.
*
* @param string|array $domains
* @param callable $callback
* @param string|array $domain
*/
public function check($domains, $callback)
public function check($domain)
{
foreach ((array) $domains as $domain) {
$this->client->query($domain, function ($result) use ($domain, $callback) {
$callback($domain, Factory::create($domain, $result)->isAvailable());
return $this->client
->query($domain)
->then(function ($result) use ($domain) {
return Factory::create($domain, $result)->isAvailable();
});
}
}

/**
* Checks domain availability of multiple domains.
*
* @param array $domains
*/
public function checkAll(array $domains)
{
return When::map($domains, array($this, 'check'))
->then(function ($statuses) use ($domains) {
return array_combine($domains, $statuses);
});

}
}
10 changes: 6 additions & 4 deletions tests/Wisdom/WisdomTest.php
Expand Up @@ -30,7 +30,7 @@ public function testCheck($domain, $whois, $available)
$callback
->expects($this->once())
->method('__invoke')
->with($domain, $available)
->with($available)
;

$resolver = $this->getMockBuilder('React\Dns\Resolver\Resolver')
Expand All @@ -48,7 +48,7 @@ public function testCheck($domain, $whois, $available)

$conn = $this->getMockBuilder('React\Whois\Stub\ConnectionStub')
->setMethods(array(
'isReadable', 'pause', 'getRemoteAddress', 'resume', 'pipe', 'close', 'isWritable', 'write', 'end',
'isReadable', 'pause', 'getRemoteAddress', 'resume', 'close', 'isWritable', 'write', 'end',
))
->getMock();

Expand All @@ -57,10 +57,12 @@ public function testCheck($domain, $whois, $available)
};

$wisdom = new Wisdom(new Client($resolver, $connFactory));
$wisdom->check($domain, $callback);
$wisdom
->check($domain)
->then($callback);

$conn->emit('data', array($whois));
$conn->emit('close');
$conn->emit('end');
}

public function testCheckDataProvider()
Expand Down

0 comments on commit e1bc212

Please sign in to comment.