Files
IsItMaintained/app/config/config.libraries.php
2015-05-03 09:10:46 -04:00

118 lines
3.8 KiB
PHP

<?php
use Aura\Router\Router;
use Aura\Router\RouterFactory;
use BlackBox\Adapter\MapAdapter;
use BlackBox\Backend\FileStorage;
use BlackBox\Backend\MultipleFileStorage;
use BlackBox\Transformer\JsonEncoder;
use BlackBox\Transformer\MapWithTransformers;
use BlackBox\Transformer\ObjectArrayMapper;
use BlackBox\Transformer\PhpSerializeEncoder;
use BlackBox\Transformer\StorageWithTransformers;
use DI\Container;
use Doctrine\Common\Cache\Cache;
use Doctrine\Common\Cache\FilesystemCache;
use Github\Client;
use Github\HttpClient\CachedHttpClient;
use Interop\Container\ContainerInterface;
use Maintained\Application\Twig\TwigExtension;
use Maintained\Repository;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use PiwikTwigExtension\PiwikTwigExtension;
use Psr\Log\LoggerInterface;
use PUGX\Poser\Poser;
use PUGX\Poser\Render\SvgFlatRender;
use function DI\factory;
use function DI\link;
use function DI\object;
return [
ContainerInterface::class => link(Container::class),
// Routing
Router::class => factory(function (ContainerInterface $c) {
$router = (new RouterFactory())->newInstance();
// Add the routes from the array config (Aura router doesn't seem to accept routes as array)
$routes = $c->get('routes');
foreach ($routes as $routeName => $route) {
$router->add($routeName, $route['pattern'])
->addValues(['controller' => $route['controller']]);
}
return $router;
}),
// Logger
LoggerInterface::class => factory(function (ContainerInterface $c) {
$logger = new Logger('main');
$file = $c->get('directory.logs') . '/app.log';
$logger->pushHandler(new StreamHandler($file, Logger::WARNING));
return $logger;
}),
// Badge generator
Poser::class => object()
->constructor(link(SvgFlatRender::class)),
// Twig
Twig_Environment::class => factory(function (ContainerInterface $c) {
$loader = new Twig_Loader_Filesystem(__DIR__ . '/../../src/Maintained/Application/View');
$twig = new Twig_Environment($loader);
$twig->addExtension($c->get(TwigExtension::class));
$twig->addExtension($c->get(PiwikTwigExtension::class));
return $twig;
}),
PiwikTwigExtension::class => object()
->constructor(link('piwik.host'), link('piwik.site_id'), link('piwik.enabled')),
// Cache
Cache::class => factory(function (ContainerInterface $c) {
$cache = new FilesystemCache($c->get('directory.cache') . '/app');
$cache->setNamespace('Maintained');
return $cache;
}),
'storage.repositories' => factory(function (ContainerInterface $c) {
$backend = new StorageWithTransformers(
new FileStorage($c->get('directory.data') . '/repositories.json')
);
$backend->addTransformer(new JsonEncoder(true));
$storage = new MapWithTransformers(
new MapAdapter($backend)
);
$storage->addTransformer(new ObjectArrayMapper(Repository::class));
return $storage;
}),
'storage.statistics' => factory(function (ContainerInterface $c) {
$storage = new MapWithTransformers(
new MultipleFileStorage($c->get('directory.data') . '/statistics')
);
$storage->addTransformer(new PhpSerializeEncoder);
return $storage;
}),
// GitHub API
Client::class => factory(function (ContainerInterface $c) {
$cacheDirectory = $c->get('directory.cache') . '/github';
$client = new Client(
new CachedHttpClient(['cache_dir' => $cacheDirectory])
);
$authToken = $c->get('github.auth_token');
if ($authToken) {
$client->authenticate($authToken, null, Client::AUTH_HTTP_TOKEN);
}
return $client;
}),
];