summaryrefslogtreecommitdiffstats
path: root/lib/SparkPost/APIResource.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/SparkPost/APIResource.php')
-rw-r--r--lib/SparkPost/APIResource.php150
1 files changed, 79 insertions, 71 deletions
diff --git a/lib/SparkPost/APIResource.php b/lib/SparkPost/APIResource.php
index 563a56e..0677b38 100644
--- a/lib/SparkPost/APIResource.php
+++ b/lib/SparkPost/APIResource.php
@@ -1,62 +1,61 @@
<?php
namespace SparkPost;
-use Ivory\HttpAdapter\HttpAdapterException;
-use SparkPost\SparkPost;
-
-
/**
- * @desc SDK interface for managing SparkPost API endpoints
+ * SDK interface for managing SparkPost API endpoints
*/
-class APIResource {
+class APIResource
+{
/**
- * @desc name of the API endpoint, mainly used for URL construction.
+ * Name of the API endpoint, mainly used for URL construction.
* This is public to provide an interface
- *
* @var string
*/
public $endpoint;
/**
- * @desc Mapping for values passed into the send method to the values needed for the respective API
+ * Mapping for values passed into the send method to the values needed for the respective API
* @var array
*/
protected static $parameterMappings = [];
/**
- * @desc Sets up default structure and default values for the model that is acceptable by the API
+ * Sets up default structure and default values for the model that is acceptable by the API
* @var array
*/
protected static $structure = [];
/**
- * @desc SparkPost reference for httpAdapters and configs
+ * SparkPost reference for httpAdapters and configs
*/
protected $sparkpost;
/**
- * @desc Initializes config and httpAdapter for use later.
- * @param $sparkpost SparkPost\SparkPost provides api configuration information
+ * Initializes config and httpAdapter for use later.
+ *
+ * @param $sparkpost \SparkPost\SparkPost provides api configuration information
*/
- public function __construct(SparkPost $sparkpost) {
+ public function __construct(SparkPost $sparkpost)
+ {
$this->sparkpost = $sparkpost;
}
/**
- * @desc Private Method helper to reference parameter mappings and set the right value for the right parameter
+ * Private Method helper to reference parameter mappings and set the right value for the right parameter
*
* @param array $model (pass by reference) the set of values to map
* @param string $mapKey a dot syntax path determining which value to set
* @param mixed $value value for the given path
*/
- protected function setMappedValue(&$model, $mapKey, $value) {
- //get mapping
- if( empty(static::$parameterMappings) ) {
+ protected function setMappedValue(&$model, $mapKey, $value)
+ {
+ // get mapping
+ if (empty(static::$parameterMappings)) {
// if parameterMappings is empty we can assume that no wrapper is defined
// for the current endpoint and we will use the mapKey to define the mappings directly
$mapPath = $mapKey;
- }elseif(array_key_exists($mapKey, static::$parameterMappings)) {
+ } elseif (array_key_exists($mapKey, static::$parameterMappings)) {
// use only defined parameter mappings to construct $model
$mapPath = static::$parameterMappings[$mapKey];
} else {
@@ -65,109 +64,120 @@ class APIResource {
$path = explode('.', $mapPath);
$temp = &$model;
- foreach( $path as $key ) {
- if( !isset($temp[$key]) ){
+ foreach ($path as $key) {
+ if (!isset($temp[$key])) {
$temp[$key] = null;
}
$temp = &$temp[$key];
}
$temp = $value;
-
}
/**
- * @desc maps values from the passed in model to those needed for the request
- * @param $requestConfig the passed in model
- * @param $model the set of defaults
+ * Maps values from the passed in model to those needed for the request
+ *
+ * @param array $requestConfig the passed in model
+ * @param array $model the set of defaults
* @return array A model ready for the body of a request
*/
- protected function buildRequestModel(Array $requestConfig, Array $model=[] ) {
- foreach($requestConfig as $key => $value) {
+ protected function buildRequestModel(array $requestConfig, array $model = [])
+ {
+ foreach ($requestConfig as $key => $value) {
$this->setMappedValue($model, $key, $value);
}
+
return $model;
}
/**
- * @desc posts to the api with a supplied body
- * @param body post body for the request
+ * Posts to the api with a supplied body
+ *
+ * @param array $body post body for the request
* @return array Result of the request
*/
- public function create(Array $body=[]) {
- return $this->callResource( 'post', null, ['body'=>$body]);
+ public function create(array $body = [])
+ {
+ return $this->callResource('post', null, ['body' => $body]);
}
/**
- * @desc Makes a put request to the api with a supplied body
- * @param body Put body for the request
+ * Makes a put request to the api with a supplied body
+ *
+ * @param string $resourcePath string resource path of specific resource
+ * @param array $body Put body for the request
* @return array Result of the request
*/
- public function update( $resourcePath, Array $body=[]) {
- return $this->callResource( 'put', $resourcePath, ['body'=>$body]);
+ public function update($resourcePath, array $body = [])
+ {
+ return $this->callResource('put', $resourcePath, ['body' => $body]);
}
/**
- * @desc Wrapper method for issuing GET request to current API endpoint
+ * Wrapper method for issuing GET request to current API endpoint
*
* @param string $resourcePath (optional) string resource path of specific resource
- * @param array $options (optional) query string parameters
+ * @param array $query (optional) query string parameters
* @return array Result of the request
*/
- public function get( $resourcePath=null, Array $query=[] ) {
- return $this->callResource( 'get', $resourcePath, ['query'=>$query] );
+ public function get($resourcePath = null, array $query = [])
+ {
+ return $this->callResource('get', $resourcePath, ['query' => $query]);
}
/**
- * @desc Wrapper method for issuing DELETE request to current API endpoint
+ * Wrapper method for issuing DELETE request to current API endpoint
*
* @param string $resourcePath (optional) string resource path of specific resource
- * @param array $options (optional) query string parameters
+ * @param array $query (optional) query string parameters
* @return array Result of the request
*/
- public function delete( $resourcePath=null, Array $query=[] ) {
- return $this->callResource( 'delete', $resourcePath, ['query'=>$query] );
+ public function delete($resourcePath = null, array $query = [])
+ {
+ return $this->callResource('delete', $resourcePath, ['query' => $query]);
}
-
/**
- * @desc assembles a URL for a request
+ * Assembles a URL for a request
+ *
* @param string $resourcePath path after the initial endpoint
- * @param array options array with an optional value of query with values to build a querystring from.
+ * @param array $options array with an optional value of query with values to build a querystring from.
* @return string the assembled URL
*/
- private function buildUrl($resourcePath, $options) {
- $url = join(['/', $this->endpoint, '/']);
- if (!is_null($resourcePath)){
+ private function buildUrl($resourcePath, $options)
+ {
+ $url = "/{$this->endpoint}/";
+ if (!is_null($resourcePath)) {
$url .= $resourcePath;
}
- if( !empty($options['query'])) {
+ if (!empty($options['query'])) {
$queryString = http_build_query($options['query']);
- $url .= '?'.$queryString;
+ $url .= '?' . $queryString;
}
return $url;
}
-
/**
- * @desc Prepares a body for put and post requests
- * @param array options array with an optional value of body with values to build a request body from.
+ * Prepares a body for put and post requests
+ *
+ * @param array $options array with an optional value of body with values to build a request body from.
* @return string|null A json encoded string or null if no body was provided
*/
- private function buildBody($options) {
+ private function buildBody($options)
+ {
$body = null;
- if( !empty($options['body']) ) {
+ if (!empty($options['body'])) {
$model = static::$structure;
- $requestModel = $this->buildRequestModel( $options['body'], $model );
+ $requestModel = $this->buildRequestModel($options['body'], $model);
$body = json_encode($requestModel);
}
+
return $body;
}
-
/**
- * @desc Private Method for issuing GET and DELETE request to current API endpoint
+ * Private Method for issuing GET and DELETE request to current API endpoint
*
* This method is responsible for getting the collection _and_
* a specific entity from the API endpoint
@@ -178,14 +188,16 @@ class APIResource {
* @param string $resourcePath (optional) string resource path of specific resource
* @param array $options (optional) query string parameters
* @return array Result set of action performed on resource
+ * @throws APIResponseException
*/
- private function callResource( $action, $resourcePath=null, $options=[] ) {
+ private function callResource($action, $resourcePath = null, $options = [])
+ {
$action = strtoupper($action); // normalize
$url = $this->buildUrl($resourcePath, $options);
$body = $this->buildBody($options);
- //make request
+ // make request
try {
$response = $this->sparkpost->httpAdapter->send($url, $action, $this->sparkpost->getHttpHeaders(), $body);
@@ -198,20 +210,16 @@ class APIResource {
if ($statusCode === 404) {
throw new APIResponseException('The specified resource does not exist', 404);
}
- throw new APIResponseException('Received bad response from ' . ucfirst($this->endpoint) . ' API: '. $statusCode );
+ throw new APIResponseException('Received bad response from ' . ucfirst($this->endpoint) . ' API: ' .
+ $statusCode);
}
- }
-
- /*
- * Configuration Errors, and a catch all for other errors
- */
- catch (\Exception $exception) {
- if($exception instanceof APIResponseException) {
+ } catch (\Exception $exception) { // Configuration Errors, and a catch all for other errors
+ if ($exception instanceof APIResponseException) {
throw $exception;
}
- throw new APIResponseException('Unable to contact ' . ucfirst($this->endpoint) . ' API: '. $exception->getMessage());
+ throw new APIResponseException('Unable to contact ' . ucfirst($this->endpoint) . ' API: ' .
+ $exception->getMessage());
}
}
-
}