Oh, give me a home where the buffalo roam
Where the deer and the antelope play
Where seldom is heard a discouraging word
And the skies are not cloudy all day
The inspiration for this library came from a discussion by Martin Fowler.
composer require texdc/range @stable
Ranges provide simple validation and iteration.
use texdc\range\DateRange;
$dateRange = new DateRange(new DateTime, new DateTime('+1 month'));
assert($dateRange->includes(new DateTime('+3 days')));
echo $dateRange->getSpan()->days;
foreach ($dateRange as $day) {
echo $day->format('l, F jS, Y');
}
Ranges can also be compared against each other.
use texdc\range\IntegerRange;
$range1 = new IntegerRange(1, 5);
$range2 = new IntegerRange(8, 3);
$range3 = new IntegerRange(5, 8);
assert($range1->overlaps($range2));
assert($range2->isContraryTo($range1));
assert($range3->abuts($range2));
assert($range1->begins(IntegerRange::merge($range1, $range3)));
assert($range3->ends(IntegerRange::combine([$range1, $range3])));
See the tests for more comparisons!
Enablements leverage a range for more robust alternatives to simple boolean flags.
use texdc\range\DateEnablement;
class DatedBannerAd extends AbstractBannerAd
{
/**
* @var DateEnablement
*/
private $enablement;
// ...
public function render()
{
if ($this->enablement->isEnabled()) {
return parent::render();
}
}
}