/**
  * Creates an ability and links it to a given competency.
  *
  * @param Competency    $parent
  * @param Ability       $ability
  * @param Level         $level
  * @return \HeVinci\CompetencyBundle\Entity\Ability
  * @throws \LogicException if the parent competency is not a leaf node
  */
 public function createAbility(Competency $parent, Ability $ability, Level $level)
 {
     if ($parent->getRight() - $parent->getLeft() > 1) {
         throw new \LogicException("Cannot associate an ability with competency '{$parent->getName()}'" . ': competency must be a leaf node');
     }
     $link = new CompetencyAbility();
     $link->setCompetency($parent);
     $link->setAbility($ability);
     $link->setLevel($level);
     $this->om->persist($ability);
     $this->om->persist($link);
     $this->om->flush();
     return $ability;
 }
 private function loadCompetency(Competency $competency)
 {
     return ['id' => $competency->getId(), 'name' => $competency->getName(), 'type' => 'competency_', 'paths' => [['level' => '-', 'steps' => array_map(function ($step) {
         return $step->getName();
     }, $this->competencyRepo->getPath($competency))]]];
 }
 /**
  * @param Competency $competency
  */
 public function setCompetency(Competency $competency)
 {
     $this->competency = $competency;
     $this->competencyName = $competency->getName();
 }