diff --git a/src/Mustache/Autoloader.php b/src/Mustache/Autoloader.php new file mode 100644 index 0000000..d50af91 --- /dev/null +++ b/src/Mustache/Autoloader.php @@ -0,0 +1,54 @@ +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; + } + } +} diff --git a/test/Mustache/Test/AutoloaderTest.php b/test/Mustache/Test/AutoloaderTest.php new file mode 100644 index 0000000..81e727c --- /dev/null +++ b/test/Mustache/Test/AutoloaderTest.php @@ -0,0 +1,28 @@ +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')); + } +} diff --git a/test/bootstrap.php b/test/bootstrap.php index ced28b8..3335550 100644 --- a/test/bootstrap.php +++ b/test/bootstrap.php @@ -1,16 +1,6 @@