Skip to content

Commit

Permalink
Composer requires php 7.1
Browse files Browse the repository at this point in the history
Travis requires php 7.1
Using php 7.1 return types + method argumetn types declarations
  • Loading branch information
paveljanda committed Jul 20, 2017
1 parent aab609c commit eee53ce
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 98 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@
}
},
"require": {
"php": "<= 7.0",
"php": "<= 7.1",
"nette/http": "^2.3|^2.4",
"nette/application": "^2.3|^2.4",
"nette/di": "^2.3|^2.4",
"latte/latte": "^2.3|^2.4",
"ublaboo/api-router": ">=1.2.5"
"ublaboo/api-router": "~2.0.0"
},
"require-dev": {
"nette/tester": "~1.6.1",
Expand Down
31 changes: 14 additions & 17 deletions src/DI/ApiDocuExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,22 @@

namespace Ublaboo\ApiDocu\DI;

use Nette;
use Nette\DI\CompilerExtension;
use Nette\DI\Helpers;
use Ublaboo\ApiDocu\Generator;
use Ublaboo\ApiDocu\Starter;

class ApiDocuExtension extends Nette\DI\CompilerExtension
class ApiDocuExtension extends CompilerExtension
{

/**
* @var array
*/
protected $config;

/**
* @var array
*/
private $defaults = [
'apiDir' => '%wwwDir%/api',
'httpAuth' => [
Expand All @@ -29,44 +35,35 @@ class ApiDocuExtension extends Nette\DI\CompilerExtension
];


/**
* @return void
*/
public function loadConfiguration()
public function loadConfiguration(): void
{
$this->config = $this->_getConfig();
}


/**
* @return void
*/
public function beforeCompile()
public function beforeCompile(): void
{
$builder = $this->getContainerBuilder();
$config = $this->config;

$builder->addDefinition($this->prefix('generator'))
->setClass('Ublaboo\ApiDocu\Generator')
->setClass(Generator::class)
->setArguments([$config['apiDir'], $config['httpAuth']]);

$builder->addDefinition($this->prefix('starter'))
->setClass('Ublaboo\ApiDocu\Starter')
->setClass(Starter::class)
->setArguments([
$builder->getDefinition($this->prefix('generator')),
$builder->getDefinition('router'),
])->addTag('run');
}


/**
* @return array
*/
protected function _getConfig()
protected function _getConfig(): array
{
$config = $this->validateConfig($this->defaults, $this->config);

$config['apiDir'] = Nette\DI\Helpers::expand(
$config['apiDir'] = Helpers::expand(
$config['apiDir'],
$this->getContainerBuilder()->parameters
);
Expand Down
101 changes: 33 additions & 68 deletions src/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,65 +10,57 @@

namespace Ublaboo\ApiDocu;

use Nette;
use Nette\Application\IRouter;
use Nette\Application\Request;
use Nette\Application\UI\ITemplate;
use Nette\Application\UI\ITemplateFactory;
use Nette\Http;
use Tracy\Debugger;
use Ublaboo\ApiRouter\ApiRoute;

class Generator extends Nette\Object
class Generator
{

/**
* @var Nette\Application\UI\ITemplateFactory
* @var ITemplateFactory
*/
private $templateFactory;

/**
* @var Nette\Http\Request
* @var Http\Request
*/
private $httpRequest;

/**
* @var string
*/
private $api_dir;
private $appDir;

/**
* @var array
*/
private $httpAuth;


/**
* @param string $api_dir
* @param array $httpAuth
* @param Nette\Application\UI\ITemplateFactory $templateFactory
* @param Nette\Http\Request $httpRequest
*/
public function __construct(
$api_dir,
string $appDir,
array $httpAuth,
Nette\Application\UI\ITemplateFactory $templateFactory,
Nette\Http\Request $httpRequest
ITemplateFactory $templateFactory,
Http\Request $httpRequest
) {
$this->api_dir = $api_dir;
$this->appDir = $appDir;
$this->httpAuth = $httpAuth;
$this->templateFactory = $templateFactory;
$this->httpRequest = $httpRequest;
}


/**
* @param IRouter $router
* @return void
*/
public function generateAll(IRouter $router)
public function generateAll(IRouter $router): void
{
$sections = $this->splitRoutesIntoSections($router);

if (!file_exists($this->api_dir) && !is_dir($this->api_dir)) {
mkdir($this->api_dir);
if (!file_exists($this->appDir) && !is_dir($this->appDir)) {
mkdir($this->appDir);
}

/**
Expand All @@ -79,26 +71,21 @@ public function generateAll(IRouter $router)
/**
* Create *.php for each defined ApiRoute
*/
foreach ($sections as $section_name => $routes) {
foreach ($sections as $sectionName => $routes) {
if (is_array($routes)) {
foreach ($routes as $file_name => $route) {
$this->generateOne($route, $sections, "$section_name.$file_name");
foreach ($routes as $fileName => $route) {
$this->generateOne($route, $sections, "$sectionName.$fileName");
}
} else {
$this->generateOne($routes, $sections, $section_name);
$this->generateOne($routes, $sections, $sectionName);
}
}

$this->generateSuccess();
}


/**
* @param ApiRoute $route
* @param Request $request
* @return void
*/
public function generateTarget(ApiRoute $route, Request $request)
public function generateTarget(ApiRoute $route, Request $request): void
{
$template = $this->createTemplate('api_docu_matched.latte');

Expand All @@ -116,13 +103,7 @@ public function generateTarget(ApiRoute $route, Request $request)
}


/**
* @param ApiRoute $route
* @param array $sections
* @param string $file_name
* @return void
*/
public function generateOne(ApiRoute $route, $sections, $file_name)
public function generateOne(ApiRoute $route, array $sections, string $fileName): void
{
$template = $this->createTemplate('api_docu_one.latte');

Expand All @@ -132,17 +113,13 @@ public function generateOne(ApiRoute $route, $sections, $file_name)
]);

file_put_contents(
"{$this->api_dir}/{$file_name}.php",
"{$this->appDir}/{$fileName}.php",
$this->getHttpAuthSnippet() . $template
);
}


/**
* @param array $sections
* @return void
*/
public function generateIndex($sections)
public function generateIndex(array $sections): void
{
$template = $this->createTemplate('api_docu_index.latte');

Expand All @@ -151,21 +128,18 @@ public function generateIndex($sections)
]);

file_put_contents(
"{$this->api_dir}/index.php",
"{$this->appDir}/index.php",
$this->getHttpAuthSnippet() . $template
);
}


/**
* @return void
*/
public function generateSuccess()
public function generateSuccess(): void
{
$template = $this->createTemplate('api_docu_success.latte');

$template->setParameters([
'apiDir' => $this->api_dir,
'apiDir' => $this->appDir,
]);

if (class_exists('Tracy\Debugger')) {
Expand All @@ -176,19 +150,15 @@ public function generateSuccess()
}


/**
* @param string
* @return Nette\Application\UI\ITemplate
*/
public function createTemplate($which)
public function createTemplate(string $which): ITemplate
{
$template = $this->templateFactory->createTemplate();

$template->addFilter(null, 'Ublaboo\ApiDocu\TemplateFilters::common');

$template->setFile(__DIR__ . '/templates/' . $which);

if ($template instanceof Nette\Application\UI\ITemplate) {
if ($template instanceof ITemplate) {
$template->base_dir = __DIR__ . '/templates';
}

Expand Down Expand Up @@ -217,11 +187,11 @@ public function createTemplate($which)
********************************************************************************/


private function splitRoutesIntoSections(IRouter $router)
private function splitRoutesIntoSections(IRouter $router): array
{
$routes = [];
$sections = [];
$file_name = 1;
$fileName = 1;

if ($router instanceof ApiRoute) {
$routes = [$router];
Expand All @@ -235,9 +205,9 @@ private function splitRoutesIntoSections(IRouter $router)
$sections[$route->getSection()] = [];
}

$sections[$route->getSection()][$file_name++] = $route;
$sections[$route->getSection()][$fileName++] = $route;
} else {
$sections[$file_name++] = $route;
$sections[$fileName++] = $route;
}
}

Expand All @@ -247,10 +217,8 @@ private function splitRoutesIntoSections(IRouter $router)

/**
* Recursively flatten \IteratorAggregate (probably Nette\Application\Routers\RouteList)
* @param \IteratorAggregate $i
* @return array
*/
private function getApiRoutesFromIterator(\IteratorAggregate $i)
private function getApiRoutesFromIterator(\IteratorAggregate $i): array
{
$return = [];

Expand All @@ -270,10 +238,7 @@ private function getApiRoutesFromIterator(\IteratorAggregate $i)
}


/**
* @return string
*/
private function getHttpAuthSnippet()
private function getHttpAuthSnippet(): string
{
if (!$this->httpAuth['user'] || !$this->httpAuth['password']) {
return '';
Expand Down
11 changes: 3 additions & 8 deletions src/Starter.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@

namespace Ublaboo\ApiDocu;

use Nette;
use Nette\Application\IRouter;
use Nette\Application\Request;
use Nette\Application\Routers\RouteList;
use Nette\Http;
use Ublaboo\ApiRouter\ApiRoute;

class Starter extends Nette\Object
class Starter
{
public const API_DOCU_STARTER_QUERY_KEY_TARGET = '__apiDocu';
public const API_DOCU_STARTER_QUERY_KEY_GENERATE = '__apiDocuGenerate';
Expand Down Expand Up @@ -69,11 +68,8 @@ public function __construct(

/**
* Event thatis firex when particular ApiRoute is matched
* @param ApiRoute $route
* @param Request $request
* @return void
*/
public function routeMatched(ApiRoute $route, Request $request)
public function routeMatched(ApiRoute $route, Request $request): void
{
if (($format = $request->getParameter(self::API_DOCU_STARTER_QUERY_KEY_GENERATE)) !== null) {
$this->generator->generateAll($this->router);
Expand All @@ -91,9 +87,8 @@ public function routeMatched(ApiRoute $route, Request $request)

/**
* Find ApiRoutes and add listener to each ApiRoute::onMatch event
* @return void
*/
protected function attachEvents()
protected function attachEvents(): void
{
foreach ($this->router as $route) {
if ($route instanceof ApiRoute) {
Expand Down
Loading

0 comments on commit eee53ce

Please sign in to comment.