Add a Mustache Autoloader implementation.

This commit is contained in:
Justin Hileman
2012-03-01 07:09:36 -08:00
parent 1f97e2cb5e
commit 01312d3e98
6 changed files with 103 additions and 12 deletions
+54
View File
@@ -0,0 +1,54 @@
<?php
namespace Mustache;
/**
* Mustache class autoloader.
*/
class Autoloader {
private $baseDir;
/**
* Autoloader constructor.
*
* @param string $baseDir Mustache library base directory (default: __DIR__.'/..')
*/
public function __construct($baseDir = null) {
$this->baseDir = rtrim($baseDir, '/') ?: __DIR__.'/..';
}
/**
* Register a new instance as an SPL autoloader.
*
* @param string $baseDir Mustache library base directory (default: __DIR__.'/..')
*
* @return \Mustache\Autoloader Registered Autoloader instance
*/
static public function register($baseDir = null) {
$loader = new self($baseDir);
spl_autoload_register(array($loader, 'autoload'));
return $loader;
}
/**
* Autoload Mustache classes.
*
* @param string $class
*/
public function autoload($class) {
if ($class[0] === '\\') {
$class = substr($class, 1);
}
if (strpos($class, 'Mustache') !== 0) {
return;
}
$file = sprintf('%s/%s.php', $this->baseDir, str_replace('\\', '/', $class));
if (is_file($file)) {
require $file;
}
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace Mustache\Test;
use Mustache\Autoloader;
/**
* @group unit
*/
class AutoloaderTest extends \PHPUnit_Framework_TestCase {
public function testRegister() {
$loader = Autoloader::register();
$this->assertTrue(spl_autoload_unregister(array($loader, 'autoload')));
}
public function testAutoloader() {
$loader = new Autoloader(__DIR__.'/../../fixtures/autoloader');
$this->assertNull($loader->autoload('NonMustacheClass'));
$this->assertFalse(class_exists('NonMustacheClass'));
$loader->autoload('Mustache\Foo');
$this->assertTrue(class_exists('Mustache\Foo'));
$loader->autoload('\Mustache\Bar');
$this->assertTrue(class_exists('Mustache\Bar'));
}
}
+2 -12
View File
@@ -1,16 +1,6 @@
<?php
require __DIR__.'/../src/Mustache/Buffer.php';
require __DIR__.'/../src/Mustache/Compiler.php';
require __DIR__.'/../src/Mustache/Context.php';
require __DIR__.'/../src/Mustache/Loader.php';
require __DIR__.'/../src/Mustache/Loader/MutableLoader.php';
require __DIR__.'/../src/Mustache/Loader/ArrayLoader.php';
require __DIR__.'/../src/Mustache/Loader/FilesystemLoader.php';
require __DIR__.'/../src/Mustache/Loader/StringLoader.php';
require __DIR__.'/../src/Mustache/Mustache.php';
require __DIR__.'/../src/Mustache/Parser.php';
require __DIR__.'/../src/Mustache/Template.php';
require __DIR__.'/../src/Mustache/Tokenizer.php';
require __DIR__.'/../src/Mustache/Autoloader.php';
\Mustache\Autoloader::register();
require __DIR__.'/lib/yaml/lib/sfYamlParser.php';
+7
View File
@@ -0,0 +1,7 @@
<?php
namespace Mustache;
class Bar {
// nada
}
+7
View File
@@ -0,0 +1,7 @@
<?php
namespace Mustache;
class Foo {
// nada
}
+5
View File
@@ -0,0 +1,5 @@
<?php
class NonMustacheClass {
// noop
}