public function testGlobalScore() { $dispatcher = new EventDispatcher(); $testers = array('Activity', 'Composer', 'Followers', 'KnpBundles', 'Readme', 'Travis'); foreach ($testers as $testerClass) { $fqcn = sprintf('\\Knp\\Bundle\\KnpBundlesBundle\\EventListener\\Scoring\\%sListener', $testerClass); $tester = new $fqcn(); $dispatcher->addListener(BundleEvent::UPDATE_SCORE, array($tester, 'onScoreUpdate')); } $bundle = new Bundle(); // activity (+4) $bundle->setLastCommitAt(new \DateTime('-10days')); // composer (+5) $bundle->setComposerName('bundle-composer-name'); // followers (+10) $bundle->setNbFollowers(10); // recommendation (+5) $bundle->addRecommender(new Developer()); // readme (+5) $bundle->setReadme(str_repeat('-', 500)); // travis (+10) $bundle->setUsesTravisCi(true); $bundle->setTravisCiBuildStatus(true); $dispatcher->dispatch(BundleEvent::UPDATE_SCORE, new BundleEvent($bundle)); $bundle->recalculateScore(); $this->assertEquals(39, $bundle->getScore()); }
/** * Populates document with bundle data. * * @param \Solarium_Document_ReadWrite $document * @param Bundle $bundle * @param \Solarium_Query_Helper $helper */ private function updateDocumentFromBundle(\Solarium_Document_ReadWrite $document, Bundle $bundle, \Solarium_Query_Helper $helper) { $document->setField('id', $bundle->getId()); $document->setField('name', $bundle->getName()); $document->setField('ownerName', $bundle->getOwnerName()); $document->setField('ownerType', $bundle->getOwnerType()); $document->setField('fullName', $bundle->getFullName()); $document->setField('description', $bundle->getDescription()); $document->setField('readme', $bundle->getReadme()); $document->setField('totalScore', $bundle->getScore()); $document->setField('state', $bundle->getState()); $document->setField('avatarUrl', $bundle->getOwner()->getAvatarUrl()); $document->setField('lastCommitAt', $helper->formatDate(clone $bundle->getLastCommitAt())); $document->setField('lastTweetedAt', null !== $bundle->getLastTweetedAt() ? $helper->formatDate($bundle->getLastTweetedAt()) : null); $keywords = array(); foreach ($bundle->getKeywords() as $keyword) { $keywords[mb_strtolower($keyword->getValue(), 'UTF-8')] = true; } $document->setField('keywords', array_keys($keywords)); }
/** * Generate Badge images * * @param Bundle $bundle */ public function generate(Bundle $bundle) { // Open bg badge image $image = $this->imagine->open($this->getResourceDir() . '/images/' . $this->type[self::LONG]); $imageShort = $this->imagine->open($this->getResourceDir() . '/images/' . $this->type[self::SHORT]); // Bundle Title $bundleName = $this->shorten($bundle->getName(), 16); $image->draw()->text($bundleName, $this->setFont($this->imagine, $this->font, 14, '085066'), new Point(75, 10)); // Score points $score = $bundle->getScore() ?: 'N/A'; $image->draw()->text($score, $this->setFont($this->imagine, $this->font, 18), $this->getPositionByType($score, self::LONG)); $imageShort->draw()->text($score, $this->setFont($this->imagine, $this->font, 16), $this->getPositionByType($score, self::SHORT)); // Recommend $recommenders = $bundle->getNbRecommenders(); if ($recommenders) { $recommendationsText = $recommenders . ' recommendations'; } else { $recommendationsText = 'No recommendations'; } $image->draw()->text($recommendationsText, $this->setFont($this->imagine, $this->font, 9), new Point(92, 33)); // Check or create dir for generated badges $this->createBadgesDir(); // Remove existing badge $this->filesystem->remove($this->getBadgeFile($bundle)); $this->filesystem->remove($this->getBadgeFile($bundle, self::SHORT)); // Save badge $image->save($this->getBadgeFile($bundle)); $imageShort->save($this->getBadgeFile($bundle, self::SHORT)); // Set write permission for father files update chmod($this->getBadgeFile($bundle), 0777); chmod($this->getBadgeFile($bundle, self::SHORT), 0777); }