Skip to content

Commit f9c2c6a

Browse files
authored
Merge pull request #14 from danitome24/13-gender-vo
#13 - Added gender vo
2 parents df7453a + 3fe15e3 commit f9c2c6a

File tree

5 files changed

+162
-0
lines changed

5 files changed

+162
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* This software was built by:
4+
* Daniel Tomé Fernández <[email protected]>
5+
* GitHub: danitome24
6+
*/
7+
8+
namespace PhpValueObject\Person;
9+
10+
final class Female extends Gender
11+
{
12+
private const NAME = 'Female';
13+
14+
/**
15+
* Build Female instance
16+
*
17+
* @return static
18+
*/
19+
public static function fromFemale()
20+
{
21+
return new static(self::NAME);
22+
}
23+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
/**
3+
* This software was built by:
4+
* Daniel Tomé Fernández <[email protected]>
5+
* GitHub: danitome24
6+
*/
7+
8+
namespace PhpValueObject\Person;
9+
10+
use PhpValueObject\ValueObject;
11+
12+
abstract class Gender implements ValueObject
13+
{
14+
/**
15+
* @var string
16+
*/
17+
private $gender;
18+
19+
/**
20+
* Gender constructor.
21+
* @param string $gender
22+
*/
23+
protected function __construct(string $gender)
24+
{
25+
$this->gender = $gender;
26+
}
27+
28+
/**
29+
* @return string
30+
*/
31+
public function gender(): string
32+
{
33+
return $this->gender;
34+
}
35+
36+
/**
37+
* Compare a value object with another one.
38+
*
39+
* @param static|ValueObject $valueObjectToCompare
40+
* @return bool
41+
*/
42+
public function equals(ValueObject $valueObjectToCompare): bool
43+
{
44+
return ($this->gender() === $valueObjectToCompare->gender());
45+
}
46+
}

src/PhpValueObject/Person/Male.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* This software was built by:
4+
* Daniel Tomé Fernández <[email protected]>
5+
* GitHub: danitome24
6+
*/
7+
8+
namespace PhpValueObject\Person;
9+
10+
final class Male extends Gender
11+
{
12+
private const NAME = 'Male';
13+
14+
/**
15+
* Build Male instance
16+
*
17+
* @return static
18+
*/
19+
public static function fromMale()
20+
{
21+
return new static(self::NAME);
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
/**
3+
* This software was built by:
4+
* Daniel Tomé Fernández <[email protected]>
5+
* GitHub: danitome24
6+
*/
7+
8+
namespace PhpValueObject\Person;
9+
10+
final class Neutral extends Gender
11+
{
12+
private const NAME = 'Neutral';
13+
14+
/**
15+
* Build Neutral instance
16+
*
17+
* @return static
18+
*/
19+
public static function fromNeutral()
20+
{
21+
return new static(self::NAME);
22+
}
23+
}

tests/Person/GenderTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
/**
3+
* This software was built by:
4+
* Daniel Tomé Fernández <[email protected]>
5+
* GitHub: danitome24
6+
*/
7+
8+
namespace Person;
9+
10+
use PHPUnit\Framework\TestCase;
11+
use PhpValueObject\Person\Female;
12+
use PhpValueObject\Person\Gender;
13+
use PhpValueObject\Person\Male;
14+
use PhpValueObject\Person\Neutral;
15+
16+
class GenderTest extends TestCase
17+
{
18+
19+
public function testGenderInheritanceInstance()
20+
{
21+
$this->assertEquals('Male', Male::fromMale()->gender());
22+
$this->assertEquals('Female', Female::fromFemale()->gender());
23+
$this->assertEquals('Neutral', Neutral::fromNeutral()->gender());
24+
}
25+
26+
/**
27+
* @dataProvider genders
28+
* @param Gender $gender
29+
* @param Gender $genderToCompare
30+
* @param bool $isEquals
31+
*/
32+
public function testEqualsMethod(Gender $gender, Gender $genderToCompare, bool $isEquals)
33+
{
34+
$this->assertEquals($isEquals, $gender->equals($genderToCompare));
35+
}
36+
37+
/**
38+
* @return array
39+
*/
40+
public function genders(): array
41+
{
42+
return [
43+
[Male::fromMale(), Male::fromMale(), true],
44+
[Male::fromMale(), Female::fromFemale(), false]
45+
];
46+
}
47+
}

0 commit comments

Comments
 (0)