Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e8fa38f

Browse files
committedJan 15, 2017
More tests and a length option
1 parent 50b8a11 commit e8fa38f

File tree

3 files changed

+112
-24
lines changed

3 files changed

+112
-24
lines changed
 

‎src/InitialAvatar.php

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ class InitialAvatar
1010
private $image;
1111

1212
private $parameter_cacheTime = 0;
13-
private $parameter_name = 'JD';
13+
private $parameter_length = 2;
14+
private $parameter_initials = 'JD';
15+
private $parameter_name = 'John Doe';
1416
private $parameter_size = 48;
1517
private $parameter_bgColor = '#000';
1618
private $parameter_fontColor = '#fff';
@@ -23,7 +25,16 @@ public function __construct()
2325

2426
public function name( string $nameOrInitials ): self
2527
{
26-
$this->parameter_name = $this->generateInitials( $nameOrInitials );
28+
$this->parameter_name = $nameOrInitials;
29+
$this->parameter_initials = $this->generateInitials();
30+
31+
return $this;
32+
}
33+
34+
public function length( int $length = 2 ): self
35+
{
36+
$this->parameter_length = (int) $length;
37+
$this->parameter_initials = $this->generateInitials();
2738

2839
return $this;
2940
}
@@ -74,14 +85,14 @@ public function generate( $name = null ): Image
7485
{
7586
if ( $name !== null )
7687
{
77-
$this->parameter_name = $this->generateInitials( $name );
88+
$this->parameter_initials = $this->generateInitials( $this->parameter_name );
7889
}
7990

8091
$fontFile = $this->parameter_fontFile;
8192
$size = $this->parameter_size;
8293
$color = $this->parameter_fontColor;
8394
$bgColor = $this->parameter_bgColor;
84-
$name = $this->parameter_name;
95+
$name = $this->parameter_initials;
8596

8697
$img = $this->image->cache( function ( ImageCache $image ) use ( $size, $bgColor, $color, $fontFile, $name )
8798
{
@@ -103,9 +114,9 @@ public function generate( $name = null ): Image
103114
*
104115
* @return string
105116
*/
106-
public function getParameterName()
117+
public function getInitials()
107118
{
108-
return $this->parameter_name;
119+
return $this->parameter_initials;
109120
}
110121

111122
/**
@@ -114,26 +125,41 @@ public function getParameterName()
114125
* For safety, we limit it to two characters,
115126
* in case its a single, but long, name.
116127
*
117-
* @param string $nameOrInitials
118-
*
119128
* @return string
120129
*/
121-
private function generateInitials( string $nameOrInitials = 'John Doe' ): string
130+
private function generateInitials(): string
122131
{
123-
$nameOrInitials = mb_strtoupper( trim( $nameOrInitials ) );
124-
125-
$names = explode( ' ', $nameOrInitials );
132+
$nameOrInitials = mb_strtoupper( trim( $this->parameter_name ) );
133+
$names = explode( ' ', $nameOrInitials );
134+
$initials = $nameOrInitials;
135+
$assignedNames = 0;
126136

127137
if ( count( $names ) > 1 )
128138
{
129-
$firstNameLetter = mb_substr( $names[0], 0, 1 );
130-
$lastNameLetter = mb_substr( $names[ count( $names ) - 1 ], 0, 1 );
139+
$initials = '';
140+
$start = 0;
141+
142+
for ( $i = 0; $i < $this->parameter_length; $i ++ )
143+
{
144+
$index = $i;
145+
146+
if ( ( $index === ( $this->parameter_length - 1 ) && $index > 0 ) || ( $index > ( count( $names ) - 1 ) ) )
147+
{
148+
$index = count( $names ) - 1;
149+
}
150+
151+
if ( $assignedNames >= count( $names ) )
152+
{
153+
$start ++;
154+
}
131155

132-
$nameOrInitials = "{$firstNameLetter}{$lastNameLetter}";
156+
$initials .= mb_substr( $names[ $index ], $start, 1 );
157+
$assignedNames ++;
158+
}
133159
}
134160

135-
$nameOrInitials = mb_substr( $nameOrInitials, 0, 2 );
161+
$initials = mb_substr( $initials, 0, $this->parameter_length );
136162

137-
return $nameOrInitials;
163+
return $initials;
138164
}
139165
}

‎tests/InitialGenerationTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,35 @@ public function testInitialsAreGeneratedFromFullname()
1313

1414
$avatar->name('John Doe');
1515

16-
$this->assertEquals('JD', $avatar->getParameterName());
16+
$this->assertEquals('JD', $avatar->getInitials());
1717

1818
// Single name
1919

2020
$avatar->name('John');
2121

22-
$this->assertEquals('JO', $avatar->getParameterName());
22+
$this->assertEquals('JO', $avatar->getInitials());
2323

2424
// Initials
2525

2626
$avatar->name('MA');
2727

28-
$this->assertEquals('MA', $avatar->getParameterName());
28+
$this->assertEquals('MA', $avatar->getInitials());
2929

3030
// Three names
3131

3232
$avatar->name('John Doe Bergerson');
3333

34-
$this->assertEquals('JB', $avatar->getParameterName());
34+
$this->assertEquals('JB', $avatar->getInitials());
3535

3636
// Other name
3737

3838
$avatar->name('Gustav Årgonson');
3939

40-
$this->assertEquals('', $avatar->getParameterName());
40+
$this->assertEquals('', $avatar->getInitials());
4141

4242
$avatar->name('Chanel Butterman');
4343

44-
$this->assertNotEquals('AB', $avatar->getParameterName());
45-
$this->assertEquals('CB', $avatar->getParameterName());
44+
$this->assertNotEquals('AB', $avatar->getInitials());
45+
$this->assertEquals('CB', $avatar->getInitials());
4646
}
4747
}

