Skip to content

Commit

Permalink
chore: applying single responsability into isValid function
Browse files Browse the repository at this point in the history
  • Loading branch information
guibrancopc committed Mar 23, 2021
1 parent bbf70d0 commit e5b0348
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 19 deletions.
53 changes: 35 additions & 18 deletions src/creditcard.js
Expand Up @@ -21,31 +21,48 @@ export const isExpirationDateValid = (month, year) => {
};

export const isValid = (number, options = {}) => {
const invalidDigits = new RegExp('[^0-9- ]');
const { cards } = options;
const rawNumber = removeNonNumbersCaracteres(number);

if (invalidDigits.test(number)) return false;

const rawNumber = number.replace(/\D/g, '');

if (rawNumber.length <= 19) return false;
if (hasSomeInvalidDigit(number) || !hasCorrectLength(rawNumber)) {
return false;
}

const sum = sumNumber(rawNumber);
const sumIsOk = sum > 0 && sum % 10 === 0;

if (cards && cards.length) {
return (
sumIsOk &&
areCardsSupported(cards) &&
cards
.map((c) => c.toLowerCase())
.includes(getCreditCardNameByNumber(number).toLowerCase())
);
}

return sumIsOk;
return checkSum(sum) && validateCardsWhenRequired(number, cards);
};

function validateCardsWhenRequired(number, cards) {
return !cards || !cards.length || validateCards(number, cards);
}

function validateCards(number, cards) {
return (
areCardsSupported(cards) &&
cards
.map((c) => c.toLowerCase())
.includes(getCreditCardNameByNumber(number).toLowerCase())
);
}

function hasCorrectLength(number) {
return number && number.length <= 19;
}

function removeNonNumbersCaracteres(number) {
return number.replace(/\D/g, '');
}

function hasSomeInvalidDigit(creditcardNumber) {
const invalidDigits = new RegExp('[^0-9- ]');
return invalidDigits.test(creditcardNumber);
}

function checkSum(sum) {
return sum > 0 && sum % 10 === 0;
}

function areCardsSupported(passedCards) {
const supportedCards = CARDS.map((c) => c.name.toLowerCase());
return passedCards.every((c) => supportedCards.includes(c.toLowerCase()));
Expand Down
2 changes: 1 addition & 1 deletion src/creditcard.test.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e5b0348

Please sign in to comment.