Skip to content

Commit

Permalink
Internal Provider improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Ph3nol committed Jun 11, 2012
1 parent 8f88adc commit 767e177
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 53 deletions.
14 changes: 7 additions & 7 deletions Manager/Manager.php
Expand Up @@ -142,18 +142,18 @@ public function getLinkEntityFromHash($hash)
}

/**
* Get last internal Link entry.
* Get internal links count.
*
* @return Link
* @return integer
*/
public function getLastInternalLink()
public function getInternalLinksCount()
{
$q = $this->getRepository()
->createQueryBuilder('l')
->where('l.provider = :internalProvider')
->setParameter('internalProvider', 'internal');

return $q->getQuery()->getOneOrNullResult();
return count($q->getQuery());
}

/**
Expand All @@ -168,10 +168,10 @@ public function createNewLink($object)
$objectEntityClass = get_class($object);
$objectEntityConfig = $this->configEntities->getEntities()->offsetGet($objectEntityClass);
$providerApiInformations = isset($objectEntityConfig['api']) ? $objectEntityConfig['api'] : null;
$providerParams = isset($objectEntityConfig['params']) ? $objectEntityConfig['params'] : array();

if ($lastLink = $this->getLastInternalLink()) {
$this->shortener->setLastLink($lastLink);
}
$providerParams['internalLinksCount'] = $this->getInternalLinksCount();
$this->shortener->setProviderParams($providerParams);

$this->shortener->setProvider(
$objectEntityConfig['provider'],
Expand Down
6 changes: 2 additions & 4 deletions Manager/ManagerInterface.php
Expand Up @@ -31,11 +31,9 @@ public function getLinkEntityFromLongUrl($longUrl);
public function getLinkEntityFromHash($hash);

/**
* Get last internal Link entry.
*
* @return Link
* @return integer
*/
public function getLastInternalLink();
public function getInternalLinksCount();

/**
* @param object $object Object
Expand Down
11 changes: 9 additions & 2 deletions Provider/BaseProvider.php
Expand Up @@ -16,6 +16,11 @@ abstract class BaseProvider
*/
protected $curl;

/**
* @var array $params
*/
protected $params;

/**
* @var string
*/
Expand All @@ -25,12 +30,14 @@ abstract class BaseProvider
* Constructor.
*
* @param array $apiData Provider API data from project configuration file
* @param array $params Provider parameters
*
* @return void
*/
public function __construct(array $apiData = array())
public function __construct(array $apiData = array(), array $params = array())
{
$this->curl = new Curl();
$this->curl = new Curl();
$this->params = $params;
}

/**
Expand Down
29 changes: 7 additions & 22 deletions Provider/Internal.php
Expand Up @@ -2,8 +2,8 @@

namespace Sly\UrlShortenerBundle\Provider;

use Sly\UrlShortenerBundle\Model\LinkInterface;
use Sly\UrlShortenerBundle\Provider;
use Sly\UrlShortenerBundle\Shortener\Shortener;

/**
* Internal provider.
Expand All @@ -13,21 +13,6 @@
*/
class Internal extends BaseProvider implements ProviderInterface
{
/**
* @var LinkInterface $lastLink
*/
protected $lastLink = null;

/**
* Set last Link.
*
* @param LinkInterface $lastLink Link
*/
public function setLastLink(LinkInterface $lastLink)
{
$this->lastLink = $lastLink;
}

/**
* Create short URL.
*
Expand All @@ -37,15 +22,15 @@ public function shorten()
{
parent::shorten();

$lastLinkHash = $this->lastLink ? $this->lastLink->getHash() : null;
if (!$this->params['domain']) {
throw new \InvalidArgumentException('Internal Provider must have a domain to generate short URLs');
}

/**
* @todo
*/
$newLinkHash = Shortener::getHashFromBit($this->params['internalLinksCount']++);

return array(
'hash' => '',
'shortUrl' => '',
'hash' => $newLinkHash,
'shortUrl' => sprintf('http://%s/%s', $this->params['domain'], $newLinkHash),
);
}
}
49 changes: 37 additions & 12 deletions Shortener/Shortener.php
Expand Up @@ -3,7 +3,6 @@
namespace Sly\UrlShortenerBundle\Shortener;

use Sly\UrlShortenerBundle\Entity\Link;
use Sly\UrlShortenerBundle\Model\LinkInterface;
use Sly\UrlShortenerBundle\Provider\ProviderInterface;
use Sly\UrlShortenerBundle\Provider\Internal,
Sly\UrlShortenerBundle\Provider\Bitly,
Expand All @@ -17,23 +16,31 @@
class Shortener implements ShortenerInterface
{
/**
* @var LinkInterface $lastLink
* @var integer $providerParams
*/
protected $lastLink = null;
protected $providerParams;

/**
* @var ProviderInterface $provider
*/
protected $provider;

/**
* Set last Link.
* Constructor.
*/
public function __construct()
{
$this->providerParams = array();
}

/**
* Set Provider params.
*
* @param LinkInterface $lastLink Link
* @param array $providerParams Provider parameters
*/
public function setLastLink(LinkInterface $lastLink)
public function setProviderParams(array $providerParams = array())
{
$this->lastLink = $lastLink;
$this->providerParams = $providerParams;
}

/**
Expand All @@ -50,11 +57,7 @@ public function setProvider($provider, array $providerApiData = array())
{
default:
case 'internal':
$this->provider = new Internal();

if ($lastLink = $this->lastLink) {
$this->provider->setLastLink($this->lastLink);
}
$this->provider = new Internal(array(), $this->providerParams);

break;

Expand Down Expand Up @@ -83,4 +86,26 @@ public function createShortUrl($longUrl)

return $this->provider->shorten();
}

/**
* Get hash from bit.
* The trick is to create your own base system with a custom set of characters.
*
* @param integer $bit Bit number
*
* @return string
*/
public static function getHashFromBit($bitNumber = 1)
{
$codeSet = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$base = strlen($codeSet);
$converted = '';

while ($bitNumber > 0) {
$converted = substr($codeSet, ($bitNumber % $base), 1).$converted;
$bitNumber = floor($bitNumber / $base);
}

return $converted;
}
}
15 changes: 9 additions & 6 deletions Shortener/ShortenerInterface.php
Expand Up @@ -2,8 +2,6 @@

namespace Sly\UrlShortenerBundle\Shortener;

use Sly\UrlShortenerBundle\Model\LinkInterface;

/**
* Shortener service interface.
*
Expand All @@ -12,11 +10,9 @@
interface ShortenerInterface
{
/**
* Set last Link.
*
* @param LinkInterface $lastLink Link
* @param array $providerParams Provider parameters
*/
public function setLastLink(LinkInterface $lastLink);
public function setProviderParams(array $providerParams = array());

/**
* @param string $provider Provider name
Expand All @@ -30,4 +26,11 @@ public function setProvider($provider, array $providerApiData = array());
* @return string
*/
public function createShortUrl($longUrl);

/**
* @param integer $bit Bit number
*
* @return string
*/
public static function getHashFromBit($bitNumber = 1);
}

0 comments on commit 767e177

Please sign in to comment.