From 01312d3e9834114855a59cf91ca07fc1cc947613 Mon Sep 17 00:00:00 2001 From: Justin Hileman Date: Thu, 1 Mar 2012 06:48:25 -0800 Subject: [PATCH] Add a Mustache Autoloader implementation. --- src/Mustache/Autoloader.php | 54 +++++++++++++++++++ test/Mustache/Test/AutoloaderTest.php | 28 ++++++++++ test/bootstrap.php | 14 +---- test/fixtures/autoloader/Mustache/Bar.php | 7 +++ test/fixtures/autoloader/Mustache/Foo.php | 7 +++ test/fixtures/autoloader/NonMustacheClass.php | 5 ++ 6 files changed, 103 insertions(+), 12 deletions(-) create mode 100644 src/Mustache/Autoloader.php create mode 100644 test/Mustache/Test/AutoloaderTest.php create mode 100644 test/fixtures/autoloader/Mustache/Bar.php create mode 100644 test/fixtures/autoloader/Mustache/Foo.php create mode 100644 test/fixtures/autoloader/NonMustacheClass.php 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 @@