/** * Registers the filter. * * @param Finder $finder * @param string $name The filter's name * @param string $filter The filter * * @throws Exception\Filter\ContinueException When the filter wasn't choosen * @throws Exception\Filter\InvaildFilterException When the filter is wrong * @throws Exception\Filter\InvaildFilterException When the filter doesn't implement FilterInterface */ private function registerFilter($finder, $name, $filter) { $filters = $this->getAvailableFilters(); $choosenFilters = $this->getFilters(); if (!in_array($name, $choosenFilters)) { throw new Exception\Filter\ContinueException(sprintf('Filter "%s" is not choosen', $name)); } if (is_callable($filter)) { $filter = call_user_func($filter); } elseif (isset($filters[$filter])) { $filter = call_user_func($filters[$filter]); } elseif (class_exists($filter)) { $filter = new $filter(); } else { throw new Exception\Filter\InvalidFilterException(array('a callable which returns a filter class', 'a build-in filter name')); } if (!$filter instanceof FilterInterface) { throw new Exception\Filter\InvalidFilterException('an instance of Inspector\\Filter\\FilterInterface'); } $finder->filter(function (\SplFileInfo $file) use($filter) { return $filter->filter($file); }); }