diff options
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php')
-rw-r--r-- | vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php b/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php new file mode 100644 index 0000000..26f8360 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Service/CachingConfigLoader.php @@ -0,0 +1,46 @@ +<?php + +namespace Guzzle\Service; + +use Guzzle\Cache\CacheAdapterInterface; + +/** + * Decorator that adds caching to a service description loader + */ +class CachingConfigLoader implements ConfigLoaderInterface +{ + /** @var ConfigLoaderInterface */ + protected $loader; + + /** @var CacheAdapterInterface */ + protected $cache; + + /** + * @param ConfigLoaderInterface $loader Loader used to load the config when there is a cache miss + * @param CacheAdapterInterface $cache Object used to cache the loaded result + */ + public function __construct(ConfigLoaderInterface $loader, CacheAdapterInterface $cache) + { + $this->loader = $loader; + $this->cache = $cache; + } + + public function load($config, array $options = array()) + { + if (!is_string($config)) { + $key = false; + } else { + $key = 'loader_' . crc32($config); + if ($result = $this->cache->fetch($key)) { + return $result; + } + } + + $result = $this->loader->load($config, $options); + if ($key) { + $this->cache->save($key, $result); + } + + return $result; + } +} |