Skip to content

Commit 6e88526

Browse files
committed
README and change names
1 parent 7018ba9 commit 6e88526

17 files changed

+336
-55
lines changed

README.md

Lines changed: 205 additions & 30 deletions
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Brick\Math\BigDecimal;
88
use Brick\Math\RoundingMode;
99

10-
abstract class AbstractBasicConverter extends AbstractConverter
10+
abstract class AbstractBasicMeasurement extends AbstractMeasurement
1111
{
1212
public const int OPTION_KEEP_ZERO = 1 << 0;
1313

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Asika\UnitConverter;
66

7+
use Asika\UnitConverter\Concerns\CalculationTrait;
78
use Brick\Math\BigDecimal;
89
use Brick\Math\BigNumber;
910
use Brick\Math\Exception\RoundingNecessaryException;
@@ -12,14 +13,16 @@
1213
/**
1314
* @formatter:off
1415
*
15-
* @psalm-type SerializeCallback = \Closure(AbstractConverter $remainder, array<string, BigDecimal> $sortedUnits): string
16-
* @psalm-type FormatterCallback = \Closure(BigDecimal $value, string $unit, AbstractConverter $converter): string
16+
* @psalm-type SerializeCallback = \Closure(AbstractMeasurement $remainder, array<string, BigDecimal> $sortedUnits): string
17+
* @psalm-type FormatterCallback = \Closure(BigDecimal $value, string $unit, AbstractMeasurement $converter): string
1718
* @psalm-type SuffixNormalizerCallback = \Closure(string $suffix, BigDecimal $value, string $unit, $converter): string
1819
*
1920
* @formatter:on
2021
*/
21-
abstract class AbstractConverter implements \Stringable
22+
abstract class AbstractMeasurement implements \Stringable
2223
{
24+
use CalculationTrait;
25+
2326
public BigDecimal $value {
2427
set(mixed $value) => $this->value = BigDecimal::of($value);
2528
}

src/Area.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* @method BigDecimal toSquareAcres(?int $scale = null, RoundingMode $roundingMode = RoundingMode::DOWN)
2525
* @method BigDecimal toSquareHectares(?int $scale = null, RoundingMode $roundingMode = RoundingMode::DOWN)
2626
*/
27-
class Area extends AbstractBasicConverter
27+
class Area extends AbstractBasicMeasurement
2828
{
2929
public const string UNIT_SQUARE_FEMTOMETERS = 'fm2';
3030
public const string UNIT_SQUARE_PICOMETERS = 'pm2';

src/Compound/AbstractCompoundConverter.php renamed to src/Compound/AbstractCompoundMeasurement.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44

55
namespace Asika\UnitConverter\Compound;
66

7-
use Asika\UnitConverter\AbstractConverter;
7+
use Asika\UnitConverter\AbstractMeasurement;
88
use Brick\Math\BigDecimal;
99
use Brick\Math\RoundingMode;
1010

11-
abstract class AbstractCompoundConverter extends AbstractConverter
11+
abstract class AbstractCompoundMeasurement extends AbstractMeasurement
1212
{
13-
abstract public AbstractConverter $measure {
13+
abstract public AbstractMeasurement $measure {
1414
get;
1515
}
16-
abstract public AbstractConverter $deno {
16+
abstract public AbstractMeasurement $deno {
1717
get;
1818
}
1919

src/Compound/Bitrate.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace Asika\UnitConverter\Compound;
66

7-
use Asika\UnitConverter\AbstractConverter;
7+
use Asika\UnitConverter\AbstractMeasurement;
88
use Asika\UnitConverter\Duration;
99
use Asika\UnitConverter\FileSize;
1010

11-
class Bitrate extends AbstractCompoundConverter
11+
class Bitrate extends AbstractCompoundMeasurement
1212
{
1313
public const string UNIT_BITS_PER_SECOND = 'bits/s';
1414

@@ -30,11 +30,11 @@ class Bitrate extends AbstractCompoundConverter
3030

3131
public const string UNIT_TIBPS = 'Tibps';
3232

33-
public AbstractConverter $measure {
33+
public AbstractMeasurement $measure {
3434
get => $this->measure ??= new FileSize();
3535
}
3636

37-
public AbstractConverter $deno {
37+
public AbstractMeasurement $deno {
3838
get => $this->deno ??= new Duration()
3939
->withShortUnitFormatters();
4040
}

src/Compound/Speed.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace Asika\UnitConverter\Compound;
66

7-
use Asika\UnitConverter\AbstractConverter;
7+
use Asika\UnitConverter\AbstractMeasurement;
88
use Asika\UnitConverter\Duration;
99
use Asika\UnitConverter\Length;
1010

11-
class Speed extends AbstractCompoundConverter
11+
class Speed extends AbstractCompoundMeasurement
1212
{
1313
public const string UNIT_MPS = 'mps';
1414
public const string UNIT_KPH = 'kph';
@@ -19,7 +19,7 @@ class Speed extends AbstractCompoundConverter
1919

2020
public string $defaultUnit = 'm/s';
2121

22-
public AbstractConverter $measure {
22+
public AbstractMeasurement $measure {
2323
get => $this->measure ??= new Length();
2424
}
2525

@@ -29,7 +29,7 @@ class Speed extends AbstractCompoundConverter
2929
self::UNIT_KNOTS => 0.514444444,
3030
];
3131

32-
public AbstractConverter $deno {
32+
public AbstractMeasurement $deno {
3333
get => $this->deno ??= new Duration()
3434
->withShortUnitFormatters();
3535
}

src/Concerns/CalculationTrait.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Asika\UnitConverter\Concerns;
6+
7+
use Brick\Math\BigDecimal;
8+
use Brick\Math\BigNumber;
9+
use Brick\Math\RoundingMode;
10+
11+
trait CalculationTrait
12+
{
13+
public function plus(
14+
BigNumber|int|float|string|self $that,
15+
?int $scale = null,
16+
RoundingMode $roundingMode = RoundingMode::UNNECESSARY,
17+
): static {
18+
$new = clone $this;
19+
$new->value = $new->value->plus($this->preprocessThat($that, $scale, $roundingMode));
20+
21+
return $new;
22+
}
23+
24+
public function minus(
25+
BigNumber|int|float|string|self $that,
26+
?int $scale = null,
27+
RoundingMode $roundingMode = RoundingMode::UNNECESSARY,
28+
): static {
29+
$new = clone $this;
30+
$new->value = $new->value->minus($this->preprocessThat($that, $scale, $roundingMode));
31+
32+
return $new;
33+
}
34+
35+
public function multipliedBy(
36+
BigNumber|int|float|string $that,
37+
): static {
38+
$new = clone $this;
39+
$new->value = $new->value->multipliedBy($that);
40+
41+
return $new;
42+
}
43+
44+
public function dividedBy(
45+
BigNumber|int|float|string|self $that,
46+
?int $scale = null,
47+
RoundingMode $roundingMode = RoundingMode::UNNECESSARY
48+
): static {
49+
$new = clone $this;
50+
$new->value = $new->value->dividedBy($that, $scale, $roundingMode);
51+
52+
return $new;
53+
}
54+
55+
private function preprocessThat(
56+
BigNumber|int|float|string|self $that,
57+
?int $scale = null,
58+
RoundingMode $roundingMode = RoundingMode::UNNECESSARY,
59+
): BigDecimal {
60+
if ($that instanceof self) {
61+
return $that->convertTo($this->unit, $scale, $roundingMode)->value;
62+
}
63+
64+
return BigDecimal::of($that);
65+
}
66+
}

src/Duration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* @method BigDecimal toYears(?int $scale = null, RoundingMode $roundingMode = RoundingMode::DOWN)
2929
*/
3030
// phpcs:disable
31-
class Duration extends AbstractBasicConverter
31+
class Duration extends AbstractBasicMeasurement
3232
{
3333
use DurationCalendlyTrait;
3434

src/Energy.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* @method BigDecimal toGigawattHours(?int $scale = null, RoundingMode $roundingMode = RoundingMode::DOWN)
2626
* @method BigDecimal toTerawattHours(?int $scale = null, RoundingMode $roundingMode = RoundingMode::DOWN)
2727
*/
28-
class Energy extends AbstractBasicConverter
28+
class Energy extends AbstractBasicMeasurement
2929
{
3030
// The atom energy unit
3131
public const string UNIT_JOULE = 'j';

0 commit comments

Comments
 (0)