Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
37.50% |
3 / 8 |
CRAP | |
44.12% |
15 / 34 |
State | |
0.00% |
0 / 1 |
|
37.50% |
3 / 8 |
74.54 | |
44.12% |
15 / 34 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
get | |
100.00% |
1 / 1 |
2 | |
100.00% |
2 / 2 |
|||
getMultiple | |
0.00% |
0 / 1 |
14.50 | |
53.33% |
8 / 15 |
|||
set | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
setMultiple | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
delete | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
deleteMultiple | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
resetCache | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\State\State. | |
*/ | |
namespace Drupal\Core\State; | |
use Drupal\Core\KeyValueStore\KeyValueFactoryInterface; | |
/** | |
* Provides the state system using a key value store. | |
*/ | |
class State implements StateInterface { | |
/** | |
* The key value store to use. | |
* | |
* @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface | |
*/ | |
protected $keyValueStore; | |
/** | |
* Static state cache. | |
* | |
* @var array | |
*/ | |
protected $cache = array(); | |
/** | |
* Constructs a State object. | |
* | |
* @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value_factory | |
* The key value store to use. | |
*/ | |
function __construct(KeyValueFactoryInterface $key_value_factory) { | |
$this->keyValueStore = $key_value_factory->get('state'); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function get($key, $default = NULL) { | |
$values = $this->getMultiple(array($key)); | |
return isset($values[$key]) ? $values[$key] : $default; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getMultiple(array $keys) { | |
$values = array(); | |
$load = array(); | |
foreach ($keys as $key) { | |
// Check if we have a value in the cache. | |
if (isset($this->cache[$key])) { | |
$values[$key] = $this->cache[$key]; | |
} | |
// Load the value if we don't have an explicit NULL value. | |
elseif (!array_key_exists($key, $this->cache)) { | |
$load[] = $key; | |
} | |
} | |
if ($load) { | |
$loaded_values = $this->keyValueStore->getMultiple($load); | |
foreach ($load as $key) { | |
// If we find a value, even one that is NULL, add it to the cache and | |
// return it. | |
if (isset($loaded_values[$key]) || array_key_exists($key, $loaded_values)) { | |
$values[$key] = $loaded_values[$key]; | |
$this->cache[$key] = $loaded_values[$key]; | |
} | |
else { | |
$this->cache[$key] = NULL; | |
} | |
} | |
} | |
return $values; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function set($key, $value) { | |
$this->cache[$key] = $value; | |
$this->keyValueStore->set($key, $value); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setMultiple(array $data) { | |
foreach ($data as $key => $value) { | |
$this->cache[$key] = $value; | |
} | |
$this->keyValueStore->setMultiple($data); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function delete($key) { | |
$this->deleteMultiple(array($key)); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function deleteMultiple(array $keys) { | |
foreach ($keys as $key) { | |
unset($this->cache[$key]); | |
} | |
$this->keyValueStore->deleteMultiple($keys); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function resetCache() { | |
$this->cache = array(); | |
} | |
} |