Skip to content

Commit 5527521

Browse files
authored
add getters of bound in Range class (#24)
* ✨ Feat: add getters * 🚨 Test: add tests * 🚨 Test: fix test * ✨ Feat: canonicalize boundary in CanonicalRange class * 🚨 Test: fix test * 🐛 Fix: style * 🐛 Fix: removed unnecessary overrides
1 parent b677388 commit 5527521

File tree

3 files changed

+42
-0
lines changed

3 files changed

+42
-0
lines changed

src/Ranges/Range.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,14 @@ private function checkForEmptyBoundaries(): void
8181
$this->from = null;
8282
}
8383
}
84+
85+
public function fromBound(): string
86+
{
87+
return $this->fromBound;
88+
}
89+
90+
public function toBound(): string
91+
{
92+
return $this->toBound;
93+
}
8494
}

tests/Feature/RangesCastingTest.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ public function it_casts_date_range_column(): void
9393

9494
$this->assertDatabaseHas('ranges', ['id' => $model->id]);
9595
$this->assertInstanceOf(DateRange::class, $model->date_range);
96+
$this->assertEquals('[', $model->date_range->fromBound());
97+
$this->assertEquals(')', $model->date_range->toBound());
9698
$this->assertEquals($from, $model->date_range->from());
9799
$this->assertEquals($to, $model->date_range->to());
98100
}
@@ -113,6 +115,8 @@ public function it_casts_float_range_column(): void
113115

114116
$this->assertDatabaseHas('ranges', ['id' => $model->id]);
115117
$this->assertInstanceOf(FloatRange::class, $model->float_range);
118+
$this->assertEquals('[', $model->float_range->fromBound());
119+
$this->assertEquals(']', $model->float_range->toBound());
116120
$this->assertEquals($from, $model->float_range->from());
117121
$this->assertEquals($to, $model->float_range->to());
118122
}
@@ -135,10 +139,14 @@ public function it_casts_integer_and_bigint_range_column(): void
135139
$this->assertDatabaseHas('ranges', ['id' => $model->id]);
136140

137141
$this->assertInstanceOf(IntegerRange::class, $model->integer_range);
142+
$this->assertEquals('[', $model->integer_range->fromBound());
143+
$this->assertEquals(')', $model->integer_range->toBound());
138144
$this->assertEquals($from, $model->integer_range->from());
139145
$this->assertEquals($to, $model->integer_range->to());
140146

141147
$this->assertInstanceOf(IntegerRange::class, $model->bigint_range);
148+
$this->assertEquals('[', $model->bigint_range->fromBound());
149+
$this->assertEquals(')', $model->bigint_range->toBound());
142150
$this->assertEquals($from, $model->bigint_range->from());
143151
$this->assertEquals($to, $model->bigint_range->to());
144152
}

tests/Unit/RangesCanonizationTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,43 @@ public function it_canonicalizes_integer_range(): void
1515
$range = new IntegerRange(10, 20, '(', ')');
1616
$this->assertEquals(11, $range->from());
1717
$this->assertEquals(20, $range->to());
18+
$this->assertEquals('[', $range->fromBound());
19+
$this->assertEquals(')', $range->toBound());
1820
$this->assertEquals('[11,20)', (string) $range);
1921

2022
$range = new IntegerRange(10, 20, '(', ']');
2123
$this->assertEquals(11, $range->from());
2224
$this->assertEquals(21, $range->to());
25+
$this->assertEquals('[', $range->fromBound());
26+
$this->assertEquals(')', $range->toBound());
2327
$this->assertEquals('[11,21)', (string) $range);
2428

2529
$range = new IntegerRange(10, 20, '[', ']');
2630
$this->assertEquals(10, $range->from());
2731
$this->assertEquals(21, $range->to());
32+
$this->assertEquals('[', $range->fromBound());
33+
$this->assertEquals(')', $range->toBound());
2834
$this->assertEquals('[10,21)', (string) $range);
2935

3036
$range = new IntegerRange(10, 20, '[', ')');
3137
$this->assertEquals(10, $range->from());
3238
$this->assertEquals(20, $range->to());
39+
$this->assertEquals('[', $range->fromBound());
40+
$this->assertEquals(')', $range->toBound());
3341
$this->assertEquals('[10,20)', (string) $range);
3442

3543
$range = new IntegerRange(null, 20, '(', ')');
3644
$this->assertEquals(null, $range->from());
3745
$this->assertEquals(20, $range->to());
46+
$this->assertEquals('[', $range->fromBound());
47+
$this->assertEquals(')', $range->toBound());
3848
$this->assertEquals('[,20)', (string) $range);
3949

4050
$range = new IntegerRange(10, null, '[', ']');
4151
$this->assertEquals(10, $range->from());
4252
$this->assertEquals(null, $range->to());
53+
$this->assertEquals('[', $range->fromBound());
54+
$this->assertEquals(')', $range->toBound());
4355
$this->assertEquals('[10,)', (string) $range);
4456
}
4557

@@ -52,31 +64,43 @@ public function it_canonicalizes_date_range(): void
5264
$range = new DateRange($from->toDateString(), $to->toDateString(), '(', ')');
5365
$this->assertEquals($from->addDay(), $range->from());
5466
$this->assertEquals($to, $range->to());
67+
$this->assertEquals('[', $range->fromBound());
68+
$this->assertEquals(')', $range->toBound());
5569
$this->assertEquals("[{$from->addDay()->toDateString()},{$to->toDateString()})", (string) $range);
5670

5771
$range = new DateRange($from->toDateString(), $to->toDateString(), '(', ']');
5872
$this->assertEquals($from->addDay(), $range->from());
5973
$this->assertEquals($to->addDay(), $range->to());
74+
$this->assertEquals('[', $range->fromBound());
75+
$this->assertEquals(')', $range->toBound());
6076
$this->assertEquals("[{$from->addDay()->toDateString()},{$to->addDay()->toDateString()})", (string) $range);
6177

6278
$range = new DateRange($from->toDateString(), $to->toDateString(), '[', ']');
6379
$this->assertEquals($from, $range->from());
6480
$this->assertEquals($to->addDay(), $range->to());
81+
$this->assertEquals('[', $range->fromBound());
82+
$this->assertEquals(')', $range->toBound());
6583
$this->assertEquals("[{$from->toDateString()},{$to->addDay()->toDateString()})", (string) $range);
6684

6785
$range = new DateRange($from->toDateString(), $to->toDateString(), '[', ')');
6886
$this->assertEquals($from, $range->from());
6987
$this->assertEquals($to, $range->to());
88+
$this->assertEquals('[', $range->fromBound());
89+
$this->assertEquals(')', $range->toBound());
7090
$this->assertEquals("[{$from->toDateString()},{$to->toDateString()})", (string) $range);
7191

7292
$range = new DateRange(null, $to->toDateString(), '(', ')');
7393
$this->assertEquals(null, $range->from());
7494
$this->assertEquals($to, $range->to());
95+
$this->assertEquals('[', $range->fromBound());
96+
$this->assertEquals(')', $range->toBound());
7597
$this->assertEquals("[,{$to->toDateString()})", (string) $range);
7698

7799
$range = new DateRange($from->toDateString(), null, '[', ']');
78100
$this->assertEquals($from, $range->from());
79101
$this->assertEquals(null, $range->to());
102+
$this->assertEquals('[', $range->fromBound());
103+
$this->assertEquals(')', $range->toBound());
80104
$this->assertEquals("[{$from->toDateString()},)", (string) $range);
81105
}
82106
}

0 commit comments

Comments
 (0)