From ba29bb3820d56f6c1f1c4acd4298c2d00da61603 Mon Sep 17 00:00:00 2001 From: Michael Dowling Date: Thu, 7 Apr 2011 09:54:43 -0500 Subject: [PATCH] [Service] Adding ArrayAccess interface to ServiceBuilder --- src/Guzzle/Service/ServiceBuilder.php | 57 ++++++++++++++++++- .../Tests/Service/ServiceBuilderTest.php | 21 +++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/Guzzle/Service/ServiceBuilder.php b/src/Guzzle/Service/ServiceBuilder.php index 3dc1e8cf..15b2088b 100644 --- a/src/Guzzle/Service/ServiceBuilder.php +++ b/src/Guzzle/Service/ServiceBuilder.php @@ -14,7 +14,7 @@ use Guzzle\Common\Cache\CacheAdapterInterface; * * @author michael@guzzlephp.org */ -class ServiceBuilder +class ServiceBuilder implements \ArrayAccess { /** * @var array Service builder configuration data @@ -134,4 +134,59 @@ class ServiceBuilder return $client; } + + /** + * Register a client by name with the service builder + * + * @param string $offset Name of the client to register + * @param Client $value Client to register + * + * @return ServiceBuilder + */ + public function offsetSet($offset, $value) + { + $this->builderConfig[$offset] = $value; + + return $this; + } + + /** + * Remove a registered client by name + * + * @param string $offset Client to remove by name + * + * @return ServiceBuilder + */ + public function offsetUnset($offset) + { + if (isset($this->builderConfig[$offset])) { + unset($this->builderConfig[$offset]); + } + + return $this; + } + + /** + * Check if a client is registered with the service builder by name + * + * @param string $offset Name to check to see if a client exists + * + * @return bool + */ + public function offsetExists($offset) + { + return isset($this->builderConfig[$offset]); + } + + /** + * Get a registered client by name + * + * @param string $offset Registered client name to retrieve + * + * @return Client + */ + public function offsetGet($offset) + { + return $this->get($offset); + } } \ No newline at end of file diff --git a/tests/Guzzle/Tests/Service/ServiceBuilderTest.php b/tests/Guzzle/Tests/Service/ServiceBuilderTest.php index feeeb377..352f51f1 100644 --- a/tests/Guzzle/Tests/Service/ServiceBuilderTest.php +++ b/tests/Guzzle/Tests/Service/ServiceBuilderTest.php @@ -9,6 +9,7 @@ namespace Guzzle\Tests\Service; use Doctrine\Common\Cache\ArrayCache; use Guzzle\Common\Cache\DoctrineCacheAdapter; use Guzzle\Service\ServiceBuilder; +use Guzzle\Service\Client; /** * @author Michael Dowling @@ -207,4 +208,24 @@ EOT; $c = $s->get('michael.mock'); $this->assertType('Guzzle\\Tests\\Service\\Mock\\MockClient', $c); } + + /** + * @covers Guzzle\Service\ServiceBuilder::offsetSet + * @covers Guzzle\Service\ServiceBuilder::offsetGet + * @covers Guzzle\Service\ServiceBuilder::offsetUnset + * @covers Guzzle\Service\ServiceBuilder::offsetExists + */ + public function testUsedAsArray() + { + $b = ServiceBuilder::factory($this->tempFile); + $this->assertTrue($b->offsetExists('michael.mock')); + $this->assertFalse($b->offsetExists('not_there')); + $this->assertType('Guzzle\\Service\\Client', $b['michael.mock']); + + unset($b['michael.mock']); + $this->assertFalse($b->offsetExists('michael.mock')); + + $b['michael.mock'] = new Client('http://www.test.com/'); + $this->assertType('Guzzle\\Service\\Client', $b['michael.mock']); + } } \ No newline at end of file