1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-17 04:40:08 -07:00

Cache relations

This commit is contained in:
Unknown 2017-06-08 17:59:34 +02:00
parent 7d130d1666
commit 80bea7f0c9
4 changed files with 41 additions and 4 deletions

View File

@ -24,6 +24,9 @@ services:
public: true
tags: ['controller.service_arguments']
app.relations.cache_provider:
class: Doctrine\Common\Cache\ArrayCache
app.brickset.cache_provider:
class: Doctrine\Common\Cache\PhpFileCache
arguments: ["%kernel.cache_dir%/brickset", ".cache.php"]
@ -76,6 +79,8 @@ services:
$rebrickableDownloadUrl: '%app.rebrickable_downloads_url%'
AppBundle\Util\RelationMapper:
arguments:
- '@app.relations.cache_provider'
calls:
- [ loadResource, ['%kernel.root_dir%/Resources/relations/part_model.yml', 'part_model']]
- [ loadResource, ['%kernel.root_dir%/Resources/relations/alias_model.yml', 'alias_model']]

View File

@ -4,6 +4,7 @@ namespace AppBundle\Util;
use AppBundle\Exception\RelationMapper\InvalidResourceException;
use AppBundle\Exception\RelationMapper\ResourceNotFoundException;
use Doctrine\Common\Cache\CacheProvider;
use Symfony\Component\OptionsResolver\Exception\InvalidArgumentException;
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
use Symfony\Component\Yaml\Exception\ParseException;
@ -16,6 +17,16 @@ class RelationMapper
*/
private $relations;
/**
* RelationMapper constructor.
* @param CacheProvider $cache
*/
public function __construct(CacheProvider $cache)
{
$this->cache = $cache;
}
/**
* Adds a Resource.
*
@ -31,8 +42,13 @@ class RelationMapper
}
try {
if (!$data = unserialize($this->cache->fetch($domain))) {
$data = Yaml::parse(file_get_contents($file),yaml::PARSE_KEYS_AS_STRINGS);
$this->cache->save($domain, serialize($data), 60);
}
$this->relations[$domain] = [];
$this->relations[$domain] = Yaml::parse(file_get_contents($file));
$this->relations[$domain] = $data;
} catch (ParseException $e) {
throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s"', $file), 0, $e);
}

View File

@ -0,0 +1,15 @@
<?php
/**
* Created by PhpStorm.
* User: hubnedav
* Date: 8.6.17
* Time: 16:05
*/
namespace Tests\AppBundle\Controller;
class DefaultControllerTest
{
}

View File

@ -3,6 +3,7 @@
namespace Tests\AppBundle\Util\RelationMapper;
use AppBundle\Util\RelationMapper;
use Doctrine\Common\Cache\ArrayCache;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Config\Resource\FileResource;
use Symfony\Component\Yaml\Yaml;
@ -11,7 +12,7 @@ class RelationMapperTest extends TestCase
{
public function testLoad()
{
$mapper = new RelationMapper();
$mapper = new RelationMapper(new ArrayCache());
$mapper->loadResource(__DIR__.'/fixtures/resources.yml', 'resources');
$this->assertEquals('bar', $mapper->find('foo','resources'));
@ -23,7 +24,7 @@ class RelationMapperTest extends TestCase
*/
public function testLoadNonExistingResource()
{
$mapper = new RelationMapper();
$mapper = new RelationMapper(new ArrayCache());
$resource = __DIR__.'/fixtures/non-existing.yml';
$mapper->loadResource($resource, 'resources');
}
@ -33,7 +34,7 @@ class RelationMapperTest extends TestCase
*/
public function testLoadInvalidResource()
{
$mapper = new RelationMapper();
$mapper = new RelationMapper(new ArrayCache());
$resource = __DIR__.'/fixtures/invalid.yml';
$mapper->loadResource($resource, 'resources');
}