Skip to content

Commit

Permalink
Clean number arguments using custom toInteger implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
leshakoss committed May 25, 2018
1 parent 136d623 commit 9979af7
Show file tree
Hide file tree
Showing 54 changed files with 162 additions and 73 deletions.
3 changes: 2 additions & 1 deletion src/_lib/addUTCMinutes/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'

// This function will be a part of public API when UTC function will be implemented.
Expand All @@ -8,7 +9,7 @@ export default function addUTCMinutes (dirtyDate, dirtyAmount, dirtyOptions) {
}

var date = toDate(dirtyDate, dirtyOptions)
var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
date.setUTCMinutes(date.getUTCMinutes() + amount)
return date
}
5 changes: 3 additions & 2 deletions src/_lib/getUTCWeekYear/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'
import startOfUTCWeek from '../startOfUTCWeek/index.js'

Expand All @@ -19,11 +20,11 @@ export default function getUTCWeekYear (dirtyDate, dirtyOptions) {
var defaultFirstWeekContainsDate =
localeFirstWeekContainsDate === undefined
? 1
: Number(localeFirstWeekContainsDate)
: toInteger(localeFirstWeekContainsDate)
var firstWeekContainsDate =
options.firstWeekContainsDate === undefined
? defaultFirstWeekContainsDate
: Number(options.firstWeekContainsDate)
: toInteger(options.firstWeekContainsDate)

// Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
Expand Down
7 changes: 4 additions & 3 deletions src/_lib/setUTCDay/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'

// This function will be a part of public API when UTC function will be implemented.
Expand All @@ -10,16 +11,16 @@ export default function setUTCDay (dirtyDate, dirtyDay, dirtyOptions) {
var options = dirtyOptions || {}
var locale = options.locale
var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : Number(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : Number(options.weekStartsOn)
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : toInteger(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : toInteger(options.weekStartsOn)

// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')
}

var date = toDate(dirtyDate, dirtyOptions)
var day = Number(dirtyDay)
var day = toInteger(dirtyDay)

var currentDay = date.getUTCDay()

Expand Down
3 changes: 2 additions & 1 deletion src/_lib/setUTCISODay/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'

// This function will be a part of public API when UTC function will be implemented.
Expand All @@ -7,7 +8,7 @@ export default function setUTCISODay (dirtyDate, dirtyDay, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var day = Number(dirtyDay)
var day = toInteger(dirtyDay)

if (day % 7 === 0) {
day = day - 7
Expand Down
3 changes: 2 additions & 1 deletion src/_lib/setUTCISOWeek/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'
import getUTCISOWeek from '../getUTCISOWeek/index.js'

Expand All @@ -9,7 +10,7 @@ export default function setUTCISOWeek (dirtyDate, dirtyISOWeek, dirtyOptions) {
}

var date = toDate(dirtyDate, dirtyOptions)
var isoWeek = Number(dirtyISOWeek)
var isoWeek = toInteger(dirtyISOWeek)
var diff = getUTCISOWeek(date, dirtyOptions) - isoWeek
date.setUTCDate(date.getUTCDate() - diff * 7)
return date
Expand Down
3 changes: 2 additions & 1 deletion src/_lib/setUTCWeek/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'
import getUTCWeek from '../getUTCWeek/index.js'

Expand All @@ -9,7 +10,7 @@ export default function setUTCWeek (dirtyDate, dirtyWeek, dirtyOptions) {
}

var date = toDate(dirtyDate, dirtyOptions)
var week = Number(dirtyWeek)
var week = toInteger(dirtyWeek)
var diff = getUTCWeek(date, dirtyOptions) - week
date.setUTCDate(date.getUTCDate() - diff * 7)
return date
Expand Down
5 changes: 3 additions & 2 deletions src/_lib/startOfUTCWeek/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import toDate from '../../toDate/index.js'

// This function will be a part of public API when UTC function will be implemented.
Expand All @@ -10,8 +11,8 @@ export default function startOfUTCWeek (dirtyDate, dirtyOptions) {
var options = dirtyOptions || {}
var locale = options.locale
var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : Number(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : Number(options.weekStartsOn)
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : toInteger(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : toInteger(options.weekStartsOn)

// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
Expand Down
5 changes: 3 additions & 2 deletions src/_lib/startOfUTCWeekYear/index.js
@@ -1,3 +1,4 @@
import toInteger from '../toInteger/index.js'
import getUTCWeekYear from '../getUTCWeekYear/index.js'
import startOfUTCWeek from '../startOfUTCWeek/index.js'

Expand All @@ -16,11 +17,11 @@ export default function startOfUTCWeekYear (dirtyDate, dirtyOptions) {
var defaultFirstWeekContainsDate =
localeFirstWeekContainsDate === undefined
? 1
: Number(localeFirstWeekContainsDate)
: toInteger(localeFirstWeekContainsDate)
var firstWeekContainsDate =
options.firstWeekContainsDate === undefined
? defaultFirstWeekContainsDate
: Number(options.firstWeekContainsDate)
: toInteger(options.firstWeekContainsDate)

var year = getUTCWeekYear(dirtyDate, dirtyOptions)
var firstWeek = new Date(0)
Expand Down
9 changes: 9 additions & 0 deletions src/_lib/toInteger/index.js
@@ -0,0 +1,9 @@
export default function toInteger (dirtyNumber) {
var number = Number(dirtyNumber)

if (isNaN(number)) {
return number
}

return number < 0 ? Math.ceil(number) : Math.floor(number)
}
27 changes: 27 additions & 0 deletions src/_lib/toInteger/test.js
@@ -0,0 +1,27 @@
// @flow
/* eslint-env mocha */

import assert from 'power-assert'
import toInteger from '.'

describe('toInteger', function () {
it('truncates positive numbers', function () {
var result = toInteger(10.99)
assert(result === 10)
})

it('truncates negative numbers', function () {
var result = toInteger(-5.5)
assert(result === -5)
})

it('converts convertable arguments', function () {
var result = toInteger('-10.75')
assert(result === -10)
})

it('returns NaN for non-convertable arguments', function () {
var result = toInteger('Foobar')
assert(typeof result === 'number' && isNaN(result))
})
})
3 changes: 2 additions & 1 deletion src/addDays/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'

/**
Expand Down Expand Up @@ -27,7 +28,7 @@ export default function addDays (dirtyDate, dirtyAmount, dirtyOptions) {
}

var date = toDate(dirtyDate, dirtyOptions)
var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
date.setDate(date.getDate() + amount)
return date
}
3 changes: 2 additions & 1 deletion src/addHours/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addMilliseconds from '../addMilliseconds/index.js'

var MILLISECONDS_IN_HOUR = 3600000
Expand Down Expand Up @@ -28,6 +29,6 @@ export default function addHours (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addISOWeekYears/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import getISOWeekYear from '../getISOWeekYear/index.js'
import setISOWeekYear from '../setISOWeekYear/index.js'

Expand Down Expand Up @@ -29,6 +30,6 @@ export default function addISOWeekYears (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate, dirtyOptions) + amount, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addMilliseconds/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'

/**
Expand Down Expand Up @@ -27,6 +28,6 @@ export default function addMilliseconds (dirtyDate, dirtyAmount, dirtyOptions) {
}

var timestamp = toDate(dirtyDate, dirtyOptions).getTime()
var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return new Date(timestamp + amount)
}
3 changes: 2 additions & 1 deletion src/addMinutes/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addMilliseconds from '../addMilliseconds/index.js'

var MILLISECONDS_IN_MINUTE = 60000
Expand Down Expand Up @@ -28,6 +29,6 @@ export default function addMinutes (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addMonths/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'
import getDaysInMonth from '../getDaysInMonth/index.js'

Expand Down Expand Up @@ -28,7 +29,7 @@ export default function addMonths (dirtyDate, dirtyAmount, dirtyOptions) {
}

var date = toDate(dirtyDate, dirtyOptions)
var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
var desiredMonth = date.getMonth() + amount
var dateWithDesiredMonth = new Date(0)
dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)
Expand Down
3 changes: 2 additions & 1 deletion src/addQuarters/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addMonths from '../addMonths/index.js'

/**
Expand Down Expand Up @@ -26,7 +27,7 @@ export default function addQuarters (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
var months = amount * 3
return addMonths(dirtyDate, months, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addSeconds/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addMilliseconds from '../addMilliseconds/index.js'

/**
Expand Down Expand Up @@ -26,6 +27,6 @@ export default function addSeconds (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return addMilliseconds(dirtyDate, amount * 1000, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addWeeks/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addDays from '../addDays/index.js'

/**
Expand Down Expand Up @@ -26,7 +27,7 @@ export default function addWeeks (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
var days = amount * 7
return addDays(dirtyDate, days, dirtyOptions)
}
3 changes: 2 additions & 1 deletion src/addYears/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import addMonths from '../addMonths/index.js'

/**
Expand Down Expand Up @@ -26,6 +27,6 @@ export default function addYears (dirtyDate, dirtyAmount, dirtyOptions) {
throw new TypeError('2 arguments required, but only ' + arguments.length + ' present')
}

var amount = Number(dirtyAmount)
var amount = toInteger(dirtyAmount)
return addMonths(dirtyDate, amount * 12, dirtyOptions)
}
5 changes: 3 additions & 2 deletions src/endOfWeek/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'

/**
Expand Down Expand Up @@ -38,8 +39,8 @@ export default function endOfWeek (dirtyDate, dirtyOptions) {

var locale = options.locale
var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : Number(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : Number(options.weekStartsOn)
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : toInteger(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : toInteger(options.weekStartsOn)

// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
Expand Down
9 changes: 5 additions & 4 deletions src/format/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'
import isValid from '../isValid/index.js'
import defaultLocale from '../locale/en-US/index.js'
Expand Down Expand Up @@ -321,20 +322,20 @@ export default function format (dirtyDate, dirtyFormatStr, dirtyOptions) {
var defaultFirstWeekContainsDate =
localeFirstWeekContainsDate === undefined
? 1
: Number(localeFirstWeekContainsDate)
: toInteger(localeFirstWeekContainsDate)
var firstWeekContainsDate =
options.firstWeekContainsDate === undefined
? defaultFirstWeekContainsDate
: Number(options.firstWeekContainsDate)
: toInteger(options.firstWeekContainsDate)

// Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively')
}

var localeWeekStartsOn = locale.options && locale.options.weekStartsOn
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : Number(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : Number(options.weekStartsOn)
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : toInteger(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : toInteger(options.weekStartsOn)

// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
Expand Down
5 changes: 3 additions & 2 deletions src/getWeekOfMonth/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import getDate from '../getDate/index.js'
import startOfMonth from '../startOfMonth/index.js'
import getDay from '../getDay/index.js'
Expand Down Expand Up @@ -31,8 +32,8 @@ export default function getWeekOfMonth (dirtyDate, dirtyOptions) {
var options = dirtyOptions || {}
var locale = options.locale
var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : Number(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : Number(options.weekStartsOn)
var defaultWeekStartsOn = localeWeekStartsOn === undefined ? 0 : toInteger(localeWeekStartsOn)
var weekStartsOn = options.weekStartsOn === undefined ? defaultWeekStartsOn : toInteger(options.weekStartsOn)

// Test if weekStartsOn is between 0 and 6 _and_ is not NaN
if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
Expand Down
5 changes: 3 additions & 2 deletions src/getWeekYear/index.js
@@ -1,3 +1,4 @@
import toInteger from '../_lib/toInteger/index.js'
import toDate from '../toDate/index.js'
import startOfWeek from '../startOfWeek/index.js'

Expand Down Expand Up @@ -57,11 +58,11 @@ export default function getWeekYear (dirtyDate, dirtyOptions) {
var defaultFirstWeekContainsDate =
localeFirstWeekContainsDate === undefined
? 1
: Number(localeFirstWeekContainsDate)
: toInteger(localeFirstWeekContainsDate)
var firstWeekContainsDate =
options.firstWeekContainsDate === undefined
? defaultFirstWeekContainsDate
: Number(options.firstWeekContainsDate)
: toInteger(options.firstWeekContainsDate)

// Test if weekStartsOn is between 1 and 7 _and_ is not NaN
if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
Expand Down

0 comments on commit 9979af7

Please sign in to comment.