/**
  * @param IEvent $event
  *
  * @return IEvent
  */
 public function save(IEvent $event)
 {
     $this->latestEvent = $event;
     if (null === $event->getId()) {
         $event->setId((string) Uuid::uuid4());
     }
     $filename = sprintf('%s.%s.event', $this->prepareFilename($event->getEndpoint()), $event->getId());
     $file = null;
     try {
         $filePath = $this->directory . '/' . $filename;
         if (!file_exists($filePath)) {
             $this->writer->open($filePath, 'w+');
             $this->writer->write($event->getMethod() . ' ' . $event->getEndpoint() . PHP_EOL);
             $this->writer->write($event->getReference() . PHP_EOL);
             $this->writer->write($event->getRequest() . PHP_EOL);
         } else {
             $this->writer->open($filePath, 'a');
             $this->writer->write($event->getLatency() . PHP_EOL);
             $this->writer->write($event->getResponse() . PHP_EOL);
         }
     } catch (Exception $e) {
         if (null !== $this->logger) {
             $this->logger->error($e);
         }
     } finally {
         if ($this->writer->isOpen()) {
             $this->writer->close();
         }
     }
     return $event;
 }
 /**
  * Save event.
  *
  * @param IEvent $event
  *
  * @return IEvent
  */
 public function save(IEvent $event)
 {
     if (null !== $event->getId()) {
         return $event;
     }
     $event->setId((string) Uuid::uuid4());
     $this->events[] = $event;
     return $event;
 }
 function it_returns_its_last_event(IEvent $event, PDO $connection, PDOStatement $statement)
 {
     $event->getId()->shouldBeCalled()->willReturn(null);
     $event->getEndpoint()->shouldBeCalled()->willReturn('http://example.com');
     $event->getMethod()->shouldBeCalled()->willReturn('POST');
     $event->getRequest()->shouldBeCalled()->willReturn('request');
     $event->getReference()->shouldBeCalled()->willReturn(null);
     $connection->prepare('INSERT INTO table VALUES(:endpoint, :method, :reference, :request)')->shouldBeCalled()->willReturn($statement);
     $statement->execute([':endpoint' => 'http://example.com', ':method' => 'POST', ':reference' => null, ':request' => 'request'])->shouldBeCalled();
     $connection->lastInsertId()->shouldBeCalled()->willReturn(12);
     $event->setId(12)->shouldBeCalled();
     $this->save($event);
     $this->getLastEvent()->shouldReturn($event);
 }
 function it_returns_last_event(IWriter $writer, IEvent $event)
 {
     $writer->open(Argument::type('string'), 'w+')->shouldBeCalled()->willReturn($writer);
     $event->getId()->shouldBeCalled()->willReturn(null);
     $event->setId(Argument::type('string'))->shouldBeCalled();
     $event->getEndpoint()->shouldBeCalled()->willReturn('file');
     $event->getMethod()->shouldBeCalled()->willReturn('POST');
     $event->getReference()->shouldBeCalled()->willReturn('ref');
     $event->getRequest()->shouldBeCalled()->willReturn('request');
     $writer->write('POST file' . PHP_EOL)->shouldBeCalled();
     $writer->write('ref' . PHP_EOL)->shouldBeCalled();
     $writer->write('request' . PHP_EOL)->shouldBeCalled();
     $writer->isOpen()->shouldBeCalled()->willReturn(true);
     $writer->close()->shouldBeCalled();
     $this->save($event);
     $this->getLastEvent()->shouldreturn($event);
 }
 /**
  * Insert new event.
  *
  * @param IEvent $event
  *
  * @return int
  */
 protected function insert(IEvent $event)
 {
     $statement = $this->connection->prepare('INSERT INTO ' . $this->table . ' VALUES(:endpoint, :method, :reference, :request)');
     $statement->execute([':endpoint' => $event->getEndpoint(), ':method' => $event->getMethod(), ':reference' => $event->getReference(), ':request' => $event->getRequest()]);
     $id = $this->connection->lastInsertId();
     $event->setId($id);
     return $id;
 }
 function it_saves_events(IEvent $event)
 {
     $event->getId()->shouldBeCalled()->willReturn(null);
     $event->setId(Argument::type('string'))->shouldBeCalled();
     $this->save($event);
 }