public function create(ClassType $classType)
 {
     $source = $this->sourceFactory->create($classType);
     //Adds EntityRepository as parent.
     $source->addParent(ClassType::create('NullDev\\Theater\\DoctrineOrm\\EntityRepository'));
     return $source;
 }
 public function create(ClassType $classType)
 {
     $source = $this->sourceFactory->create($classType);
     //Adds ElasticSearchRepository as parent.
     $source->addParent(ClassType::create('Broadway\\ReadModel\\ElasticSearch\\ElasticSearchRepository'));
     return $source;
 }
 public function create(ClassType $classType, array $parameters)
 {
     $source = $this->sourceFactory->create($classType);
     //Add constructor method.
     $source->addConstructorMethod($this->definitionFactory->createConstructorMethod($parameters));
     return $source;
 }
 public function create(ClassType $classType, array $parameters)
 {
     $source = $this->sourceFactory->create($classType);
     //Adds Projector as parent.
     $source->addParent(ClassType::create('Broadway\\ReadModel\\Projector'));
     $source->addConstructorMethod($this->definitionFactory->createConstructorMethod($parameters));
     return $source;
 }
 public function it_will_create_source_from_given_class_type_and_constructor_params(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, ImprovedClassSource $classSource, Parameter $parameter1, Parameter $parameter2, ConstructorMethod $constructorMethod, SerializeMethod $serializeMethod, DeserializeMethod $deserializeMethod)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $definitionFactory->createConstructorMethod([$parameter1, $parameter2])->shouldBeCalled()->willReturn($constructorMethod);
     $definitionFactory->createSerializeMethod($classSource)->shouldBeCalled()->willReturn($serializeMethod);
     $definitionFactory->createDeserializeMethod($classSource)->shouldBeCalled()->willReturn($deserializeMethod);
     $this->create($classType, [$parameter1, $parameter2])->shouldReturn($classSource);
 }
 public function it_will_create_source_from_given_class_type_and_aggregate_root_id_param(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, ImprovedClassSource $classSource, Parameter $parameter, ClassType $parameterClassType, CreateMethod $createMethod, AggregateRootIdGetterMethod $aggregateRootIdGetterMethod)
 {
     $parameter->getClassType()->willReturn($parameterClassType);
     $sourceFactory->create($classType)->willReturn($classSource);
     $definitionFactory->createBroadwayModelCreateMethod($classType, [$parameter])->shouldBeCalled()->willReturn($createMethod);
     $definitionFactory->createBroadwayModelAggregateRootIdGetterMethod($parameter)->shouldBeCalled()->willReturn($aggregateRootIdGetterMethod);
     $this->create($classType, $parameter)->shouldReturn($classSource);
 }
 public function it_will_create_source_from_given_class_type(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, ImprovedClassSource $classSource, Parameter $parameter, ConstructorMethod $constructorMethod, ToStringMethod $toStringMethod, UuidCreateMethod $uuidCreateMethod)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $definitionFactory->createParameter('id', Argument::type(StringType::class))->shouldBeCalled()->willReturn($parameter);
     $definitionFactory->createConstructorMethod([$parameter])->shouldBeCalled()->willReturn($constructorMethod);
     $definitionFactory->createToStringMethod($parameter)->shouldBeCalled()->willReturn($toStringMethod);
     $definitionFactory->createUuidCreateMethod($classType)->shouldBeCalled()->willReturn($uuidCreateMethod);
     $this->create($classType)->shouldReturn($classSource);
 }
 public function create(ClassType $classType, ClassType $modelClassType)
 {
     $source = $this->sourceFactory->create($classType);
     $source->addParent(ClassType::create('Broadway\\EventSourcing\\EventSourcingRepository'));
     $source->addImport(ClassType::create('Broadway\\EventSourcing\\AggregateFactory\\PublicConstructorAggregateFactory'));
     $source->addImport(ClassType::create('Broadway\\EventHandling\\EventBusInterface'));
     $source->addImport(ClassType::create('Broadway\\EventStore\\EventStoreInterface'));
     //Add aggregate root id as property.
     //Add constructor which calls parent constructor method.
     $source->addMethod($this->definitionFactory->createBroadwayModelRepositoryConstructorMethod($modelClassType));
     return $source;
 }
 public function create(ClassType $classType, Parameter $parameter)
 {
     $source = $this->sourceFactory->create($classType);
     $source->addParent(ClassType::create('Broadway\\EventSourcing\\EventSourcedAggregateRoot'));
     //Add aggregate root id as property.
     $source->addProperty($parameter);
     $source->addImport($parameter->getClassType());
     //Add static create() method.
     $source->addMethod($this->definitionFactory->createBroadwayModelCreateMethod($classType, [$parameter]));
     //Add aggregate root id getter.
     $source->addMethod($this->definitionFactory->createBroadwayModelAggregateRootIdGetterMethod($parameter));
     return $source;
 }
 public function create(ClassType $classType)
 {
     $source = $this->sourceFactory->create($classType);
     $param = $this->definitionFactory->createParameter('id', new StringType());
     //Add constructor method.
     $source->addConstructorMethod($this->definitionFactory->createConstructorMethod([$param]));
     //Add __toString() method.
     $source->addMethod($this->definitionFactory->createToStringMethod($param));
     //Add static create() method.
     $source->addMethod($this->definitionFactory->createUuidCreateMethod($classType));
     //Add Ramsey\Uuid\Uuid to imports.
     $source->addImport(ClassType::create('Ramsey\\Uuid\\Uuid'));
     return $source;
 }
 public function create(ClassType $classType, array $parameters)
 {
     $source = $this->sourceFactory->create($classType);
     //Add constructor method.
     $source->addConstructorMethod($this->definitionFactory->createConstructorMethod($parameters));
     //Adds Broadway ReadModelInterface.
     $source->addInterface(InterfaceType::create('Broadway\\ReadModel\\ReadModelInterface'));
     //Adds Broadway SerializableInterface.
     $source->addInterface(InterfaceType::create('Broadway\\Serializer\\SerializableInterface'));
     //Adds serialize() method.
     $source->addMethod($this->definitionFactory->createSerializeMethod($source));
     //Adds static deserialize() method.
     $source->addMethod($this->definitionFactory->createDeserializeMethod($source));
     $source->addMethod($this->definitionFactory->createReadModelIdGetterMethod($parameters[0]));
     return $source;
 }
 /**
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  */
 public function generate(ImprovedClassSource $improvedClassSource)
 {
     $specClassType = ClassType::create('spec\\' . $improvedClassSource->getClassType()->getFullName() . 'Spec');
     $specSource = $this->factory->create($specClassType);
     foreach ($improvedClassSource->getImports() as $import) {
         if (false === $import instanceof TraitType) {
             $specSource->addImport($import);
         }
     }
     $specSource->addImport($improvedClassSource->getClassType());
     $specSource->addImport(ClassType::create('Prophecy\\Argument'));
     $specSource->addParent(ClassType::create('PhpSpec\\ObjectBehavior'));
     $initializable = [$improvedClassSource->getClassType()];
     if ($improvedClassSource->hasParent()) {
         $initializable[] = $improvedClassSource->getParent();
     }
     foreach ($improvedClassSource->getInterfaces() as $interface) {
         $initializable[] = $interface;
     }
     $lets = $improvedClassSource->getConstructorParameters();
     foreach ($improvedClassSource->getConstructorParameters() as $methodParameter) {
         if ($methodParameter->hasClass()) {
             $specSource->addImport($methodParameter->getClassType());
         }
     }
     //@TODO:
     foreach ($improvedClassSource->getMethods() as $method) {
         if ($method instanceof RepositoryConstructorMethod) {
             $lets[] = new Parameter('eventStore', InterfaceType::create('Broadway\\EventStore\\EventStoreInterface'));
             $lets[] = new Parameter('eventBus', InterfaceType::create('Broadway\\EventHandling\\EventBusInterface'));
             $lets[] = new Parameter('eventStreamDecorators', new ArrayType());
         }
     }
     $specSource->addMethod(new LetMethod($lets));
     $specSource->addMethod(new InitializableMethod($initializable));
     $skip = false;
     if (true === $improvedClassSource->hasParent()) {
         if ($improvedClassSource->getParent()->getFullName() === 'Broadway\\EventSourcing\\EventSourcingRepository') {
             $skip = true;
         }
     }
     if (false === $skip) {
         $specSource->addMethod(new ExposeConstructorArgumentsAsGettersMethod($lets));
     }
     return $specSource;
 }
 public function it_will_create_source_from_given_class_type_and_target_entity(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, ImprovedClassSource $classSource, ClassType $modelClassType, RepositoryConstructorMethod $repositoryConstructorMethod)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $definitionFactory->createBroadwayModelRepositoryConstructorMethod($modelClassType)->shouldBeCalled()->willReturn($repositoryConstructorMethod);
     $this->create($classType, $modelClassType)->shouldReturn($classSource);
 }
 public function it_will_create_source_from_given_class_type_and_constructor_params(ClassSourceFactory $sourceFactory, DefinitionFactory $definitionFactory, ClassType $classType, Parameter $parameter, ImprovedClassSource $classSource, ConstructorMethod $constructorMethod)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $this->create($classType)->shouldReturn($classSource);
 }
 public function it_will_create_source_from_given_class_type_and_constructor_params(ClassSourceFactory $sourceFactory, ClassType $classType, ImprovedClassSource $classSource)
 {
     $sourceFactory->create($classType)->willReturn($classSource);
     $this->create($classType)->shouldReturn($classSource);
 }
 public function create(ClassType $classType)
 {
     $source = $this->sourceFactory->create($classType);
     return $source;
 }