1 <?php
2 /**
3 * Copyright 2012-2014 Rackspace US, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 namespace OpenCloud\Common\Service;
19
20 use Guzzle\Http\ClientInterface;
21 use OpenCloud\Common\Exceptions\ServiceException;
22
23 /**
24 * This object is a factory for building Service objects.
25 */
26 class ServiceBuilder
27 {
28 /**
29 * Simple factory method for creating services.
30 *
31 * @param Client $client The HTTP client object
32 * @param string $class The class name of the service
33 * @param array $options The options.
34 * @return \OpenCloud\Common\Service\ServiceInterface
35 * @throws ServiceException
36 */
37 public static function factory(ClientInterface $client, $class, array $options = array())
38 {
39 $name = isset($options['name']) ? $options['name'] : null;
40 $urlType = isset($options['urlType']) ? $options['urlType'] : null;
41
42 if (isset($options['region'])) {
43 $region = $options['region'];
44 } elseif ($client->getUser() && ($defaultRegion = $client->getUser()->getDefaultRegion())) {
45 $region = $defaultRegion;
46 } else {
47 $region = null;
48 }
49
50 return new $class($client, null, $name, $region, $urlType);
51 }
52 }
53