Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
39 / 39 |
IceHawk | |
100.00% |
1 / 1 |
|
100.00% |
6 / 6 |
11 | |
100.00% |
39 / 39 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
init | |
100.00% |
1 / 1 |
1 | |
100.00% |
13 / 13 |
|||
guardConfigIsValid | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
registerEventSubscribers | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
getFinalRequestInfo | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
handleRequest | |
100.00% |
1 / 1 |
4 | |
100.00% |
12 / 12 |
<?php declare(strict_types = 1); | |
/** | |
* Copyright (c) 2017 Holger Woltersdorf & Contributors | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
*/ | |
namespace IceHawk\IceHawk; | |
use IceHawk\IceHawk\Config\ConfigGuard; | |
use IceHawk\IceHawk\Config\ConfigWrapper; | |
use IceHawk\IceHawk\Constants\HttpMethod; | |
use IceHawk\IceHawk\Events\IceHawkWasInitializedEvent; | |
use IceHawk\IceHawk\Events\InitializingIceHawkEvent; | |
use IceHawk\IceHawk\Exceptions\InvalidEventSubscriberCollection; | |
use IceHawk\IceHawk\Interfaces\ConfiguresIceHawk; | |
use IceHawk\IceHawk\Interfaces\ProvidesRequestInfo; | |
use IceHawk\IceHawk\Interfaces\SetsUpEnvironment; | |
use IceHawk\IceHawk\PubSub\EventPublisher; | |
use IceHawk\IceHawk\PubSub\Interfaces\PublishesEvents; | |
use IceHawk\IceHawk\RequestHandlers\OptionsRequestHandler; | |
use IceHawk\IceHawk\RequestHandlers\ReadRequestHandler; | |
use IceHawk\IceHawk\RequestHandlers\WriteRequestHandler; | |
use IceHawk\IceHawk\Responses\MethodNotImplemented; | |
use IceHawk\IceHawk\Routing\RequestBypasser; | |
/** | |
* Class IceHawk | |
* @package IceHawk\IceHawk | |
*/ | |
final class IceHawk | |
{ | |
/** @var ConfiguresIceHawk */ | |
private $config; | |
/** @var SetsUpEnvironment */ | |
private $setUpDelegate; | |
/** @var PublishesEvents */ | |
private $eventPublisher; | |
/** | |
* @param ConfiguresIceHawk $config | |
* @param SetsUpEnvironment $setUpDelegate | |
*/ | |
public function __construct( ConfiguresIceHawk $config, SetsUpEnvironment $setUpDelegate ) | |
{ | |
$this->config = $config; | |
$this->setUpDelegate = $setUpDelegate; | |
$this->eventPublisher = new EventPublisher(); | |
} | |
/** | |
* @throws InvalidEventSubscriberCollection | |
*/ | |
public function init() | |
{ | |
$this->setUpDelegate->setUpGlobalVars(); | |
$this->config = new ConfigWrapper( $this->config ); | |
$this->guardConfigIsValid(); | |
$this->registerEventSubscribers(); | |
$requestInfo = $this->config->getRequestInfo(); | |
$requestCookies = $this->config->getCookies(); | |
$initializingEvent = new InitializingIceHawkEvent( $requestInfo, $requestCookies ); | |
$this->eventPublisher->publish( $initializingEvent ); | |
$this->setUpDelegate->setUpSessionHandling( $requestInfo ); | |
$this->setUpDelegate->setUpErrorHandling( $requestInfo ); | |
$initializedEvent = new IceHawkWasInitializedEvent( $requestInfo, $requestCookies ); | |
$this->eventPublisher->publish( $initializedEvent ); | |
} | |
/** | |
* @throws InvalidEventSubscriberCollection | |
*/ | |
private function guardConfigIsValid() | |
{ | |
(new ConfigGuard( $this->config ))->validate(); | |
} | |
private function registerEventSubscribers() | |
{ | |
foreach ( $this->config->getEventSubscribers() as $subscriber ) | |
{ | |
$this->eventPublisher->register( $subscriber ); | |
} | |
} | |
private function getFinalRequestInfo() : ProvidesRequestInfo | |
{ | |
$requestInfo = $this->config->getRequestInfo(); | |
$bypassHandler = new RequestBypasser(); | |
foreach ( $this->config->getRequestBypasses() as $requestBypass ) | |
{ | |
$bypassHandler->addRequestBypass( $requestBypass ); | |
} | |
return $bypassHandler->bypassRequest( $requestInfo ); | |
} | |
public function handleRequest() | |
{ | |
$requestInfo = $this->getFinalRequestInfo(); | |
if ( in_array( $requestInfo->getMethod(), HttpMethod::WRITE_METHODS, true ) ) | |
{ | |
$requestHandler = new WriteRequestHandler( $requestInfo, $this->config, $this->eventPublisher ); | |
$requestHandler->handleRequest(); | |
} | |
elseif ( in_array( $requestInfo->getMethod(), HttpMethod::READ_METHODS, true ) ) | |
{ | |
$requestHandler = new ReadRequestHandler( $requestInfo, $this->config, $this->eventPublisher ); | |
$requestHandler->handleRequest(); | |
} | |
elseif ( $requestInfo->getMethod() === HttpMethod::OPTIONS ) | |
{ | |
$requestHandler = new OptionsRequestHandler( $requestInfo, $this->config, $this->eventPublisher ); | |
$requestHandler->handleRequest(); | |
} | |
else | |
{ | |
(new MethodNotImplemented( $requestInfo->getMethod() ))->respond(); | |
} | |
} | |
} |