Add MoneyFactory

This commit is contained in:
Alex P 2022-02-11 12:05:21 +02:00
parent 7f7ae4c700
commit 5cbd84a050
4 changed files with 80 additions and 36 deletions

View file

@ -27,6 +27,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Factory\ApplicationContextFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\AuthorizationFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\CaptureFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\ItemFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\MoneyFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\PatchCollectionFactory;
use WooCommerce\PayPalCommerce\ApiClient\Factory\PayeeFactory;
@ -280,9 +281,13 @@ return array(
$item_factory = $container->get( 'api.factory.item' );
return new AmountFactory(
$item_factory,
$container->get( 'api.factory.money' ),
$container->get( 'api.shop.currency' )
);
},
'api.factory.money' => static function ( ContainerInterface $container ): MoneyFactory {
return new MoneyFactory();
},
'api.factory.payer' => static function ( ContainerInterface $container ): PayerFactory {
$address_factory = $container->get( 'api.factory.address' );
return new PayerFactory( $address_factory );

View file

@ -28,6 +28,13 @@ class AmountFactory {
*/
private $item_factory;
/**
* The Money factory.
*
* @var MoneyFactory
*/
private $money_factory;
/**
* 3-letter currency code of the shop.
*
@ -38,12 +45,14 @@ class AmountFactory {
/**
* AmountFactory constructor.
*
* @param ItemFactory $item_factory The Item factory.
* @param string $currency 3-letter currency code of the shop.
* @param ItemFactory $item_factory The Item factory.
* @param MoneyFactory $money_factory The Money factory.
* @param string $currency 3-letter currency code of the shop.
*/
public function __construct( ItemFactory $item_factory, string $currency ) {
$this->item_factory = $item_factory;
$this->currency = $currency;
public function __construct( ItemFactory $item_factory, MoneyFactory $money_factory, string $currency ) {
$this->item_factory = $item_factory;
$this->money_factory = $money_factory;
$this->currency = $currency;
}
/**
@ -169,16 +178,7 @@ class AmountFactory {
* @throws RuntimeException When JSON object is malformed.
*/
public function from_paypal_response( \stdClass $data ): Amount {
if ( ! isset( $data->value ) || ! is_numeric( $data->value ) ) {
throw new RuntimeException( __( 'No value given', 'woocommerce-paypal-payments' ) );
}
if ( ! isset( $data->currency_code ) ) {
throw new RuntimeException(
__( 'No currency given', 'woocommerce-paypal-payments' )
);
}
$money = new Money( (float) $data->value, $data->currency_code );
$money = $this->money_factory->from_paypal_response( $data );
$breakdown = ( isset( $data->breakdown ) ) ? $this->break_down( $data->breakdown ) : null;
return new Amount( $money, $breakdown );
}

View file

@ -0,0 +1,39 @@
<?php
/**
* The Money factory.
*
* @package WooCommerce\PayPalCommerce\ApiClient\Factory
*/
declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\ApiClient\Factory;
use stdClass;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Money;
use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException;
/**
* Class MoneyFactory
*/
class MoneyFactory {
/**
* Returns a Money object based off a PayPal Response.
*
* @param stdClass $data The JSON object.
*
* @return Money
* @throws RuntimeException When JSON object is malformed.
*/
public function from_paypal_response( stdClass $data ): Money {
if ( ! isset( $data->value ) || ! is_numeric( $data->value ) ) {
throw new RuntimeException( 'No money value given' );
}
if ( ! isset( $data->currency_code ) ) {
throw new RuntimeException( 'No currency given' );
}
return new Money( (float) $data->value, $data->currency_code );
}
}