‎tests/InitialLimitationTest.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
use PHPUnit\Framework\TestCase;
4+
use LasseRafn\InitialAvatarGenerator\InitialAvatar;
5+
6+
class InitialLimitationTest extends TestCase
7+
{
8+
public function testCanLimitInitials()
9+
{
10+
$avatar = new InitialAvatar();
11+
12+
// One letter
13+
14+
$avatar->name( 'John Doe' )->length( 1 );
15+
16+
$this->assertEquals( 'J', $avatar->getInitials() );
17+
$this->assertEquals( 1, strlen( $avatar->getInitials() ) );
18+
19+
// Two letters
20+
$avatar->name( 'John Doe' )->length( 2 );
21+
22+
$this->assertEquals( 'JD', $avatar->getInitials() );
23+
$this->assertEquals( 2, strlen( $avatar->getInitials() ) );
24+
25+
// Three letters
26+
$avatar->name( 'John Doe Johnson' )->length( 3 );
27+
28+
$this->assertEquals( 'JDJ', $avatar->getInitials() );
29+
$this->assertEquals( 3, strlen( $avatar->getInitials() ) );
30+
31+
// Three letters with only two names
32+
$avatar->name( 'John Doe' )->length( 3 );
33+
34+
$this->assertEquals( 'JDO', $avatar->getInitials() );
35+
$this->assertEquals( 3, strlen( $avatar->getInitials() ) );
36+
37+
// Four letters with only two names
38+
$avatar->name( 'John Doe' )->length( 4 );
39+
40+
$this->assertEquals( 'JDOE', $avatar->getInitials() );
41+
$this->assertEquals( 4, strlen( $avatar->getInitials() ) );
42+
43+
// Five letters with only one name of 4 letters
44+
// This is not possible, of cause, so it will end in 4 letters
45+
$avatar->name( 'John' )->length( 5 );
46+
47+
$this->assertEquals( 'JOHN', $avatar->getInitials() );
48+
$this->assertEquals( 4, strlen( $avatar->getInitials() ) );
49+
50+
// Five letters with only one name of 5 letters
51+
$avatar->name( 'Lasse' )->length( 5 );
52+
53+
$this->assertEquals( 'LASSE', $avatar->getInitials() );
54+
$this->assertEquals( 5, strlen( $avatar->getInitials() ) );
55+
56+
// One letter from a one letter initial
57+
$avatar->name( 'L' )->length( 1 );
58+
59+
$this->assertEquals( 'L', $avatar->getInitials() );
60+
$this->assertEquals( 1, strlen( $avatar->getInitials() ) );
61+
}
62+
}

0 commit comments

Comments
 (0)
Please sign in to comment.