Skip to content

Commit

Permalink
fix: fix serialization for LazyCollection and LazyValue
Browse files Browse the repository at this point in the history
  • Loading branch information
emonkak committed May 16, 2024
1 parent 5fa76da commit af52bcb
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 10 deletions.
9 changes: 4 additions & 5 deletions src/Relation/JoinStrategy/LazyCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,13 @@ public function count(): int
return count($source);
}

public function serialize(): string
public function __serialize(): array
{
$source = $this->get();
return serialize($source);
return ['source' => $this->get()];
}

public function unserialize(string $data): void
public function __unserialize(array $data): void
{
$this->source = unserialize($data);
$this->source = $data['source'];
}
}
9 changes: 4 additions & 5 deletions src/Relation/JoinStrategy/LazyValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,13 @@ public function get(): mixed
return $this->value;
}

public function serialize(): string
public function __serialize(): array
{
$value = $this->get();
return serialize($value);
return ['value' => $this->get()];
}

public function unserialize(string $data): void
public function __unserialize(array $data): void
{
$this->value = unserialize($data);
$this->value = $data['value'];
}
}
8 changes: 8 additions & 0 deletions tests/Relation/JoinStrategy/LazyCollectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,12 @@ function(\stdClass $key) use ($spy): array {
$this->assertFalse(isset($collection[1]));
$this->assertFalse(isset($collection[2]));
}

public function testSerialize(): void
{
$xs = new LazyCollection('foo', function(): array {
return [1, 2, 3];
});
$this->assertSame([1, 2, 3], unserialize(serialize($xs))->get());
}
}
8 changes: 8 additions & 0 deletions tests/Relation/JoinStrategy/LazyValueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,12 @@ public function testGet(): void
$this->assertSame($value, $lazyValue->get());
$this->assertSame($value, unserialize(serialize($lazyValue))->get());
}

public function testSerialize(): void
{
$value = new LazyValue('foo', function(): int {
return 123;
});
$this->assertSame(123, unserialize(serialize($value))->get());
}
}

0 comments on commit af52bcb

Please sign in to comment.