/usr/share/php/Guzzle/Service/Builder/ServiceBuilder.php is in php-guzzle 3.7.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | <?php
namespace Guzzle\Service\Builder;
use Guzzle\Common\AbstractHasDispatcher;
use Guzzle\Service\ClientInterface;
use Guzzle\Service\Exception\ServiceBuilderException;
use Guzzle\Service\Exception\ServiceNotFoundException;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* {@inheritdoc}
*
* Clients and data can be set, retrieved, and removed by accessing the service builder like an associative array.
*/
class ServiceBuilder extends AbstractHasDispatcher implements ServiceBuilderInterface, \ArrayAccess, \Serializable
{
/** @var array Service builder configuration data */
protected $builderConfig = array();
/** @var array Instantiated client objects */
protected $clients = array();
/** @var ServiceBuilderLoader Cached instance of the service builder loader */
protected static $cachedFactory;
/** @var array Plugins to attach to each client created by the service builder */
protected $plugins = array();
/**
* Create a new ServiceBuilder using configuration data sourced from an
* array, .js|.json or .php file.
*
* @param array|string $config The full path to an .json|.js or .php file, or an associative array
* @param array $globalParameters Array of global parameters to pass to every service as it is instantiated.
*
* @return ServiceBuilderInterface
* @throws ServiceBuilderException if a file cannot be opened
* @throws ServiceNotFoundException when trying to extend a missing client
*/
public static function factory($config = null, array $globalParameters = array())
{
// @codeCoverageIgnoreStart
if (!static::$cachedFactory) {
static::$cachedFactory = new ServiceBuilderLoader();
}
// @codeCoverageIgnoreEnd
return self::$cachedFactory->load($config, $globalParameters);
}
/**
* @param array $serviceBuilderConfig Service configuration settings:
* - name: Name of the service
* - class: Client class to instantiate using a factory method
* - params: array of key value pair configuration settings for the builder
*/
public function __construct(array $serviceBuilderConfig = array())
{
$this->builderConfig = $serviceBuilderConfig;
}
public static function getAllEvents()
{
return array('service_builder.create_client');
}
public function unserialize($serialized)
{
$this->builderConfig = json_decode($serialized, true);
}
public function serialize()
{
return json_encode($this->builderConfig);
}
/**
* Attach a plugin to every client created by the builder
*
* @param EventSubscriberInterface $plugin Plugin to attach to each client
*
* @return self
*/
public function addGlobalPlugin(EventSubscriberInterface $plugin)
{
$this->plugins[] = $plugin;
return $this;
}
/**
* Get data from the service builder without triggering the building of a service
*
* @param string $name Name of the service to retrieve
*
* @return array|null
*/
public function getData($name)
{
return isset($this->builderConfig[$name]) ? $this->builderConfig[$name] : null;
}
public function get($name, $throwAway = false)
{
if (!isset($this->builderConfig[$name])) {
// Check to see if arbitrary data is being referenced
if (isset($this->clients[$name])) {
return $this->clients[$name];
}
// Check aliases and return a match if found
foreach ($this->builderConfig as $actualName => $config) {
if (isset($config['alias']) && $config['alias'] == $name) {
return $this->get($actualName, $throwAway);
}
}
throw new ServiceNotFoundException('No service is registered as ' . $name);
}
if (!$throwAway && isset($this->clients[$name])) {
return $this->clients[$name];
}
$builder =& $this->builderConfig[$name];
// Convert references to the actual client
foreach ($builder['params'] as &$v) {
if (is_string($v) && substr($v, 0, 1) == '{' && substr($v, -1) == '}') {
$v = $this->get(trim($v, '{} '));
}
}
// Get the configured parameters and merge in any parameters provided for throw-away clients
$config = $builder['params'];
if (is_array($throwAway)) {
$config = $throwAway + $config;
}
$client = $builder['class']::factory($config);
if (!$throwAway) {
$this->clients[$name] = $client;
}
if ($client instanceof ClientInterface) {
foreach ($this->plugins as $plugin) {
$client->addSubscriber($plugin);
}
// Dispatch an event letting listeners know a client was created
$this->dispatch('service_builder.create_client', array('client' => $client));
}
return $client;
}
public function set($key, $service)
{
if (is_array($service) && isset($service['class']) && isset($service['params'])) {
$this->builderConfig[$key] = $service;
} else {
$this->clients[$key] = $service;
}
return $this;
}
public function offsetSet($offset, $value)
{
$this->set($offset, $value);
}
public function offsetUnset($offset)
{
unset($this->builderConfig[$offset]);
unset($this->clients[$offset]);
}
public function offsetExists($offset)
{
return isset($this->builderConfig[$offset]) || isset($this->clients[$offset]);
}
public function offsetGet($offset)
{
return $this->get($offset);
}
}
|