Add SingletonDecorator

Refactor PurchaseUnitSanitizer service registration to SingletonDecorator
This commit is contained in:
Pedro Silva 2023-08-10 09:46:15 +01:00
parent 2b497182d3
commit ecb884c86c
No known key found for this signature in database
GPG key ID: E2EE20C0669D24B3
3 changed files with 65 additions and 22 deletions

View file

@ -20,6 +20,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Factory\ShippingOptionFactory;
use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderTransient;
use WooCommerce\PayPalCommerce\ApiClient\Helper\PurchaseUnitSanitizer;
use WooCommerce\PayPalCommerce\Session\SessionHandler;
use WooCommerce\PayPalCommerce\Vendor\Pattern\SingletonDecorator;
use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Authentication\Bearer;
use WooCommerce\PayPalCommerce\ApiClient\Authentication\PayPalBearer;
@ -823,17 +824,12 @@ return array(
$purchase_unit_sanitizer = $container->get( 'api.helper.purchase-unit-sanitizer' );
return new OrderTransient( $cache, $purchase_unit_sanitizer );
},
'api.helper.purchase-unit-sanitizer' => static function( ContainerInterface $container ): PurchaseUnitSanitizer {
$instance = PurchaseUnitSanitizer::get_instance();
if ( $instance ) {
return $instance;
}
'api.helper.purchase-unit-sanitizer' => SingletonDecorator::make(static function( ContainerInterface $container ): PurchaseUnitSanitizer {
$settings = $container->get( 'wcgateway.settings' );
assert( $settings instanceof Settings );
$behavior = $settings->has( 'subtotal_mismatch_behavior' ) ? $settings->get( 'subtotal_mismatch_behavior' ) : null;
$line_name = $settings->has( 'subtotal_mismatch_line_name' ) ? $settings->get( 'subtotal_mismatch_line_name' ) : null;
return PurchaseUnitSanitizer::singleton( $behavior, $line_name );
},
return new PurchaseUnitSanitizer( $behavior, $line_name );
}),
);

View file

@ -19,14 +19,11 @@ namespace WooCommerce\PayPalCommerce\ApiClient\Helper;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Item;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Money;
use WooCommerce\PayPalCommerce\Vendor\Pattern\SingletonTrait;
/**
* Class PurchaseUnitSanitizer
*/
class PurchaseUnitSanitizer {
use SingletonTrait;
const MODE_DITCH = 'ditch';
const MODE_EXTRA_LINE = 'extra_line';
const VALID_MODES = array(
@ -91,17 +88,6 @@ class PurchaseUnitSanitizer {
$this->extra_line_name = $extra_line_name;
}
/**
* PurchaseUnitSanitizer singleton.
*
* @param string|null $mode The mismatch handling mode, ditch or extra_line.
* @param string|null $extra_line_name The name of the extra line.
* @return self
*/
public static function singleton( string $mode = null, string $extra_line_name = null ): self {
return self::set_instance( new self( $mode, $extra_line_name ) );
}
/**
* Indicates if mode is ditch.
*