Skip to content

Commit 6ec963f

Browse files
author
Norbert Orzechowicz
committed
Merge pull request #73 from isnani/improve-ordinal-strategy
improve strategy to handle prefix-ordinal
2 parents dac4b43 + e2c5fde commit 6ec963f

File tree

7 files changed

+122
-30
lines changed

7 files changed

+122
-30
lines changed

src/Coduo/PHPHumanizer/Number/Ordinal.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,15 @@ public function __construct($number, $locale)
2727
$this->strategy = Builder::build($locale);
2828
}
2929

30+
public function isPrefix()
31+
{
32+
return $this->strategy->isPrefix();
33+
}
34+
3035
public function __toString()
3136
{
3237
return $this
3338
->strategy
34-
->ordinalSuffix($this->number);
39+
->ordinalIndicator($this->number);
3540
}
36-
}
41+
}

src/Coduo/PHPHumanizer/Number/Ordinal/StrategyInterface.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44

55
interface StrategyInterface
66
{
7+
/**
8+
* @return boolean
9+
*/
10+
public function isPrefix();
11+
712
/**
813
* @param int|float $number
914
*
1015
* @return string
1116
*/
12-
public function ordinalSuffix($number);
17+
public function ordinalIndicator($number);
1318
}

src/Coduo/PHPHumanizer/NumberHumanizer.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ final class NumberHumanizer
1717
*/
1818
public static function ordinalize($number, $locale = 'en')
1919
{
20-
return $number.self::ordinal($number, $locale);
20+
$ordinal = new Ordinal($number, $locale);
21+
if ($ordinal->isPrefix()) {
22+
return (string) $ordinal.$number;
23+
}
24+
else return (string) $number.$ordinal;
2125
}
22-
26+
2327
/**
2428
* @param int|float $number
2529
* @param string $locale
@@ -29,7 +33,6 @@ public static function ordinalize($number, $locale = 'en')
2933
public static function ordinal($number, $locale = 'en')
3034
{
3135
$ordinal = new Ordinal($number, $locale);
32-
3336
return (string) $ordinal;
3437
}
3538

src/Coduo/PHPHumanizer/Resources/Ordinal/EnStrategy.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66

77
final class EnStrategy implements StrategyInterface
88
{
9+
/** {@inheritdoc}*/
10+
public function isPrefix(){
11+
return False;
12+
}
13+
914
/** {@inheritdoc} */
10-
public function ordinalSuffix($number)
15+
public function ordinalIndicator($number)
1116
{
1217
$absNumber = abs((integer) $number);
1318

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Coduo\PHPHumanizer\Resources\Ordinal;
4+
5+
use Coduo\PHPHumanizer\Number\Ordinal\StrategyInterface;
6+
7+
final class IdStrategy implements StrategyInterface
8+
{
9+
/** {@inheritdoc}*/
10+
public function isPrefix(){
11+
return True;
12+
}
13+
14+
/** {@inheritdoc} */
15+
public function ordinalIndicator($number)
16+
{
17+
return 'ke-';
18+
}
19+
}

src/Coduo/PHPHumanizer/Resources/Ordinal/NlStrategy.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@
66

77
final class NlStrategy implements StrategyInterface
88
{
9+
/** {@inheritdoc}*/
10+
public function isPrefix(){
11+
return False;
12+
}
13+
914
/** {@inheritdoc} */
10-
public function ordinalSuffix($number)
15+
public function ordinalIndicator($number)
1116
{
1217
return 'e';
1318
}

tests/Coduo/PHPHumanizer/Tests/NumberHumanizerTest.php

Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class NumberHumanizerTest extends \PHPUnit_Framework_TestCase
88
{
99
/**
10-
* @dataProvider ordinalSuffixProvider
10+
* @dataProvider ordinalIndicatorProvider
1111
*
1212
* @param $expected
1313
* @param $number
@@ -18,7 +18,7 @@ public function test_return_ordinal_suffix($expected, $number)
1818
}
1919

2020
/**
21-
* @dataProvider ordinalSuffixDutchProvider
21+
* @dataProvider ordinalIndicatorDutchProvider
2222
* @param $expected
2323
* @param $number
2424
*/
@@ -27,6 +27,16 @@ public function test_return_ordinal_suffix_dutch($expected, $number)
2727
$this->assertEquals($expected, NumberHumanizer::ordinal($number, 'nl'));
2828
}
2929

30+
/**
31+
* @dataProvider ordinalIndicatorIndonesianProvider
32+
* @param $expected
33+
* @param $number
34+
*/
35+
public function test_return_ordinal_suffix_indonesian($expected, $number)
36+
{
37+
$this->assertEquals($expected, NumberHumanizer::ordinal($number, 'id'));
38+
}
39+
3040
/**
3141
* @dataProvider ordinalizeDataProvider
3242
* @depends test_return_ordinal_suffix
@@ -51,6 +61,18 @@ public function test_ordinalize_numbers_dutch($expected, $number)
5161
$this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'nl'));
5262
}
5363

64+
/**
65+
* @dataProvider ordinalizeDataIndonesianProvider
66+
* @depends test_return_ordinal_suffix_indonesian
67+
*
68+
* @param $expected
69+
* @param $number
70+
*/
71+
public function test_ordinalize_numbers_indonesian($expected, $number)
72+
{
73+
$this->assertEquals($expected, NumberHumanizer::ordinalize($number, 'id'));
74+
}
75+
5476
/**
5577
* @dataProvider binarySuffixDataProvider
5678
*
@@ -164,6 +186,48 @@ public function test_statically_throw_exception_when_converting_roman_number_is_
164186
NumberHumanizer::fromRoman($number);
165187
}
166188

189+
/**
190+
* @return array
191+
*/
192+
public function ordinalIndicatorProvider()
193+
{
194+
return array(
195+
array('st', 1),
196+
array('nd', 2),
197+
array('rd', 23),
198+
array('nd', 1002),
199+
array('th', -111),
200+
);
201+
}
202+
203+
/**
204+
* @return array
205+
*/
206+
public function ordinalIndicatorDutchProvider()
207+
{
208+
return array(
209+
array('e', 1),
210+
array('e', 2),
211+
array('e', 23),
212+
array('e', 1002),
213+
array('e', -111),
214+
);
215+
}
216+
217+
/**
218+
* @return array
219+
*/
220+
public function ordinalIndicatorIndonesianProvider()
221+
{
222+
return array(
223+
array('ke-', 1),
224+
array('ke-', 2),
225+
array('ke-', 23),
226+
array('ke-', 1002),
227+
array('ke-', -111),
228+
);
229+
}
230+
167231
/**
168232
* @return array
169233
*/
@@ -195,28 +259,14 @@ public function ordinalizeDataDutchProvider()
195259
/**
196260
* @return array
197261
*/
198-
public function ordinalSuffixProvider()
262+
public function ordinalizeDataIndonesianProvider()
199263
{
200264
return array(
201-
array('st', 1),
202-
array('nd', 2),
203-
array('rd', 23),
204-
array('nd', 1002),
205-
array('th', -111),
206-
);
207-
}
208-
209-
/**
210-
* @return array
211-
*/
212-
public function ordinalSuffixDutchProvider()
213-
{
214-
return array(
215-
array('e', 1),
216-
array('e', 2),
217-
array('e', 23),
218-
array('e', 1002),
219-
array('e', -111),
265+
array('ke-1', 1),
266+
array('ke-2', 2),
267+
array('ke-23', 23),
268+
array('ke-1002', 1002),
269+
array('ke--111', -111),
220270
);
221271
}
222272

0 commit comments

Comments
 (0)