Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor for PHP 8.x and Symfony 5.x #64

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 33 additions & 58 deletions Adapter/AbstractCurrencyAdapter.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,114 +2,91 @@

namespace Lexik\Bundle\CurrencyBundle\Adapter;

use ArrayIterator;
use Lexik\Bundle\CurrencyBundle\Entity\Currency;

/**
*
* @author Cédric Girard <[email protected]>
* @author Yoann Aparici <[email protected]>
* @extends ArrayIterator<string, Currency>
*/
abstract class AbstractCurrencyAdapter extends \ArrayIterator
abstract class AbstractCurrencyAdapter extends ArrayIterator
{
/**
* @var string
*/
protected $defaultCurrency;
protected string $defaultCurrency;

/**
* @var array
* @var array<string>
*/
protected $managedCurrencies = array();
protected array $managedCurrencies = [];

/**
* @var string
* @var class-string
*/
protected $currencyClass;
protected string $currencyClass;

/**
* Set default currency
*
* @param string $defaultCurrency
*/
public function setDefaultCurrency($defaultCurrency)
public function setDefaultCurrency(string $defaultCurrency): void
{
$this->defaultCurrency = $defaultCurrency;
}

/**
* Get default currency
*
* @return string
*/
public function getDefaultCurrency()
public function getDefaultCurrency(): string
{
return $this->defaultCurrency;
}

/**
* Get managedCurrencies
*
* @param array $currencies
* @param array<string> $currencies
*/
public function setManagedCurrencies($currencies)
public function setManagedCurrencies(array $currencies): void
{
$this->managedCurrencies = $currencies;
}

/**
* Get managedCurrencies
*
* @return array
* @return array<string>
*/
public function getManagedCurrencies()
public function getManagedCurrencies(): array
{
return $this->managedCurrencies;
}

/**
* Get managedCurrencies
*
* @return array
* @param class-string $currencyClass
*/
public function setCurrencyClass($currencyClass)
public function setCurrencyClass(string $currencyClass): void
{
return $this->currencyClass = $currencyClass;
$this->currencyClass = $currencyClass;
}

/**
* Set object
*
* @param mixed $index
* @param Currency $newval
* @param string $key
* @param Currency $value
*/
public function offsetSet($index, $newval)
public function offsetSet($key, $value): void
{
if (!$newval instanceof $this->currencyClass) {
throw new \InvalidArgumentException(sprintf('$newval must be an instance of Currency, instance of "%s" given', get_class($newval)));
if (!$value instanceof $this->currencyClass) {
throw new \InvalidArgumentException(sprintf('$newval must be an instance of Currency, instance of "%s" given', $value::class));
}

parent::offsetSet($index, $newval);
parent::offsetSet($key, $value);
}

/**
* Append a value
*
* @param Currency $value
*/
public function append($value)
public function append($value): void
{
if (!$value instanceof $this->currencyClass) {
throw new \InvalidArgumentException(sprintf('$newval must be an instance of Currency, instance of "%s" given', get_class($value)));
throw new \InvalidArgumentException(sprintf('$newval must be an instance of Currency, instance of "%s" given', $value::class));
}

parent::append($value);
}

/**
* Convert all
*
* @param mixed $rate
*/
protected function convertAll($rate)
protected function convertAll(float $rate): void
{
/** @var Currency $currency */
foreach ($this as $currency) {
$currency->convert($rate);
}
Expand All @@ -119,13 +96,11 @@ protected function convertAll($rate)
* This method is used by the constructor
* to attach all currencies.
*/
abstract public function attachAll();
abstract public function attachAll(): void;

/**
* Get identier value for the adapter must be unique
* Get identifier value for the adapter must be unique
* for all the project
*
* @return string
*/
abstract protected function getIdentifier();
}
abstract public function getIdentifier(): string;
}
22 changes: 6 additions & 16 deletions Adapter/AdapterCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,22 @@
*/
final class AdapterCollector
{
private $elements = array();

/**
* Add an adapter
*
* @param mixed $key
* @param AbstractCurrencyAdapter $adapter
* @var array<string, AbstractCurrencyAdapter>
*/
public function add(AbstractCurrencyAdapter $adapter)
private array $elements = [];

public function add(AbstractCurrencyAdapter $adapter): void
{
$this->elements[$adapter->getIdentifier()] = $adapter;
}

/**
* Get adapter
*
* @param mixed $key
* @return AbstractCurrencyAdapter
*/
public function get($key)
public function get(string $key): AbstractCurrencyAdapter
{
if (!isset($this->elements[$key])) {
throw new InvalidArgumentException('Adapter does not exist');
}

return $this->elements[$key];
}

}
}
87 changes: 35 additions & 52 deletions Adapter/AdapterFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,44 @@

