/**
  * @param array $data
  * @return PushEvent
  */
 private function createPushEvent($data)
 {
     $event = new PushEvent();
     $event->provider = self::NAME;
     $event->before = $data['before'];
     $event->after = $data['after'];
     $event->ref = $data['ref'];
     $user = new User();
     $user->id = $data['sender']['id'];
     $user->name = $data['pusher']['name'];
     if (isset($data['pusher']['email'])) {
         $user->email = $data['pusher']['email'];
     }
     $repository = new Repository();
     $repository->id = $data['repository']['id'];
     $repository->name = $data['repository']['name'];
     $repository->namespace = $this->extractNamespace($data['repository']['full_name']);
     $repository->description = $data['repository']['description'];
     $repository->homepage = $data['repository']['homepage'];
     $repository->url = $data['repository']['html_url'];
     $event->user = $user;
     $event->repository = $repository;
     $event->commits = $this->createCommits($data['commits']);
     if (!$event->commits) {
         $event->commits[] = $this->createCommit($data['head_commit']);
         // fix empty commits
     }
     $event->type = Util::getPushType($event->ref);
     if ($event->type == PushEvent::TYPE_BRANCH) {
         $event->branchName = Util::getBranchName($event->ref);
     } else {
         $event->tagName = Util::getTagName($event->ref);
     }
     return $event;
 }
 /**
  * @param array $data
  * @return PushEvent
  */
 private function createPushEvent(array $data)
 {
     $event = new PushEvent();
     $event->provider = self::NAME;
     $event->before = $data['before'];
     $event->after = $data['after'];
     $event->ref = $data['ref'];
     $user = new User();
     $user->id = $data['user_id'];
     $user->name = $data['user_name'];
     if (isset($data['user_email'])) {
         $user->email = $data['user_email'];
     }
     $repository = new Repository();
     $repository->id = $data['project_id'];
     $repository->name = $data['project']['name'];
     $repository->namespace = $data['project']['namespace'];
     $repository->description = $data['project']['description'];
     $repository->homepage = $data['project']['homepage'];
     $repository->url = $data['project']['url'];
     $event->user = $user;
     $event->repository = $repository;
     $event->commits = $this->createCommits($data['commits']);
     $event->type = Util::getPushType($event->ref);
     if ($event->type == PushEvent::TYPE_BRANCH) {
         $event->branchName = Util::getBranchName($event->ref);
     } else {
         $event->tagName = Util::getTagName($event->ref);
     }
     return $event;
 }