From f64a815374b76b4c7fc1604d9b19b6f09720ae97 Mon Sep 17 00:00:00 2001 From: Christian Blank Date: Sun, 15 Jan 2017 08:11:51 +0100 Subject: [PATCH 1/2] Wip: numeric range check --- spec/Check/NumericRangeCheckSpec.php | 34 ++++++++++++++++++++++++++ src/Check/NumericRangeCheck.php | 36 ++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 spec/Check/NumericRangeCheckSpec.php create mode 100644 src/Check/NumericRangeCheck.php diff --git a/spec/Check/NumericRangeCheckSpec.php b/spec/Check/NumericRangeCheckSpec.php new file mode 100644 index 0000000..77b3b17 --- /dev/null +++ b/spec/Check/NumericRangeCheckSpec.php @@ -0,0 +1,34 @@ +beConstructedWith($child); + + $this->shouldHaveType(NumericRangeCheck::class); + } + + function it_implements_check_interface(TypeInterface $child) + { + $this->beConstructedWith($child); + + $this->shouldImplement(TypeInterface::class); + } + + function it_returns_a_result_on_check(TypeInterface $child) + { + $this->beConstructedWith($child); + + $this->check(Argument::any())->shouldHaveType(ResultInterface::class); + } +} diff --git a/src/Check/NumericRangeCheck.php b/src/Check/NumericRangeCheck.php new file mode 100644 index 0000000..0c58f79 --- /dev/null +++ b/src/Check/NumericRangeCheck.php @@ -0,0 +1,36 @@ +child = $child; + } + + /** + * @param $argument1 + */ + public function check($argument1) + { + // TODO: write logic here + } +} From 9ca941cda55a72bb07f318f0e907efed9959af0b Mon Sep 17 00:00:00 2001 From: Christian Blank Date: Fri, 20 Jan 2017 23:42:35 +0100 Subject: [PATCH 2/2] Create numeric range check --- spec/Check/NumericRangeCheckSpec.php | 23 +++++++++--- src/Check/NumericRangeCheck.php | 54 ++++++++++++++++++++++++---- 2 files changed, 66 insertions(+), 11 deletions(-) diff --git a/spec/Check/NumericRangeCheckSpec.php b/spec/Check/NumericRangeCheckSpec.php index 77b3b17..b0fe05c 100644 --- a/spec/Check/NumericRangeCheckSpec.php +++ b/spec/Check/NumericRangeCheckSpec.php @@ -13,22 +13,35 @@ class NumericRangeCheckSpec extends ObjectBehavior function it_is_initializable(TypeInterface $child) { - $this->beConstructedWith($child); + $this->beConstructedWith($child, 0, 1); $this->shouldHaveType(NumericRangeCheck::class); } - function it_implements_check_interface(TypeInterface $child) + function it_implements_type_interface(TypeInterface $child) { - $this->beConstructedWith($child); + $this->beConstructedWith($child, 0, 1); $this->shouldImplement(TypeInterface::class); } - function it_returns_a_result_on_check(TypeInterface $child) + function it_returns_a_result_on_invalid_child_check(TypeInterface $child, ResultInterface $result) { - $this->beConstructedWith($child); + $result->isValid()->willReturn(false); + $child->check(Argument::any())->willReturn($result); + + $this->beConstructedWith($child, 0, 1); $this->check(Argument::any())->shouldHaveType(ResultInterface::class); } + + function it_returns_a_result_on_check(TypeInterface $child, ResultInterface $result) + { + $result->isValid()->willReturn(true); + $child->check(Argument::any())->willReturn($result); + + $this->beConstructedWith($child, 0, 1); + + $this->check(0)->shouldHaveType(ResultInterface::class); + } } diff --git a/src/Check/NumericRangeCheck.php b/src/Check/NumericRangeCheck.php index 0c58f79..b14c5c2 100644 --- a/src/Check/NumericRangeCheck.php +++ b/src/Check/NumericRangeCheck.php @@ -2,6 +2,7 @@ namespace StructureCheck\Check; +use StructureCheck\Result; use StructureCheck\Type\TypeInterface; /** @@ -10,6 +11,15 @@ */ class NumericRangeCheck implements TypeInterface { + /** + * @var string + */ + private static $lowerBoundErrorMessage = 'The given lower bound %f is greater than the given value %f.'; + + /** + * @var string + */ + private static $upperBoundErrorMessage = 'The given upper bound %f is smaller than the given value %f.'; /** * @var TypeInterface @@ -17,20 +27,52 @@ class NumericRangeCheck implements TypeInterface private $child; /** - * NumericRangeCheck constructor. - * + * @var int + */ + private $lowerBound; + + /** + * @var int + */ + private $upperBound; + + /** * @param TypeInterface $child + * @param int $upperBound + * @param int $lowerBound */ - public function __construct(TypeInterface $child) + public function __construct(TypeInterface $child, $upperBound, $lowerBound) { $this->child = $child; + $this->upperBound = $upperBound; + $this->lowerBound = $lowerBound; } /** - * @param $argument1 + * @inheritdoc */ - public function check($argument1) + public function check($value) { - // TODO: write logic here + $result = $this->child->check($value); + + if (!$result->isValid()) { + return $result; + } + + if ($this->lowerBound > $value) { + return new Result( + false, + [sprintf(self::$lowerBoundErrorMessage, $this->lowerBound, $value)] + ); + } + + if ($this->upperBound < $value) { + return new Result( + false, + [sprintf(self::$upperBoundErrorMessage, $this->upperBound, $value)] + ); + } + + return new Result(true); } }