Skip to content
This repository was archived by the owner on Feb 26, 2025. It is now read-only.

Commit f134a80

Browse files
committed
fix error with invalid init, add support for using urls in build ids
1 parent e90883b commit f134a80

File tree

2 files changed

+51
-8
lines changed

2 files changed

+51
-8
lines changed

src/Build.php

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace DauntlessBuilder;
44

5+
use Atomicptr\Functional\Lst;
56
use Atomicptr\Functional\Result;
67
use Sqids\Sqids;
78

@@ -12,19 +13,26 @@ final class Build
1213

1314
private static ?Sqids $sqids = null;
1415

15-
public int $version = static::CURRENT_BUILD_VERSION;
16+
public int $version = self::CURRENT_BUILD_VERSION;
1617
public int $flags = 0;
17-
public BuildWeapon $weapon1 = BuildWeapon::empty();
18-
public BuildWeapon $weapon2 = BuildWeapon::empty();
19-
public BuildArmourPiece $head = BuildArmourPiece::empty(ArmourType::HEAD);
20-
public BuildArmourPiece $torso = BuildArmourPiece::empty(ArmourType::TORSO);
21-
public BuildArmourPiece $arms = BuildArmourPiece::empty(ArmourType::ARMS);
22-
public BuildArmourPiece $legs = BuildArmourPiece::empty(ArmourType::LEGS);
23-
public BuildLanternCore $lanternCore = BuildLanternCore::empty();
18+
public ?BuildWeapon $weapon1 = null;
19+
public ?BuildWeapon $weapon2 = null;
20+
public ?BuildArmourPiece $head = null;
21+
public ?BuildArmourPiece $torso = null;
22+
public ?BuildArmourPiece $arms = null;
23+
public ?BuildArmourPiece $legs = null;
24+
public ?BuildLanternCore $lanternCore = null;
2425
public int $checksum = 0;
2526

2627
private function __construct()
2728
{
29+
$this->weapon1 ??= BuildWeapon::empty();
30+
$this->weapon2 ??= BuildWeapon::empty();
31+
$this->head ??= BuildArmourPiece::empty(ArmourType::HEAD);
32+
$this->torso ??= BuildArmourPiece::empty(ArmourType::TORSO);
33+
$this->arms ??= BuildArmourPiece::empty(ArmourType::ARMS);
34+
$this->legs ??= BuildArmourPiece::empty(ArmourType::LEGS);
35+
$this->lanternCore ??= BuildLanternCore::empty();
2836
}
2937

3038
public function serialize(): Result
@@ -76,6 +84,11 @@ public static function empty(): static
7684

7785
public static function fromId(string $buildId): Result
7886
{
87+
// we also want to support urls ig
88+
if (str_starts_with($buildId, "http")) {
89+
$buildId = Lst::last(explode("/", $buildId));
90+
}
91+
7992
$data = static::sqids()->decode($buildId);
8093

8194
$supposedLength = BuildFields::Checksum->value + 1;

tests/Unit/BuildTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
use DauntlessBuilder\Build;
4+
5+
test("Build::fromId supports urls", function () {
6+
$url = "https://www.dauntless-builder.com/b/-M7aDY6lJI5rlCi4r8C_2fbQqwjcl8-mHahKTOMMu0rlY5cp";
7+
8+
$build = Build::fromId($url);
9+
10+
expect($build->hasError())->toBeFalse();
11+
12+
$build = $build->value();
13+
assert($build instanceof Build);
14+
15+
expect($build->weapon1->id)->toBe(1);
16+
});
17+
18+
test("Build can serialize/deserialize into the same thing", function () {
19+
$build = Build::empty();
20+
21+
$buildId = $build->serialize();
22+
expect($buildId->hasError())->toBeFalse();
23+
24+
$buildId = $buildId->value();
25+
26+
$newBuild = Build::fromId($buildId);
27+
expect($newBuild->hasError())->toBeFalse();
28+
29+
expect($buildId)->toBe($newBuild->value()->serialize()->value());
30+
});

0 commit comments

Comments
 (0)