From 79f8ca789d6070b94eee11f2453356a42f15e851 Mon Sep 17 00:00:00 2001 From: Kuvakin Sergey Date: Mon, 4 Dec 2017 17:13:06 +0300 Subject: [PATCH 1/5] refs #12958 --- .gitignore | 4 +- lib/Innometrics/Helper.php | 43 ++++++-- tests/Helper/Base.php | 1 + tests/Helper/HelperTest.php | 6 +- tests/Helper/SegmentsTest.php | 195 +++++++++++++++++----------------- 5 files changed, 142 insertions(+), 107 deletions(-) diff --git a/.gitignore b/.gitignore index 196ce38..8f5a06c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /docs/phpdoc-cache* /vendor -/cache \ No newline at end of file +/cache +composer.phar +phpunit.phar \ No newline at end of file diff --git a/lib/Innometrics/Helper.php b/lib/Innometrics/Helper.php index 2f915cf..b07b5a6 100644 --- a/lib/Innometrics/Helper.php +++ b/lib/Innometrics/Helper.php @@ -43,6 +43,12 @@ class Helper { */ protected $apiUrl = null; + /** + * Evaluation API url + * @var string + */ + protected $evaluationApiUrl = null; + /** * No cache flag * @var bool @@ -73,6 +79,7 @@ public function __construct($config = array()) { $this->validateConfig($config); $this->groupId = $config['groupId']; $this->apiUrl = $config['apiUrl']; + $this->evaluationApiUrl = $config['evaluationApiUrl']; $this->bucketName = $config['bucketName']; $this->appName = $config['appName']; $this->appKey = $config['appKey']; @@ -281,6 +288,14 @@ public function getApiHost () { return $this->apiUrl; } + /** + * Get evaluation Api url + * @return string + */ + public function getEvaluationApiHost () { + return $this->evaluationApiUrl; + } + /** * Build Url for API request to work with certain Profile * @@ -346,11 +361,15 @@ protected function getSegmentsUrl () { * @return string */ public function getSegmentEvaluationUrl ($params = array()) { + $typeSegmentEvaluation = $params['typeSegmentEvaluation']; + unset($params['typeSegmentEvaluation']); + return sprintf( - '%s/v1/companies/%s/buckets/%s/segment-evaluation?app_key=%s&%s', - $this->getApiHost(), + '%s/v1/companies/%s/buckets/%s/%s?app_key=%s&%s', + $this->getEvaluationApiHost(), $this->getCompany(), $this->getBucket(), + $typeSegmentEvaluation, $this->getAppKey(), http_build_query($params) ); @@ -569,9 +588,11 @@ public function evaluateProfileBySegment (Profile $profile, Segment $segment) { * @param string $segmentId * @return bool */ - public function evaluateProfileBySegmentId (Profile $profile, $segmentId) { + public function evaluateProfileBySegmentId (Profile $profile, $segmentIds) { + $segmentIds = is_array($segmentIds) ? $segmentIds : array($segmentIds); return $this->_evaluateProfileByParams($profile, array( - 'segment_id' => $segmentId + 'segment_id' => $segmentIds, + 'typeSegmentEvaluation' => 'segment-id-evaluation' )); } @@ -583,7 +604,8 @@ public function evaluateProfileBySegmentId (Profile $profile, $segmentId) { */ public function evaluateProfileByIql ($profile, $iql) { return $this->_evaluateProfileByParams($profile, array( - 'iql' => $iql + 'iql' => $iql, + 'typeSegmentEvaluation' => 'iql-evaluation' )); } @@ -792,7 +814,7 @@ protected function checkErrors ($response, $successCode = 200) { * @return bool */ protected function _evaluateProfileByParams (Profile $profile, $params) { - $result = null; + $results = null; $defParams = array( 'profile_id' => $profile->getId() ); @@ -808,11 +830,14 @@ protected function _evaluateProfileByParams (Profile $profile, $params) { $this->checkErrors($response); $body = $response['body']; - if (isset($body['segmentEvaluation']) && isset($body['segmentEvaluation']['result'])) { - $result = $body['segmentEvaluation']['result']; + if (isset($body['segmentEvaluation']) && isset($body['segmentEvaluation']['results'])) { + $results = $body['segmentEvaluation']['results']; + if (count($results) === 1) { + $results = $results[0]; + } } - return $result; + return $results; } /** diff --git a/tests/Helper/Base.php b/tests/Helper/Base.php index b38fef0..03470ad 100644 --- a/tests/Helper/Base.php +++ b/tests/Helper/Base.php @@ -15,6 +15,7 @@ class Base extends \PHPUnit_Framework_TestCase { 'appName' => 'appName', 'appKey' => 'appKey', 'apiUrl' => 'apiUrl', + 'evaluationApiUrl' => 'evaluationApiUrl', 'groupId' => 4, 'schedulerApiHost' => 'schedulerApiHost' ); diff --git a/tests/Helper/HelperTest.php b/tests/Helper/HelperTest.php index c2fbf18..50010ff 100644 --- a/tests/Helper/HelperTest.php +++ b/tests/Helper/HelperTest.php @@ -80,6 +80,7 @@ public function testShouldNotThrowErrorOnCorrectConfig () { 'appName' => 'appName', 'appKey' => 'appKey', 'apiUrl' => 'apiUrl', + 'evaluationApiUrl' => 'evaluationApiUrl', 'groupId' => 4, 'schedulerApiHost' => 'schedulerApiHost' )); @@ -89,6 +90,7 @@ public function testShouldNotThrowErrorOnCorrectConfig () { 'appName' => 'appName', 'appKey' => 'appKey', 'apiUrl' => 'apiUrl', + 'evaluationApiUrl' => 'evaluationApiUrl', 'groupId' => '42', 'schedulerApiHost' => 'schedulerApiHost' )); @@ -144,8 +146,8 @@ public function testShouldGenerateUrlsCorrectly () { ), array( 'method' => 'getSegmentEvaluationUrl', - 'arg' => array('param1' => 'value1'), - 'res' => 'apiUrl/v1/companies/4/buckets/bucketName/segment-evaluation?app_key=appKey¶m1=value1' + 'arg' => array('param1' => 'value1', 'typeSegmentEvaluation' => 'segment-id-evaluation'), + 'res' => 'evaluationApiUrl/v1/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey¶m1=value1' ), ); diff --git a/tests/Helper/SegmentsTest.php b/tests/Helper/SegmentsTest.php index 25d4a15..b254f82 100644 --- a/tests/Helper/SegmentsTest.php +++ b/tests/Helper/SegmentsTest.php @@ -9,29 +9,29 @@ use Innometrics\Segment; class SegmentsTest extends Base { - + public function testShouldMakeProperlyRequestToGetSettings () { - $helper = $this->createHelper(); - + $helper = $this->createHelper(); + $curlConfig = array(); - + $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) ->will($this->returnValue('')); - + $curlGetinfoMock = new \PHPUnit_Extensions_MockFunction('curl_getinfo', $helper); $curlGetinfoMock->expects($this->once()) - ->will($this->returnValue(200)); - + ->will($this->returnValue(200)); + $curlSetoptMock = new \PHPUnit_Extensions_MockFunction('curl_setopt', $helper); $curlSetoptMock->expects($this->any()) ->will($this->returnCallback(function($curl, $optName, $optValue) use (&$curlConfig) { $curlConfig[$optName] = $optValue; })); - + // Request to server $helper->getSegments(); - + $curlReferenceConfig = array(); $curlReferenceConfig[CURLOPT_URL] = 'apiUrl/v1/companies/4/buckets/bucketName/segments?app_key=appKey'; $curlReferenceConfig[CURLOPT_RETURNTRANSFER] = true; @@ -39,48 +39,48 @@ public function testShouldMakeProperlyRequestToGetSettings () { "Content-Type: application/json", "Accept: application/json" ); - + ksort($curlConfig); ksort($curlReferenceConfig); - + $this->assertEquals( $curlConfig, $curlReferenceConfig ); } - + /** * @expectedException ErrorException * @expectedExceptionMessage Server failed with status code 500: "Something is wrong there" - */ + */ public function testShouldErrorIfOccurredWhileGettingSegments () { - $helper = $this->createHelper(); + $helper = $this->createHelper(); $httpCode = 500; $errorMsg = 'Something is wrong there'; - + $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) ->will($this->returnValue(json_encode(array( 'statusCode' => $httpCode, 'message' => $errorMsg )))); - + $curlGetinfoMock = new \PHPUnit_Extensions_MockFunction('curl_getinfo', $helper); $curlGetinfoMock->expects($this->once()) - ->will($this->returnValue($httpCode)); - + ->will($this->returnValue($httpCode)); + $helper->getSegments(); } - + public function testShouldReturnArrayOfSegments () { $helper = $this->createHelper(); - + $httpCode = 200; - + $curlGetinfoMock = new \PHPUnit_Extensions_MockFunction('curl_getinfo', $helper); $curlGetinfoMock->expects($this->any()) ->will($this->returnValue($httpCode)); - + $bodies = array( array( 'body' => array( @@ -110,47 +110,47 @@ public function testShouldReturnArrayOfSegments () { 'count' => 0 ) ); - + foreach ($bodies as $body) { $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) - ->will($this->returnValue(json_encode($body['body']))); - + ->will($this->returnValue(json_encode($body['body']))); + $segments = $helper->getSegments(); - + $this->assertTrue(is_array($segments)); $this->assertEquals($body['count'], count($segments)); - + foreach ($segments as $sgm) { $this->assertInstanceOf('Innometrics\Segment', $sgm); } } - } - + } + public function testShouldReturnErrorIfInstanceErrorsWhileRequestToEvalProfile () { $helper = $this->createHelper(); $profile = $helper->createProfile('profile-id'); - + try { $helper->evaluateProfileBySegment($profile, true); } catch (\Exception $e) { $this->assertStringStartsWith('Argument 2 passed to Innometrics\Helper::evaluateProfileBySegment() must be an instance of Innometrics\Segment', $e->getMessage()); } - + try { $helper->evaluateProfileBySegment(true, true); } catch (\Exception $e) { $this->assertStringStartsWith('Argument 1 passed to Innometrics\Helper::evaluateProfileBySegment() must be an instance of Innometrics\Profile', $e->getMessage()); } } - + public function testShouldDelegateEvaluationFromProfileBySegment () { $config = $this->config; - + $helper = \Mockery::mock('Innometrics\Helper[evaluateProfileBySegmentId]', array( $config ))->makePartial(); - + $segment = new Segment(array( 'id' => "1", 'iql' => 'my-iql' @@ -162,145 +162,149 @@ public function testShouldDelegateEvaluationFromProfileBySegment () { ->once() ->andReturnUsing(function () { return true; - }); - + }); + $helper->evaluateProfileBySegment($profile, $segment); } - + public function testShouldDelegateEvaluationFromProfileByIql () { $config = $this->config; - + $helper = $this->getMock('Innometrics\Helper', array('_evaluateProfileByParams'), array($config)); - + $profile = $helper->createProfile('profile-id'); - + $segmentId = '1'; - + $helper ->expects($this->once()) ->method('_evaluateProfileByParams') ->with($this->equalTo($profile), $this->equalTo(array( - 'segment_id' => $segmentId - ))) + 'segment_id' => array($segmentId), + 'typeSegmentEvaluation' => 'segment-id-evaluation' + ))) ->will($this->returnValue(false)); $res = $helper->evaluateProfileBySegmentId($profile, $segmentId); - + $this->assertFalse($res); } - + public function testShouldDelegateEvaluationFromProfileBySegmentId () { $config = $this->config; - + $helper = $this->getMock('Innometrics\Helper', array('_evaluateProfileByParams'), array($config)); - + $profile = $helper->createProfile('profile-id'); - + $segmentIql = 'my-iql'; - + $helper ->expects($this->once()) ->method('_evaluateProfileByParams') ->with($this->equalTo($profile), $this->equalTo(array( - 'iql' => $segmentIql - ))) + 'iql' => $segmentIql, + 'typeSegmentEvaluation' => 'iql-evaluation' + ))) ->will($this->returnValue(true)); $res = $helper->evaluateProfileByIql($profile, $segmentIql); - + $this->assertTrue($res); } - + public function testShouldMakeProperlyRequestToEvalProfile () { $helper = $this->createHelper(); - + $profileId = 'profile-id'; - $profile = $helper->createProfile($profileId); - + $profile = $helper->createProfile($profileId); + $curlConfig = array(); - + $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) - ->will($this->returnValue(false)); - + ->will($this->returnValue(false)); + $curlSetoptMock = new \PHPUnit_Extensions_MockFunction('curl_setopt', $helper); $curlSetoptMock->expects($this->any()) ->will($this->returnCallback(function($curl, $optName, $optValue) use (&$curlConfig) { $curlConfig[$optName] = $optValue; })); - + $evalParams = array( - 'some' => 'params', - 'are' => 'here' + 'some' => 'params', + 'are' => 'here', + 'typeSegmentEvaluation' => 'segment-id-evaluation' ); - + try { $method = new \ReflectionMethod('Innometrics\Helper', '_evaluateProfileByParams'); $method->setAccessible(true); - $method->invoke($helper, $profile, $evalParams); + $method->invoke($helper, $profile, $evalParams); } catch (\Exception $ex) { $this->assertEquals('Unknown error', $ex->getMessage()); } - + $curlReferenceConfig = array(); - $curlReferenceConfig[CURLOPT_URL] = 'apiUrl/v1/companies/4/buckets/bucketName/segment-evaluation?app_key=appKey&some=params&are=here&profile_id=' . $profileId; + $curlReferenceConfig[CURLOPT_URL] = 'evaluationApiUrl/v1/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey&some=params&are=here&profile_id=' . $profileId; $curlReferenceConfig[CURLOPT_RETURNTRANSFER] = true; $curlReferenceConfig[CURLOPT_HTTPHEADER] = array( "Content-Type: application/json", "Accept: application/json" ); - + ksort($curlConfig); ksort($curlReferenceConfig); - + $this->assertSame( $curlConfig, $curlReferenceConfig ); } - + public function testShouldReturnErrorIfOccurredWhileRequestToEvalProfile () { $helper = $this->createHelper(); - + $httpCode = 500; $profileId = 'profile-id'; $profile = $helper->createProfile($profileId); $errorMsg = 'Something is wrong there'; - + $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) ->will($this->returnValue(json_encode(array( 'statusCode' => $httpCode, 'message' => $errorMsg - )))); - + )))); + $curlGetinfoMock = new \PHPUnit_Extensions_MockFunction('curl_getinfo', $helper); $curlGetinfoMock->expects($this->once()) - ->will($this->returnValue($httpCode)); - + ->will($this->returnValue($httpCode)); + try { $method = new \ReflectionMethod('Innometrics\Helper', '_evaluateProfileByParams'); $method->setAccessible(true); $method->invoke($helper, $profile, array( - 'segment_id' => '1' - )); + 'segment_id' => '1', + 'typeSegmentEvaluation' => 'segment-id-evaluation' + )); } catch (\Exception $ex) { $errMsg = sprintf('Server failed with status code %d: "%s"', $httpCode, $errorMsg); - + $this->assertEquals($errMsg, $ex->getMessage()); } - } - + } + public function testShouldReturnEvalProfileResult () { $helper = $this->createHelper(); - + $httpCode = 200; $profile = $helper->createProfile(); - + $curlGetinfoMock = new \PHPUnit_Extensions_MockFunction('curl_getinfo', $helper); $curlGetinfoMock->expects($this->any()) ->will($this->returnValue($httpCode)); - + $bodies = array( array( 'body' => array( @@ -308,31 +312,32 @@ public function testShouldReturnEvalProfileResult () { 'noresult' => 'here' ) ), - 'result' => null + 'results' => null ), array( 'body' => array( 'segmentEvaluation' => array( - 'result' => 'some result' + 'results' => array('some result') ) ), - 'result' => 'some result' + 'results' => 'some result' ) ); - + foreach ($bodies as $body) { $curlExecMock = new \PHPUnit_Extensions_MockFunction('curl_exec', $helper); $curlExecMock->expects($this->once()) - ->will($this->returnValue(json_encode($body['body']))); - + ->will($this->returnValue(json_encode($body['body']))); + $method = new \ReflectionMethod('Innometrics\Helper', '_evaluateProfileByParams'); $method->setAccessible(true); $res = $method->invoke($helper, $profile, array( - 'segment_id' => '1' - )); - - $this->assertEquals($body['result'], $res); + 'segment_id' => '1', + 'typeSegmentEvaluation' => 'segment-id-evaluation' + )); + + $this->assertEquals($body['results'], $res); } - } - + } + } From 2c3d94c1f4f6cce55b115da3067ff2d58cccc4f1 Mon Sep 17 00:00:00 2001 From: Kuvakin Sergey Date: Tue, 5 Dec 2017 14:45:07 +0300 Subject: [PATCH 2/5] refs #12958 --- README.md | 3 +++ lib/Innometrics/Helper.php | 4 ++-- tests/Helper/HelperTest.php | 2 +- tests/Helper/SegmentsTest.php | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c978c1e..b54c7dd 100644 --- a/README.md +++ b/README.md @@ -21,3 +21,6 @@ For more info read [API reference](http://public.innomdc.com/inno-helper/) ### [0.0.9] - 2017-11-20 - Added method getting list of tasks + +### [0.0.10] - 2017-12-5 +- Has add support a new segment evaluation diff --git a/lib/Innometrics/Helper.php b/lib/Innometrics/Helper.php index b07b5a6..1d59796 100644 --- a/lib/Innometrics/Helper.php +++ b/lib/Innometrics/Helper.php @@ -365,7 +365,7 @@ public function getSegmentEvaluationUrl ($params = array()) { unset($params['typeSegmentEvaluation']); return sprintf( - '%s/v1/companies/%s/buckets/%s/%s?app_key=%s&%s', + '%s/companies/%s/buckets/%s/%s?app_key=%s&%s', $this->getEvaluationApiHost(), $this->getCompany(), $this->getBucket(), @@ -585,7 +585,7 @@ public function evaluateProfileBySegment (Profile $profile, Segment $segment) { /** * Evaluate profile by segment's id * @param Profile $profile - * @param string $segmentId + * @param string|array $segmentIds * @return bool */ public function evaluateProfileBySegmentId (Profile $profile, $segmentIds) { diff --git a/tests/Helper/HelperTest.php b/tests/Helper/HelperTest.php index 50010ff..b2bd346 100644 --- a/tests/Helper/HelperTest.php +++ b/tests/Helper/HelperTest.php @@ -147,7 +147,7 @@ public function testShouldGenerateUrlsCorrectly () { array( 'method' => 'getSegmentEvaluationUrl', 'arg' => array('param1' => 'value1', 'typeSegmentEvaluation' => 'segment-id-evaluation'), - 'res' => 'evaluationApiUrl/v1/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey¶m1=value1' + 'res' => 'evaluationApiUrl/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey¶m1=value1' ), ); diff --git a/tests/Helper/SegmentsTest.php b/tests/Helper/SegmentsTest.php index b254f82..048bac0 100644 --- a/tests/Helper/SegmentsTest.php +++ b/tests/Helper/SegmentsTest.php @@ -246,7 +246,7 @@ public function testShouldMakeProperlyRequestToEvalProfile () { } $curlReferenceConfig = array(); - $curlReferenceConfig[CURLOPT_URL] = 'evaluationApiUrl/v1/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey&some=params&are=here&profile_id=' . $profileId; + $curlReferenceConfig[CURLOPT_URL] = 'evaluationApiUrl/companies/4/buckets/bucketName/segment-id-evaluation?app_key=appKey&some=params&are=here&profile_id=' . $profileId; $curlReferenceConfig[CURLOPT_RETURNTRANSFER] = true; $curlReferenceConfig[CURLOPT_HTTPHEADER] = array( "Content-Type: application/json", From da45724b4fb4b6b21a0a019ca1e24a0015269b06 Mon Sep 17 00:00:00 2001 From: Kuvakin Sergey Date: Tue, 5 Dec 2017 16:38:34 +0300 Subject: [PATCH 3/5] refs #12958 --- lib/Innometrics/Helper.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/Innometrics/Helper.php b/lib/Innometrics/Helper.php index 1d59796..a6cd0c9 100644 --- a/lib/Innometrics/Helper.php +++ b/lib/Innometrics/Helper.php @@ -363,6 +363,7 @@ protected function getSegmentsUrl () { public function getSegmentEvaluationUrl ($params = array()) { $typeSegmentEvaluation = $params['typeSegmentEvaluation']; unset($params['typeSegmentEvaluation']); + $params = preg_replace('/%5B\d+%5D/i', '$1$2', http_build_query($params)); return sprintf( '%s/companies/%s/buckets/%s/%s?app_key=%s&%s', @@ -371,7 +372,7 @@ public function getSegmentEvaluationUrl ($params = array()) { $this->getBucket(), $typeSegmentEvaluation, $this->getAppKey(), - http_build_query($params) + $params ); } @@ -586,7 +587,7 @@ public function evaluateProfileBySegment (Profile $profile, Segment $segment) { * Evaluate profile by segment's id * @param Profile $profile * @param string|array $segmentIds - * @return bool + * @return bool|array */ public function evaluateProfileBySegmentId (Profile $profile, $segmentIds) { $segmentIds = is_array($segmentIds) ? $segmentIds : array($segmentIds); From 8e77455bf7c2068f084d1649ad3dfe6836081c59 Mon Sep 17 00:00:00 2001 From: Kuvakin Sergey Date: Thu, 7 Dec 2017 10:36:44 +0300 Subject: [PATCH 4/5] refs #12958 --- lib/Innometrics/Helper.php | 7 ++++--- tests/Helper/SegmentsTest.php | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/Innometrics/Helper.php b/lib/Innometrics/Helper.php index a6cd0c9..08a6747 100644 --- a/lib/Innometrics/Helper.php +++ b/lib/Innometrics/Helper.php @@ -600,12 +600,13 @@ public function evaluateProfileBySegmentId (Profile $profile, $segmentIds) { /** * Evaluate profile by IQL expression * @param Profile $profile - * @param string $iql + * @param string|array $iqls * @return bool */ - public function evaluateProfileByIql ($profile, $iql) { + public function evaluateProfileByIql ($profile, $iqls) { + $iqls = is_array($iqls) ? $iqls : array($iqls); return $this->_evaluateProfileByParams($profile, array( - 'iql' => $iql, + 'iql' => $iqls, 'typeSegmentEvaluation' => 'iql-evaluation' )); } diff --git a/tests/Helper/SegmentsTest.php b/tests/Helper/SegmentsTest.php index 048bac0..8ddc462 100644 --- a/tests/Helper/SegmentsTest.php +++ b/tests/Helper/SegmentsTest.php @@ -203,7 +203,7 @@ public function testShouldDelegateEvaluationFromProfileBySegmentId () { ->expects($this->once()) ->method('_evaluateProfileByParams') ->with($this->equalTo($profile), $this->equalTo(array( - 'iql' => $segmentIql, + 'iql' => array($segmentIql), 'typeSegmentEvaluation' => 'iql-evaluation' ))) ->will($this->returnValue(true)); From 1bf0b62283f6075c06ca5b7aecaf319b8ea35ce5 Mon Sep 17 00:00:00 2001 From: Kuvakin Sergey Date: Mon, 15 Jan 2018 15:28:33 +0300 Subject: [PATCH 5/5] 0.0.10 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index c53e854..6882321 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,7 @@ "type": "library", "description": "Innometrics helper", "homepage": "http://www.innometrics.com", - "version": "0.0.9", + "version": "0.0.10", "require": { "php": ">=5.3.2", "illuminate/container": "v5.0.33",