public function register() { $di = $this->getContainer(); $config = $this->getConfig(); $di->add('lazydata.data', $config['data']); if ($config['container']) { $di->add('lazydata.container', $di->get($config['container'])); } else { $di->add('lazydata.container', false); } $di->add('lazydata.filters', $config['filters']); $di->add('lazydata.filter_separator', $config['filter_separator']); $di->add('lazydata.prefix', $config['prefix']); $di->add('Laasti\\Lazydata\\Resolvers\\FilterResolver', function ($filters, $separator, $fallback = null) { $fallback = $fallback ?: new CallableResolver(); $resolver = new FilterResolver($separator ?: ':', $fallback); foreach ($filters as $key => $callable) { $resolver->setFilter($key, $callable); } return $resolver; })->withArguments(['lazydata.filters', 'lazydata.filter_separator']); $di->add('Laasti\\Lazydata\\Resolvers\\ContainerResolver')->withArguments(['lazydata.container', 'Laasti\\Lazydata\\Resolvers\\CallableResolver', 'lazydata.prefix']); $di->add('Laasti\\Lazydata\\Resolvers\\CallableResolver')->withArgument('lazydata.prefix'); $di->add('Laasti\\Lazydata\\Data')->withArguments(['lazydata.data', 'Laasti\\Lazydata\\Resolvers\\ResolverInterface']); $di->add('Laasti\\Lazydata\\IterableData')->withArguments(['lazydata.data', 'Laasti\\Lazydata\\Resolvers\\ResolverInterface']); $di->add('Laasti\\Lazydata\\Resolvers\\ResolverInterface', function ($container, $prefix, $filters, $separator) use($di) { $callable = new CallableResolver($prefix); if (is_string($container)) { $container = $di->get($container); } if ($container instanceof ContainerInterface && count($filters)) { $containerResolver = new ContainerResolver($container, $callable, $prefix); $resolver = new FilterResolver($separator, $containerResolver); foreach ($filters as $key => $callable) { if (!is_callable($callable)) { $callable = $containerResolver->getCallable($callable); if (is_array($callable)) { $callable = $callable[0]; } } $resolver->setFilter($key, $callable); } } else { if ($container instanceof ContainerInterface) { $resolver = new ContainerResolver($container, $callable, $prefix); } else { if (count($filters)) { $resolver = new FilterResolver($separator, $callable); foreach ($filters as $key => $callable) { $resolver->setFilter($key, $callable); } } else { $resolver = $callable; } } } return $resolver; })->withArguments(['lazydata.container', 'lazydata.prefix', 'lazydata.filters', 'lazydata.filter_separator']); }
public function testInvalidCallable() { $this->setExpectedException('InvalidArgumentException'); $resolver = new FilterResolver(); $resolver->setFilter('mycallable', 'some_invalid_function'); }