diff --git a/spec/Tacker/LoaderBuilderSpec.php b/spec/Tacker/LoaderBuilderSpec.php new file mode 100644 index 0000000..8628c07 --- /dev/null +++ b/spec/Tacker/LoaderBuilderSpec.php @@ -0,0 +1,24 @@ +beConstructedWith([]); + } + + function it_is_initializable() + { + $this->shouldHaveType('Tacker\LoaderBuilder'); + } + + function it_builds_loader() + { + $this->build()->shouldHaveType('Tacker\Loader\CacheLoader'); + } +} diff --git a/src/Loader/AbstractLoader.php b/src/Loader/AbstractLoader.php index a6b2d36..6237586 100644 --- a/src/Loader/AbstractLoader.php +++ b/src/Loader/AbstractLoader.php @@ -32,7 +32,9 @@ public function load($resource, $type = null) return $this->parse($this->read($resource), $resource); } - protected function parse(array $parameters, $resource) + abstract protected function read($resource); + + private function parse(array $parameters, $resource) { if (!isset($parameters['@import'])) { return $parameters; @@ -44,13 +46,16 @@ protected function parse(array $parameters, $resource) unset($parameters['@import']); foreach ($imports as $import) { - $this->setCurrentDir(dirname($import)); - - $inherited = array_replace($inherited, $this->import($import, null, false, $resource)); + $inherited = $this->parseImport($import, $resource, $inherited); } return array_replace($inherited, $parameters); } - abstract protected function read($resource); + private function parseImport($import, $resource, $inherited) + { + $this->setCurrentDir(dirname($import)); + + return array_replace($inherited, $this->import($import, null, false, $resource)); + } }