namespace Lexik\Bundle\CurrencyBundle\Adapter;

use Doctrine\ORM\EntityManager;
use Doctrine\Bundle\DoctrineBundle\Registry;
use Doctrine\ORM\EntityManager;

/**
* This class is used to create DoctrineCurrencyAdapter
*
* @author Yoann Aparici <[email protected]>
* @author Cédric Girard <[email protected]>
*/
class AdapterFactory
{
/**
* @var EntityManager
*/
protected $doctrine;

/**
* @var array
* @var array{default: string, managed: array<string>}
*/
private $currencies;
private array $currencies;

/**
* @var string
* @param Registry $doctrine
* @param string $defaultCurrency
* @param array<string> $availableCurrencies
* @param class-string $currencyClass
*/
private $currencyClass;

/**
* __construct
*
* @param EntityManager $em
*/
public function __construct(Registry $doctrine, $defaultCurrency, $availableCurrencies, $currencyClass)
{
$this->doctrine = $doctrine;

$this->currencies = array();
$this->currencies['default'] = $defaultCurrency;
$this->currencies['managed'] = $availableCurrencies;
$this->currencyClass = $currencyClass;
public function __construct(
protected Registry $doctrine,
string $defaultCurrency,
array $availableCurrencies,
private string $currencyClass
) {
$this->currencies = [
'default' => $defaultCurrency,
'managed' => $availableCurrencies
];
}

/**
* Create an adaper from the given class.
*
* @param string $adapterClass
* @return Lexik\Bundle\CurrencyBundle\Adapter\AbstractCurrencyAdapter
* @param class-string $adapterClass
*/
public function create($adapterClass)
public function create(string $adapterClass): AbstractCurrencyAdapter
{
/** @var AbstractCurrencyAdapter $adapter */
$adapter = new $adapterClass();
$adapter->setDefaultCurrency($this->currencies['default']);
$adapter->setManagedCurrencies($this->currencies['managed']);
Expand All @@ -60,62 +49,56 @@ public function create($adapterClass)
}

/**
* Create a DoctrineCurrencyAdapter.
*
* @return Lexik\Bundle\CurrencyBundle\Adapter\DoctrineCurrencyAdapter
* @param ?class-string $adapterClass
*/
public function createDoctrineAdapter($adapterClass = null, $entityManagerName = null)
public function createDoctrineAdapter(string $adapterClass = null, string $entityManagerName = null): AbstractCurrencyAdapter
{
if (null == $adapterClass) {
$adapterClass = 'Lexik\Bundle\CurrencyBundle\Adapter\DoctrineCurrencyAdapter';
$adapterClass = DoctrineCurrencyAdapter::class;
}
/** @var DoctrineCurrencyAdapter $adapter */
$adapter = $this->create($adapterClass);

/** @var EntityManager $em */
$em = $this->doctrine->getManager($entityManagerName);
$adapter->setManager($em);

return $adapter;
}

/**
* Create an EcbCurrencyAdapter.
*
* @return Lexik\Bundle\CurrencyBundle\Adapter\EcbCurrencyAdapter
* @param ?class-string $adapterClass
*/
public function createEcbAdapter($adapterClass = null)
public function createEcbAdapter(string $adapterClass = null): AbstractCurrencyAdapter
{
if (null == $adapterClass) {
$adapterClass = 'Lexik\Bundle\CurrencyBundle\Adapter\EcbCurrencyAdapter';
$adapterClass = EcbCurrencyAdapter::class;
}

return $this->create($adapterClass);
}

/**
* Create an OerCurrencyAdapter.
*
* @return Lexik\Bundle\CurrencyBundle\Adapter\OerCurrencyAdapter
* @param ?class-string $adapterClass
*/
public function createOerAdapter($adapterClass = null)
public function createOerAdapter(string $adapterClass = null): AbstractCurrencyAdapter
{
if (null == $adapterClass) {
$adapterClass = 'Lexik\Bundle\CurrencyBundle\Adapter\OerCurrencyAdapter';
$adapterClass = OerCurrencyAdapter::class;
}

return $this->create($adapterClass);
}

/**
* Create an YahooCurrencyAdapter.
*
* @return Lexik\Bundle\CurrencyBundle\Adapter\YahooCurrencyAdapter
* @param ?class-string $adapterClass
*/
public function createYahooAdapter($adapterClass = null)
public function createYahooAdapter(string $adapterClass = null): AbstractCurrencyAdapter
{
if (null == $adapterClass) {
$adapterClass = 'Lexik\Bundle\CurrencyBundle\Adapter\YahooCurrencyAdapter';
$adapterClass = YahooCurrencyAdapter::class;
}

return $this->create($adapterClass);
}
}
}
Loading