Example #1
0
 /**
  * @param int $streamVersion
  * @param Event[] $events
  */
 public function __construct($streamVersion, array $events)
 {
     Assert::argumentAtLeast($streamVersion, 1, 'Stream version must be 1 at least');
     Assert::argumentLengthAtLeast($events, 1, 'Events list must NOT be empty');
     $this->streamVersion = $streamVersion;
     array_walk($events, function (Event $event) {
         $this->events[] = $event;
     });
 }
 /**
  * @param Event[] $domainEvents
  * @param int $eventStreamVersion
  * @return $this
  */
 public static function constructWithEventStream(array $domainEvents, $eventStreamVersion)
 {
     Assert::argumentAtLeast($eventStreamVersion, 1, 'Event version number must be at least 1');
     $self = (new ReflectionClass(get_called_class()))->newInstanceWithoutConstructor();
     foreach ($domainEvents as $domainEvent) {
         $self->mutateWhen($domainEvent);
     }
     $self->setUnmutatedVersion($eventStreamVersion);
     return $self;
 }