Skip to content

Commit

Permalink
Finishing up the rest of the View Cells stuff, including docs, tests,…
Browse files Browse the repository at this point in the history
… and convenience methods.
  • Loading branch information
lonnieezell committed Jul 2, 2016
1 parent f66e96b commit e10aa4b
Show file tree
Hide file tree
Showing 7 changed files with 504 additions and 36 deletions.
16 changes: 16 additions & 0 deletions application/Config/Services.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,22 @@ public static function cache(\Config\Cache $config = null, $getShared = true)

//--------------------------------------------------------------------

/**
* View cells are intended to let you insert HTML into view
* that has been generated by any callable in the system.
*/
public static function viewcell($getShared = true)
{
if ($getShared)
{
return self::getSharedInstance('viewcell');
}

return new \CodeIgniter\View\Cell(self::cache());
}

//--------------------------------------------------------------------

/**
* The CLI Request class provides for ways to interact with
* a command line request.
Expand Down
21 changes: 21 additions & 0 deletions system/Common.php
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,27 @@ function view(string $name, array $data = [], array $options = [])

//--------------------------------------------------------------------

if (! function_exists('view_cell'))
{
/**
* View cells are used within views to insert HTML chunks that are managed
* by other classes.
*
* @param string $library
* @param null $params
* @param int $ttl
* @param string|null $cacheName
*
* @return string
*/
function view_cell(string $library, $params = null, int $ttl = 0, string $cacheName = null)
{
return Services::viewcell()->render($library, $params, $ttl, $cacheName);
}
}

//--------------------------------------------------------------------

if ( ! function_exists('esc'))
{
/**
Expand Down
71 changes: 35 additions & 36 deletions system/View/Cell.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,42 +140,6 @@ public function render(string $library, $params = null, int $ttl = 0, string $ca

//--------------------------------------------------------------------

/**
* Given the library string, attempts to determine the class and method
* to call.
*
* @param string $library
*
* @return array
*/
protected function determineClass(string $library)
{
// We don't want to actually call static methods
// by default, so convert any double colons.
$library = str_replace('::', ':', $library);

list($class, $method) = explode(':', $library);

if (empty($class))
{
throw new \InvalidArgumentException('No view cell class provided.');
}

if (! class_exists($class, true))
{
throw new \InvalidArgumentException('Unable to locate view cell class: '.$class.'.');
}

if (empty($method))
{
$method = 'index';
}

return [$class, $method];
}

//--------------------------------------------------------------------

/**
* Parses the params attribute. If an array, returns untouched.
* If a string, it should be in the format "key1=value key2=value".
Expand Down Expand Up @@ -226,4 +190,39 @@ public function prepareParams($params)

//--------------------------------------------------------------------

/**
* Given the library string, attempts to determine the class and method
* to call.
*
* @param string $library
*
* @return array
*/
protected function determineClass(string $library)
{
// We don't want to actually call static methods
// by default, so convert any double colons.
$library = str_replace('::', ':', $library);

list($class, $method) = explode(':', $library);

if (empty($class))
{
throw new \InvalidArgumentException('No view cell class provided.');
}

if (! class_exists($class, true))
{
throw new \InvalidArgumentException('Unable to locate view cell class: '.$class.'.');
}

if (empty($method))
{
$method = 'index';
}

return [$class, $method];
}

//--------------------------------------------------------------------
}
197 changes: 197 additions & 0 deletions tests/_support/Cache/Handlers/MockHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
<?php namespace CodeIgniter\Cache\Handlers;

use CodeIgniter\Cache\CacheInterface;

class MockHandler implements CacheInterface
{
/**
* Prefixed to all cache names.
*
* @var string
*/
protected $prefix;

/**
* Mock cache storage.
* @var array
*/
protected $cache = [];

//--------------------------------------------------------------------

/**
* Takes care of any handler-specific setup that must be done.
*/
public function initialize()
{
// Not to see here...
}

//--------------------------------------------------------------------

/**
* Attempts to fetch an item from the cache store.
*
* @param string $key Cache item name
*
* @return mixed
*/
public function get(string $key)
{
$key = $this->prefix.$key;

return isset($this->cache[$key])
? $this->cache[$key]
: false;
}

//--------------------------------------------------------------------

/**
* Saves an item to the cache store.
*
* The $raw parameter is only utilized by Mamcache in order to
* allow usage of increment() and decrement().
*
* @param string $key Cache item name
* @param $value the data to save
* @param null $ttl Time To Live, in seconds (default 60)
* @param bool $raw Whether to store the raw value.
*
* @return mixed
*/
public function save(string $key, $value, int $ttl = 60, bool $raw = false)
{
$key = $this->prefix.$key;

$this->cache[$key] = $value;

return true;
}

//--------------------------------------------------------------------

/**
* Deletes a specific item from the cache store.
*
* @param string $key Cache item name
*
* @return mixed
*/
public function delete(string $key)
{
unset($this->cache[$key]);
}

//--------------------------------------------------------------------

/**
* Performs atomic incrementation of a raw stored value.
*
* @param string $key Cache ID
* @param int $offset Step/value to increase by
*
* @return mixed
*/
public function increment(string $key, int $offset = 1)
{
$key = $this->prefix.$key;

$data = $this->cache[$key] ?: null;

if (empty($data))
{
$data = 0;
}
elseif (! is_int($data))
{
return false;
}

return $this->save($key, $data+$offset);
}

//--------------------------------------------------------------------

/**
* Performs atomic decrementation of a raw stored value.
*
* @param string $key Cache ID
* @param int $offset Step/value to increase by
*
* @return mixed
*/
public function decrement(string $key, int $offset = 1)
{
$key = $this->prefix.$key;

$data = $this->cache[$key] ?: null;

if (empty($data))
{
$data = 0;
}
elseif (! is_int($data))
{
return false;
}

return $this->save($key, $data-$offset);
}

//--------------------------------------------------------------------

/**
* Will delete all items in the entire cache.
*
* @return mixed
*/
public function clean()
{
$this->cache = [];
}

//--------------------------------------------------------------------

/**
* Returns information on the entire cache.
*
* The information returned and the structure of the data
* varies depending on the handler.
*
* @return mixed
*/
public function getCacheInfo()
{
return [];
}

//--------------------------------------------------------------------

/**
* Returns detailed information about the specific item in the cache.
*
* @param string $key Cache item name.
*
* @return mixed
*/
public function getMetaData(string $key)
{
return false;
}

//--------------------------------------------------------------------

/**
* Determines if the driver is supported on this system.
*
* @return boolean
*/
public function isSupported(): bool
{
return true;
}

//--------------------------------------------------------------------

}
Loading

0 comments on commit e10aa4b

Please sign in to comment.