Skip to content

Commit

Permalink
Merge pull request #7 from thewulf7/feature/entities
Browse files Browse the repository at this point in the history
Feature/entities
  • Loading branch information
thewulf7 committed Dec 8, 2015
2 parents af4dc70 + 852483a commit e94c8c7
Show file tree
Hide file tree
Showing 27 changed files with 1,472 additions and 308 deletions.
10 changes: 6 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@
"require": {
"php": ">=5.4.0",
"guzzle/guzzle": "*",
"guzzlehttp/guzzle":"*"
"guzzlehttp/guzzle":"*",
"ramsey/array_column": "*"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"phpunit/php-invoker" : ">=1.1.0@stable"
},
"autoload": {
"psr-0": {
"travelPayouts": "src/"
}
},
"config": {
"bin-dir": "bin"
}
}
64 changes: 7 additions & 57 deletions src/travelPayouts/Travel.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@


use travelPayouts\components\Client;
use travelPayouts\components\ServiceInjector;
use travelPayouts\services\TicketsService;
use travelPayouts\services\DataService;
use travelPayouts\services\FlightService;
use travelPayouts\services\PartnerService;

/**
* Class Travel
Expand All @@ -11,6 +16,8 @@
*/
class Travel
{
use ServiceInjector;

/**
* @var Client
*/
Expand Down Expand Up @@ -71,61 +78,4 @@ public function setToken($token)

return $this;
}

/**
* Get tickets service
*
* @return services\Tickets
* @throws \RuntimeException
*/
public function getTicketsService()
{
if (!($this->getClient() instanceof Client))
{
throw new \RuntimeException('No token specified');
}

$service = new \travelPayouts\services\Tickets();
$service->setClient($this->getClient());

return $service;
}

/**
* Get data service
*
* @return services\Data
* @throws \RuntimeException
*/
public function getDataService()
{
if (!($this->getClient() instanceof Client))
{
throw new \RuntimeException('No token specified');
}

$service = new \travelPayouts\services\Data();
$service->setClient($this->getClient());

return $service;
}

/**
* Get flight service
*
* @return services\Flight
* @throws \RuntimeException
*/
public function getFlightService()
{
if (!($this->getClient() instanceof Client))
{
throw new \RuntimeException('No token specified');
}

$service = new \travelPayouts\services\Flight();
$service->setClient($this->getClient());

return $service;
}
}
9 changes: 9 additions & 0 deletions src/travelPayouts/components/AbstractService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php
namespace travelPayouts\components;


abstract class AbstractService
{
use ServiceInjector;

}
78 changes: 78 additions & 0 deletions src/travelPayouts/components/ServiceInjector.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php
namespace travelPayouts\components;

use travelPayouts\services\TicketsService;
use travelPayouts\services\DataService;
use travelPayouts\services\FlightService;
use travelPayouts\services\PartnerService;

/**
* Class ServiceInjector
*
* @method DataService getDataService()
* @method FlightService getFlightService()
* @method PartnerService getPartnerService()
* @method TicketsService getTicketsService()
*
* @package travelPayouts\components
*/
trait ServiceInjector
{

private $_serviceMap = [];

/**
* Get service
*
* @param $name
* @param $args
*
* @return mixed
* @throws \BadMethodCallException
*/
public function __call($name, $args)
{
if (array_key_exists($name, $this->getServiceMap()))
{
return $this->getService($this->_serviceMap[$name]);
}

throw new \BadMethodCallException('Calling unknown method: ' . get_class($this) . "::$name()");
}

/**
* @return array
*/
private function getServiceMap()
{
if (count($this->_serviceMap) === 0)
{
$services = require(__DIR__ . '/../config/services.php');

foreach ($services as $serviceName => $serviceClass) {
$methodName = 'get' . ucfirst($serviceName);
$this->_serviceMap[$methodName] = $serviceClass;
}
}

return $this->_serviceMap;
}

/**
* @param $serviceName
*
* @return mixed
*/
private function getService($serviceName)
{

if (!($this->getClient() instanceof Client))
{
throw new \RuntimeException('No token specified');
}
$service = new $serviceName();
$service->setClient($this->getClient());

return $service;
}
}
5 changes: 5 additions & 0 deletions src/travelPayouts/components/iService.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

interface iService
{
const DATA_SERVICE = 'DataService';
const FLIGHT_SERVICE = 'FlightService';
const PARTNER_SERVICE = 'PartnerService';
const TICKETS_SERVICE = 'TicketsService';

/**
* @return \travelPayouts\components\Client
*/
Expand Down
17 changes: 17 additions & 0 deletions src/travelPayouts/config/services.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

namespace travelPayouts\config;


use travelPayouts\components\iService;
use travelPayouts\services\TicketsService;
use travelPayouts\services\DataService;
use travelPayouts\services\FlightService;
use travelPayouts\services\PartnerService;

return [
iService::DATA_SERVICE => DataService::class,
iService::FLIGHT_SERVICE => FlightService::class,
iService::PARTNER_SERVICE => PartnerService::class,
iService::TICKETS_SERVICE => TicketsService::class,
];
7 changes: 7 additions & 0 deletions src/travelPayouts/config/tests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace travelPayouts\config;

return [
'token' => '321d6a221f8926b5ec41ae89a3b2ae7b' //test token from api.travelpayouts.com
];
1 change: 1 addition & 0 deletions src/travelPayouts/data/airlines.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/travelPayouts/data/airlines_alliances.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[{"name":"Star Alliance","airlines":["A3","AC","AV","CA","CM","ET","JJ","JP","KF","LH","LO","LX","MS","NH","NZ","OS","OU","OZ","PZ","SA","SK","SN","SQ","TA","TG","TK","TP","UA","US"]},{"name":"oneworld","airlines":["4M","AA","AB","BA","CX","AY","HG","IB","JC","JL","JO","KA","LA","LP","MA","MN","MX","NU","QF","RJ","S7","XL"]},{"name":"SkyTeam","airlines":["AF","AE","AM","AR","AZ","CI","CZ","DL","FM","KE","KL","KQ","ME","MU","OK","RO","SU","SV","UX","VN"]}]
1 change: 1 addition & 0 deletions src/travelPayouts/data/airports.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/travelPayouts/data/cities.json

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/travelPayouts/data/countries.json

Large diffs are not rendered by default.

Loading

0 comments on commit e94c8c7

Please sign in to comment.