function it_calls_proper_factory_methods_based_on_configuration(RequestConfiguration $requestConfiguration, FactoryInterface $factory) { $requestConfiguration->getFactoryMethod()->willReturn('createNew'); $requestConfiguration->getFactoryArguments()->willReturn(['00032']); $factory->createNew('00032')->willReturn(['foo', 'bar']); $this->create($requestConfiguration, $factory)->shouldReturn(['foo', 'bar']); }
/** * {@inheritdoc} */ public function create(RequestConfiguration $requestConfiguration, FactoryInterface $factory) { if (null === ($method = $requestConfiguration->getFactoryMethod())) { return $factory->createNew(); } $arguments = array_values($requestConfiguration->getFactoryArguments()); return $factory->{$method}(...$arguments); }
/** * {@inheritdoc} */ public function create(RequestConfiguration $requestConfiguration, FactoryInterface $factory) { if (null === ($method = $requestConfiguration->getFactoryMethod())) { return $factory->createNew(); } $callable = [$factory, $method]; $arguments = $requestConfiguration->getFactoryArguments(); return call_user_func_array($callable, $arguments); }