Просмотр исходного кода

:shower: extract version and mask pattern constants from QRCode to their respective classes and mark QRCode::VERSION_AUTO and QRCode::MASK_PATTERN_AUTO as deprecated

smiley 3 лет назад
Родитель
Сommit
b48a58462c

+ 2 - 0
src/Common/MaskPattern.php

@@ -25,6 +25,8 @@ use function abs, array_search, count, min;
  */
 final class MaskPattern{
 
+	public const AUTO = -1;
+
 	public const PATTERN_000 = 0b000;
 	public const PATTERN_001 = 0b001;
 	public const PATTERN_010 = 0b010;

+ 2 - 0
src/Common/Version.php

@@ -17,6 +17,8 @@ use chillerlan\QRCode\QRCodeException;
  */
 final class Version{
 
+	public const AUTO = -1;
+
 	/**
 	 * ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
 	 *

+ 1 - 2
src/Data/QRData.php

@@ -11,7 +11,6 @@
 namespace chillerlan\QRCode\Data;
 
 use chillerlan\QRCode\Common\{BitBuffer, EccLevel, MaskPattern, Mode, Version};
-use chillerlan\QRCode\QRCode;
 use chillerlan\Settings\SettingsContainerInterface;
 
 use function sprintf;
@@ -79,7 +78,7 @@ final class QRData{
 	public function setData(array $dataSegments):self{
 		$this->dataSegments = $dataSegments;
 
-		$version = $this->options->version === QRCode::VERSION_AUTO
+		$version = $this->options->version === Version::AUTO
 			? $this->getMinimumVersion()
 			: $this->options->version;
 

+ 15 - 6
src/QRCode.php

@@ -10,7 +10,7 @@
 
 namespace chillerlan\QRCode;
 
-use chillerlan\QRCode\Common\{EccLevel, ECICharset, MaskPattern, Mode};
+use chillerlan\QRCode\Common\{EccLevel, ECICharset, MaskPattern, Mode, Version};
 use chillerlan\QRCode\Data\{AlphaNum, Byte, ECI, Kanji, Number, QRCodeDataException, QRData, QRDataModeInterface, QRMatrix};
 use chillerlan\QRCode\Decoder\{Decoder, DecoderResult, LuminanceSourceInterface};
 use chillerlan\QRCode\Output\{
@@ -30,10 +30,19 @@ use function class_exists, class_implements, in_array, mb_convert_encoding, mb_d
  */
 class QRCode{
 
-	/** @var int */
-	public const VERSION_AUTO      = -1;
-	/** @var int */
-	public const MASK_PATTERN_AUTO = -1;
+	/**
+	 * @deprecated 5.0.0 use Version::AUTO instead
+	 * @see \chillerlan\QRCode\Common\Version::AUTO
+	 * @var int
+	 */
+	public const VERSION_AUTO      = Version::AUTO;
+
+	/**
+	 * @deprecated 5.0.0 use MaskPattern::AUTO instead
+	 * @see \chillerlan\QRCode\Common\MaskPattern::AUTO
+	 * @var int
+	 */
+	public const MASK_PATTERN_AUTO = MaskPattern::AUTO;
 
 	/**
 	 * @deprecated 5.0.0 use EccLevel::L instead
@@ -163,7 +172,7 @@ class QRCode{
 		}
 
 		$dataInterface = new QRData($this->options, $this->dataSegments);
-		$maskPattern   = $this->options->maskPattern === $this::MASK_PATTERN_AUTO
+		$maskPattern   = $this->options->maskPattern === MaskPattern::AUTO
 			? MaskPattern::getBestPattern($dataInterface)
 			: new MaskPattern($this->options->maskPattern);
 

+ 7 - 8
src/QROptionsTrait.php

@@ -12,8 +12,7 @@
 
 namespace chillerlan\QRCode;
 
-use chillerlan\QRCode\Common\EccLevel;
-
+use chillerlan\QRCode\Common\{EccLevel, MaskPattern, Version};
 use chillerlan\QRCode\Decoder\{GDLuminanceSource, IMagickLuminanceSource};
 use function array_values, count, extension_loaded, in_array, is_numeric, max, min, sprintf, strtolower;
 
@@ -25,9 +24,9 @@ trait QROptionsTrait{
 	/**
 	 * QR Code version number
 	 *
-	 * [1 ... 40] or QRCode::VERSION_AUTO
+	 * [1 ... 40] or Version::AUTO
 	 */
-	protected int $version = QRCode::VERSION_AUTO;
+	protected int $version = Version::AUTO;
 
 	/**
 	 * Minimum QR version
@@ -56,9 +55,9 @@ trait QROptionsTrait{
 	/**
 	 * Mask Pattern to use (no value in using, mostly for unit testing purposes)
 	 *
-	 * [0...7] or QRCode::MASK_PATTERN_AUTO
+	 * [0...7] or MaskPattern::PATTERN_AUTO
 	 */
-	protected int $maskPattern = QRCode::MASK_PATTERN_AUTO;
+	protected int $maskPattern = MaskPattern::AUTO;
 
 	/**
 	 * Add a "quiet zone" (margin) according to the QR code spec
@@ -368,7 +367,7 @@ trait QROptionsTrait{
 	 */
 	protected function set_version(int $version):void{
 
-		if($version !== QRCode::VERSION_AUTO){
+		if($version !== Version::AUTO){
 			$this->version = max(1, min(40, $version));
 		}
 
@@ -393,7 +392,7 @@ trait QROptionsTrait{
 	 */
 	protected function set_maskPattern(int $maskPattern):void{
 
-		if($maskPattern !== QRCode::MASK_PATTERN_AUTO){
+		if($maskPattern !== MaskPattern::AUTO){
 			$this->maskPattern = max(0, min(7, $maskPattern));
 		}
 

+ 2 - 3
tests/Data/DatainterfaceTestAbstract.php

@@ -10,8 +10,7 @@
 
 namespace chillerlan\QRCodeTest\Data;
 
-use chillerlan\QRCode\Common\MaskPattern;
-use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\Common\{MaskPattern, Version};
 use chillerlan\QRCode\QROptions;
 use PHPUnit\Framework\TestCase;
 use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRMatrix};
@@ -93,7 +92,7 @@ abstract class DatainterfaceTestAbstract extends TestCase{
 		$this->expectExceptionMessage('data exceeds');
 
 		$this->QRData = new QRData(
-			new QROptions(['version' => QRCode::VERSION_AUTO]),
+			new QROptions(['version' => Version::AUTO]),
 			[new $this->FQN(str_repeat($this->testdata, 1337))]
 		);
 	}

+ 4 - 3
tests/QROptionsTest.php

@@ -12,7 +12,8 @@
 
 namespace chillerlan\QRCodeTest;
 
-use chillerlan\QRCode\{QRCode, QRCodeException, QROptions};
+use chillerlan\QRCode\{QRCodeException, QROptions};
+use chillerlan\QRCode\Common\{MaskPattern, Version};
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -28,7 +29,7 @@ final class QROptionsTest extends TestCase{
 			'values > 40 should be clamped to 40'        => [42, 40],
 			'values < 1 should be clamped to 1'          => [-42, 1],
 			'values in between shold not be touched'     => [21, 21],
-			'value -1 should be treated as is (default)' => [QRCode::VERSION_AUTO, -1],
+			'value -1 should be treated as is (default)' => [Version::AUTO, -1],
 		];
 	}
 
@@ -74,7 +75,7 @@ final class QROptionsTest extends TestCase{
 		return [
 			'exceed max'   => [42, 7,],
 			'exceed min'   => [-42, 0],
-			'default (-1)' => [QRCode::MASK_PATTERN_AUTO, -1],
+			'default (-1)' => [MaskPattern::AUTO, -1],
 		];
 	}