Completed
Push — master ( fbb5bb...32ae81 )
by Jeroen De
64:16
created

mberString   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
c 0
b 0
f 0
nc 3
dl 0
loc 10
rs 9.2
nop 1
1
2
function getFirstTwoDigitsOfNumberString( num ) {
3
	switch ( num.length ) {
4
		case 1:
5
			return num + '0';
6
		case 2:
7
			return num;
8
		default:
9
			return num.substr( 0, 2 );
10
	}
11
}
12
13
function stringToNumber ( s ) {
14
	if ( s.match( /[^-0-9]/ ) ) {
15
		return Number.NaN;
16
	}
17
	return parseInt( s, 10 );
18
}
19
20
var objectAssign = require( 'object-assign' ),
21
	CurrencyFormatter = {
22
		decimalDelimiter: '.',
23
		/**
24
		 * @param {Number} value
25
		 * @return {string}
26
		 */
27
		format: function ( value ) {
28
			var decimals = value % 100;
29
			if ( decimals < 10 ) {
30
				decimals = '0' + decimals;
31
			}
32
			return Math.floor( value / 100 ) + this.decimalDelimiter + decimals;
33
		}
34
	},
35
	CurrencyParser = {
36
		decimalDelimiter: '.',
37
		parse: function ( value ) {
38
			var strParts = value.split( this.decimalDelimiter ), parts;
39
			if ( strParts.length < 2 ) {
40
				strParts[1] = '00';
41
			}
42
43
			strParts[1] = getFirstTwoDigitsOfNumberString( strParts[1] );
44
45
			parts = strParts.map( stringToNumber );
46
47
			if ( isNaN( parts[0] ) || isNaN( parts[1] ) || parts.length > 2 ) {
48
				throw new Error( 'Invalid number' );
49
			}
50
51
			return parts[0] * 100 + parts[1];
52
		},
53
		getDecimalDelimiter: function () {
54
			return this.decimalDelimiter;
55
		}
56
	}
57
;
58
59
60
module.exports = {
61
	createCurrencyFormatter: function ( locale ) {
62
		switch ( locale ) {
63
			case 'de':
64
				return objectAssign( Object.create( CurrencyFormatter ), { decimalDelimiter: ',' } );
65
			case 'en':
66
				return Object.create( CurrencyFormatter );
67
			default:
68
				throw new Error( 'Unsupported locale: ' + locale );
69
		}
70
	},
71
	createCurrencyParser: function ( locale ) {
72
		switch ( locale ) {
73
			case 'de':
74
				return objectAssign( Object.create( CurrencyParser ), { decimalDelimiter: ',' } );
75
			case 'en':
76
				return Object.create( CurrencyParser );
77
			default:
78
				throw new Error( 'Unsupported locale: ' + locale );
79
		}
80
	}
81
};
82