Skip to content

Commit

Permalink
feat: add new pipe - 'RightPadPipe'
Browse files Browse the repository at this point in the history
  • Loading branch information
rafaelss95 committed Jan 30, 2017
1 parent 0719400 commit ef66e52
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 14 deletions.
38 changes: 24 additions & 14 deletions src/string/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {LeftTrimPipe} from './ltrim.pipe';
import {MatchPipe} from './match.pipe';
import {PhonePipe} from './phone.pipe';
import {RepeatPipe} from './repeat.pipe';
import {RightPadPipe} from './right-pad.pipe';
import {RightTrimPipe} from './rtrim.pipe';
import {SlugifyPipe} from './slugify.pipe';
import {SplitPipe} from './split.pipe';
Expand All @@ -31,6 +32,7 @@ export * from './left-pad.pipe';
export * from './ltrim.pipe';
export * from './match.pipe';
export * from './phone.pipe';
export * from './right-pad.pipe';
export * from './repeat.pipe';
export * from './rtrim.pipe';
export * from './slugify.pipe';
Expand All @@ -50,23 +52,31 @@ export * from './wrap.pipe';

@NgModule({
declarations: [
CamelizePipe, EndsWithPipe, LatinizePipe,
LeftPadPipe, LeftTrimPipe, MatchPipe,
PhonePipe, RepeatPipe, RightTrimPipe,
SlugifyPipe, SplitPipe, StartsWithPipe,
StringularPipe, StripTagsPipe, TestPipe,
TitleizePipe, TrimPipe, TruncatePipe,
UcfirstPipe, UnderscorePipe, UriComponentEncodePipe,
CamelizePipe, EndsWithPipe,
LatinizePipe, LeftPadPipe,
LeftTrimPipe, MatchPipe,
PhonePipe, RepeatPipe,
RightPadPipe, RightTrimPipe,
SlugifyPipe, SplitPipe,
StartsWithPipe, StringularPipe,
StripTagsPipe, TestPipe,
TitleizePipe, TrimPipe,
TruncatePipe, UcfirstPipe,
UnderscorePipe, UriComponentEncodePipe,
UriEncodePipe, WrapPipe
],
exports: [
CamelizePipe, EndsWithPipe, LatinizePipe,
LeftPadPipe, LeftTrimPipe, MatchPipe,
PhonePipe, RepeatPipe, RightTrimPipe,
SlugifyPipe, SplitPipe, StartsWithPipe,
StringularPipe, StripTagsPipe, TestPipe,
TitleizePipe, TrimPipe, TruncatePipe,
UcfirstPipe, UnderscorePipe, UriComponentEncodePipe,
CamelizePipe, EndsWithPipe,
LatinizePipe, LeftPadPipe,
LeftTrimPipe, MatchPipe,
PhonePipe, RepeatPipe,
RightPadPipe, RightTrimPipe,
SlugifyPipe, SplitPipe,
StartsWithPipe, StringularPipe,
StripTagsPipe, TestPipe,
TitleizePipe, TrimPipe,
TruncatePipe, UcfirstPipe,
UnderscorePipe, UriComponentEncodePipe,
UriEncodePipe, WrapPipe
]
})
Expand Down
14 changes: 14 additions & 0 deletions src/string/right-pad.pipe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import {Pipe, PipeTransform} from '@angular/core';

import {isString} from '../utils/utils';

@Pipe({name: 'rightPad'})
export class RightPadPipe implements PipeTransform {
transform(input: string, requiredLength: number, padChar: string = ' '): string {
if (!isString(input) || input.length >= requiredLength) return input;

const diff: number = requiredLength - input.length;

return input + padChar.repeat(diff).slice(0, diff);
}
}
57 changes: 57 additions & 0 deletions test/string/right-pad.pipe.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import {RightPadPipe} from '../../src/index';

describe('RightPadPipe', () => {
let pipe: RightPadPipe;

beforeEach(() => {
pipe = new RightPadPipe();
});

const data: Array<any> = [
{'input': 'a', 'requiredLength': 6, 'toEqual': 'a ', 'valid': true},
{'input': 'abc', 'padChar': '123456', 'requiredLength': 6, 'toEqual': 'abc123', 'valid': true},
{
'input': 'abcdef',
'padChar': '123456',
'requiredLength': 2,
'toEqual': 'abcdef',
'valid': true
},
{'input': 'abcdef', 'padChar': '0', 'requiredLength': 6, 'toEqual': 'abcdef', 'valid': true}, {
'input': 'abc',
'padChar': 'foo',
'requiredLength': 10,
'toEqual': 'abcfoofoof',
'valid': true
},
{'input': 'abc', 'padChar': '0', 'requiredLength': 10, 'toEqual': 'abc0000000', 'valid': true},
{'input': null, 'padChar': '0', 'requiredLength': 10, 'toEqual': 'null000000', 'valid': false},
{
'input': undefined,
'padChar': '0',
'requiredLength': 10,
'toEqual': 'undefined0',
'valid': false
}
];

for (const element of data) {
const testCase =
`Input '${element.input}' with padChar ('${element.padChar
}') and requiredLength (${element.requiredLength}) should be ${element.valid ?
'equal' :
'not equal'
} to ${element.toEqual}`;

it(testCase, () => {
if (element.valid) {
expect(pipe.transform(element.input, element.requiredLength, element.padChar))
.toEqual(element.toEqual);
} else {
expect(pipe.transform(element.input, element.requiredLength, element.padChar))
.not.toEqual(element.toEqual);
}
})
}

});

0 comments on commit ef66e52

Please sign in to comment.