From 9ff3ddc498fb9a04a141e3bd12d8eba718cf9ea1 Mon Sep 17 00:00:00 2001 From: Sergey Gogolev Date: Tue, 11 Oct 2016 17:53:02 +0500 Subject: [PATCH 01/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 15 ++++++++++ .eslintrc.json | 3 ++ .gitignore | 3 ++ .npmrc | 2 ++ .travis.yml | 3 ++ README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++- index.js | 44 ++++++++++++++++++++++++++++++ package.json | 13 +++++++++ phone-book.js | 62 ++++++++++++++++++++++++++++++++++++++++++ phone-book.spec.js | 61 +++++++++++++++++++++++++++++++++++++++++ 10 files changed, 273 insertions(+), 1 deletion(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 .travis.yml create mode 100644 index.js create mode 100644 package.json create mode 100644 phone-book.js create mode 100644 phone-book.spec.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..936d024 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_size = 4 +indent_style = space +trim_trailing_whitespace = true + +[*.json] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..db814bf --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "hrundel/node" +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d48db5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +/node_modules +*.log diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..f5357d5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +save=true +save-exact=true diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..4909f83 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "6" diff --git a/README.md b/README.md index 07fbe88..133405a 100644 --- a/README.md +++ b/README.md @@ -1 +1,67 @@ -# javascript-task-2 \ No newline at end of file +# Задача «Телефонная книга» + +Перед выполнением задания внимательно прочитайте: + +- [О всех этапах проверки задания](https://github.com/urfu-2016/guides/blob/master/workflow/extra.md) +- [Как отправить пулл](https://github.com/urfu-2016/guides/blob/master/workflow/pull.md) +- [Как пройти тесты](https://github.com/urfu-2016/guides/blob/master/workflow/test.md) +- Правила оформления [javascript](https://github.com/urfu-2016/guides/blob/master/codestyle/js.md), [HTML](https://github.com/urfu-2016/guides/blob/master/codestyle/html.md) и [CSS](https://github.com/urfu-2016/guides/blob/master/codestyle/css.md) кода +- [Лекцию «Типы данных»](https://urfu-2016.github.io/javascript-slides/02-types/#/) + + +## Основное задание + +> Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками. + +Как известно, каждый уважающий себя разработчик должен в жизни сделать три вещи: +- [x] посадить DOM дерево +- [x] построить абстракцию +- [ ] ~~вырастить~~ написать телефонную книгу + +Предлагаем вам пройти легкий путь становления уважающего себя разработчика и реализовать для скрипта телефонной книги __phone-book.js__ ряд необходимых методов. + +Метод __add__ для добавления записей: +* На вход принимает «Телефон», «Имя» и «Электронную почту» +* Возвращает true или false в зависимости от успеха опереации +* Телефоны принимаются **только** в формате 5556667788 (без кода) + +Метод __update__ для обновления записей: +* На вход принимает «Телефон», «Имя» и «Электронную почту» +* Обновляет «Имя» и «Электронную почту» по заданному «Телефону» +* Возвращает true или false в зависимости от успеха опереации +* «Электронную почту» можно стереть (не передав последний параметр), а «Имя» – нет + +Метод __find__ для поиска записей: +* На вход принимает запрос в виде строки +* Ищет вхождение этой строки хотя бы в одно из полей «Телефон», «Имя» и «Электронную почту» +* Возвращает отсортированный по «Имени» массив строк в формате `name, phone, email` +* «Имя» и «Электронную почту» выводит как есть, а «Телефон» в формате `+7 (555) 666-77-88` +* Пустой запрос не должен ничего не находить +* Запрос «*» находит все записи + +Метод __findAndRemove__ для удаления записей: +* На вход принимает запрос в виде строки +* Находит (смотри __find__) и удаляет все найденные записи +* Возвращает число удаленных записей + +В файле _index.js_ вы можете найти примеры использования получившегося скриптика. + +## Дополнительное задание + +> Перед выполнением внимательно прочитайте [про особенности](https://github.com/urfu-2016/guides/blob/master/workflow/extra.md) + +По одной добавлять записи в книгу не очень удобно, поэтому будет здорово, если вы добавите в решение импорт данных из csv. Для этого реализуйте код метода __importFromCsv__. + +На вход метод принимает строку в формате csv. Если запись в телефонной книги уже есть – обновляет/дополняет её данными из csv строки. На выходе метод возвращает одно число добавленных/обновленных записей. + +Пример работы этого метода вы может отыскать в _index.js_ и в тестах. + +## Полезные ссылки + +- [Знакомимся с массивами](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array) +- [Пытаемся знакомиться с регулярными выражениями](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp) +- [Перебираем ключи объектов](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) +- [Метод indexOf для строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) +- [Метод slice для строк](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/slice) + +Позвони мне, позвони diff --git a/index.js b/index.js new file mode 100644 index 0000000..9b259f5 --- /dev/null +++ b/index.js @@ -0,0 +1,44 @@ +'use strict'; + +var phoneBook = require('./phone-book'); + +// Эти записи добавятся, вернется true +phoneBook.add('5554440044', 'Григорий', 'grisha@example.com'); +phoneBook.add('5552220022', 'Борис', 'boris@example.com'); +phoneBook.add('5551110011', 'Алекс'); +phoneBook.add('5553330033', 'Валерий', 'valera@example.com'); + +// Эти запись не добавятся +phoneBook.add('3330033', 'Неизвестный', 'unknown@example.com'); +phoneBook.add('5551110011', 'Алексей'); +phoneBook.add('5555550055'); + +// Обновление +phoneBook.update('5551110011', 'Алексей', 'alex@example.com'); +phoneBook.update('5553330033', 'Валерий'); + +// В следующих примерах вернутся все записи +console.info(phoneBook.find('*')); +console.info(phoneBook.find('555')); +// Вывод будет следующий +// [ +// 'Алексей, +7 (555) 111-00-11, alex@example.com', +// 'Борис, +7 (555) 222-00-22, boris@example.com', +// 'Валерий, +7 (555) 333-00-33', +// 'Григорий, +7 (555) 444-00-44, grisha@example.com' +// ] + +// Удаление +phoneBook.findAndRemove('@'); // returns 3 + +if (phoneBook.isStar) { + // Импортируем из csv + var csv = [ + 'Борис;5552220022;boris@example.com', + 'Григорий;5554440044;grisha@example.com', + 'Алексей;5551110011;alex@example.com', + 'Валерий;5553330033;valera@example.com', + 'Неизвестный;3330033;unknown@example.com' + ].join('\n'); + phoneBook.importFromCsv(csv); // returns 4 +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1400772 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "main": "phone-book.js", + "scripts": { + "lint": "eslint .", + "test": "eslint . && mocha *.spec.js" + }, + "dependencies": { + "eslint": "3.7.0", + "eslint-config-hrundel": "latest", + "mocha": "3.1.0" + } +} diff --git a/phone-book.js b/phone-book.js new file mode 100644 index 0000000..69fb468 --- /dev/null +++ b/phone-book.js @@ -0,0 +1,62 @@ +'use strict'; + +/** + * Сделано задание на звездочку + * Реализован метод importFromCsv + */ +exports.isStar = true; + +/** + * Телефонная книга + */ +var phoneBook; + +/** + * Добавление записи в телефонную книгу + * @param {String} phone + * @param {String} name + * @param {String} email + */ +exports.add = function (phone, name, email) { + +}; + +/** + * Обновление записи в телефонной книге + * @param {String} phone + * @param {String} name + * @param {String} email + */ +exports.update = function (phone, name, email) { + +}; + +/** + * Удаление записей по запросу из телефонной книги + * @param {String} query + */ +exports.findAndRemove = function (query) { + +}; + +/** + * Поиск записей по запросу в телефонной книге + * @param {String} query + */ +exports.find = function (query) { + +}; + +/** + * Импорт записей из csv-формата + * @star + * @param {String} csv + * @returns {Number} – количество добавленных и обновленных записей + */ +exports.importFromCsv = function (csv) { + // Парсим csv + // Добавляем в телефонную книгу + // Либо обновляем, если запись с таким телефоном уже существует + + return csv.split('\n').length; +}; diff --git a/phone-book.spec.js b/phone-book.spec.js new file mode 100644 index 0000000..1b62a1a --- /dev/null +++ b/phone-book.spec.js @@ -0,0 +1,61 @@ +/* eslint-env mocha */ +'use strict'; + +var assert = require('assert'); + +var phoneBook = require('./phone-book'); + +describe('phone-book', function () { + it('должен добавлять записи', function () { + assert.ok(phoneBook.add('5554440044', 'Григорий', 'grisha@example.com')); + assert.ok(phoneBook.add('5552220022', 'Борис', 'boris@example.com')); + assert.ok(phoneBook.add('5551110011', 'Алекс')); + assert.ok(phoneBook.add('5553330033', 'Валерий', 'valera@example.com')); + }); + + it('не должен добавлять неправильные записи', function () { + assert.ok(!phoneBook.add('3330033', 'Неизвестный', 'unknown@example.com')); + assert.ok(!phoneBook.add('5551110011', 'Алексей')); + assert.ok(!phoneBook.add('5555550055')); + }); + + it('должен обновлять существующие записи', function () { + assert.ok(phoneBook.update('5551110011', 'Алексей', 'alex@example.com')); + assert.ok(phoneBook.update('5553330033', 'Валерий')); + }); + + it('должен искать все записи по запросу "*"', function () { + assert.deepStrictEqual(phoneBook.find('*'), [ + 'Алексей, +7 (555) 111-00-11, alex@example.com', + 'Борис, +7 (555) 222-00-22, boris@example.com', + 'Валерий, +7 (555) 333-00-33', + 'Григорий, +7 (555) 444-00-44, grisha@example.com' + ]); + }); + + it('должен искать все записи по запросу "555"', function () { + assert.deepStrictEqual(phoneBook.find('555'), [ + 'Алексей, +7 (555) 111-00-11, alex@example.com', + 'Борис, +7 (555) 222-00-22, boris@example.com', + 'Валерий, +7 (555) 333-00-33', + 'Григорий, +7 (555) 444-00-44, grisha@example.com' + ]); + }); + + it('должен удалять элементы из телефонной книги', function () { + assert.strictEqual(phoneBook.findAndRemove('@'), 3); + }); + + if (phoneBook.isStar) { + it('должен экспортировать из cvs', function () { + var csv = [ + 'Борис;5552220022;boris@example.com', + 'Григорий;5554440044;grisha@example.com', + 'Алексей;5551110011;alex@example.com', + 'Валерий;5553330033;valera@example.com', + 'Неизвестный;3330033;unknown@example.com' + ].join('\n'); + assert.strictEqual(phoneBook.importFromCsv(csv), 4); + }); + } +}); From b0af7e346b5e61079ac55e89e0f76e5f1cd8b86a Mon Sep 17 00:00:00 2001 From: imatasov Date: Sun, 16 Oct 2016 21:35:49 +0500 Subject: [PATCH 02/24] Phone book v1 --- phone-book.js | 197 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 194 insertions(+), 3 deletions(-) diff --git a/phone-book.js b/phone-book.js index 69fb468..a84705a 100644 --- a/phone-book.js +++ b/phone-book.js @@ -4,13 +4,88 @@ * Сделано задание на звездочку * Реализован метод importFromCsv */ -exports.isStar = true; +exports.isStar = false; + +function checkQuery(query) { + + return typeof query === 'string'; +} + +function isEmptyQuery(query) { + + return query === undefined; +} + +function checkPhone(phone) { + + var regExpPhone = /^([5]\d{2})([1-5]\d{2})([0]\d{1})([1-5]\d{1})$/; + + return phone.match(regExpPhone); +} + +function valEmail(email) { + + var regExpEmail = /^([a-z]+)@([a-z]+\.com)$/; + + if (email === '') { + + return true; + } + + return email.match(regExpEmail); + +} + +function formatPhone(phone) { + + var one = phone.slice(0, 3); + var two = phone.slice(3, 6); + var three = phone.slice(6, 8); + var four = phone.slice(8, 10); + var result = '+7 ' + '(' + one + ')' + ' ' + two + '-' + three + '-' + four; + + return result; + +} + +function findIndex(query, phone, name, email) { + + if (phone.indexOf(query) !== -1 || name.indexOf(query) !== -1 || email.indexOf(query) !== -1) { + + return true; + } + + return false; +} /** * Телефонная книга */ -var phoneBook; +var phoneBook = []; + +var uPhone; +var uName; + +function checkEntry(phone) { + var resultsEntry = true; + + phoneBook.forEach(function (object, index) { + + var entryPhone = phoneBook[index].number; + + if (phoneBook.length === 0) { + + return resultsEntry; + } else if (entryPhone.indexOf(phone) !== -1) { + + resultsEntry = false; + } + + }); + + return resultsEntry; +} /** * Добавление записи в телефонную книгу * @param {String} phone @@ -18,9 +93,34 @@ var phoneBook; * @param {String} email */ exports.add = function (phone, name, email) { + var bookObj = {}; + uPhone = phone; + uName = name; + + var checkEmail = isEmptyQuery(email) ? '' : email; + + if (isEmptyQuery(uName)) { + + return false; + } + + if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { + + bookObj = { + number: uPhone, + username: uName, + mail: checkEmail + }; + phoneBook.push(bookObj); + + return true; + } + + return false; }; + /** * Обновление записи в телефонной книге * @param {String} phone @@ -28,7 +128,33 @@ exports.add = function (phone, name, email) { * @param {String} email */ exports.update = function (phone, name, email) { + var upPhone = ''; + var checkEmail = isEmptyQuery(email) ? '' : email; + + if (isEmptyQuery(name)) { + + return false; + + } else if (checkPhone(phone) && valEmail(checkEmail)) { + + phoneBook.forEach(function (object, index) { + + upPhone = phoneBook[index].number; + + if (upPhone.indexOf(phone) !== -1) { + phoneBook[index].username = name; + phoneBook[index].mail = checkEmail; + + return true; + } + + + }); + + } + + return false; }; /** @@ -36,7 +162,27 @@ exports.update = function (phone, name, email) { * @param {String} query */ exports.findAndRemove = function (query) { + var counter = 0; + + if (checkQuery(query)) { + + phoneBook.forEach(function (object, index) { + + var findPhone = phoneBook[index].number; + var findName = phoneBook[index].username; + var findEmail = phoneBook[index].mail; + + if (findIndex(query, findPhone, findName, findEmail)) { + phoneBook.splice(index, 1, ''); + + counter++; + } + + }); + } + + return counter; }; /** @@ -44,6 +190,52 @@ exports.findAndRemove = function (query) { * @param {String} query */ exports.find = function (query) { + var searchResult = []; + var convertedPhone = ''; + var concatResult = ''; + var findPhone; + var findName; + var findEmail; + + if (checkQuery(query) && query !== '*' && query !== '') { + + phoneBook.forEach(function (object, index) { + findPhone = phoneBook[index].number; + findName = phoneBook[index].username; + findEmail = phoneBook[index].mail; + + if (findIndex(query, findPhone, findName, findEmail)) { + convertedPhone = formatPhone(findPhone); + concatResult = findName + ',' + ' ' + convertedPhone + ',' + ' ' + findEmail; + searchResult.push(concatResult); + } + + }); + + searchResult.sort(); + + return searchResult; + + } + + if (query === '*') { + + phoneBook.forEach(function (object, index) { + findPhone = phoneBook[index].username; + findEmail = phoneBook[index].mail; + convertedPhone = formatPhone(phoneBook[index].number); + concatResult = findPhone + ',' + ' ' + convertedPhone + ',' + ' ' + findEmail; + searchResult.push(concatResult); + }); + + searchResult.sort(); + + return searchResult; + + } else if (query === '') { + + return false; + } }; @@ -57,6 +249,5 @@ exports.importFromCsv = function (csv) { // Парсим csv // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует - return csv.split('\n').length; }; From 94d6e4beecf7b9ba52226207a92e0ec612400c7c Mon Sep 17 00:00:00 2001 From: imatasov Date: Sun, 16 Oct 2016 22:30:51 +0500 Subject: [PATCH 03/24] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BD=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=D1=86=D0=B8=D1=8F=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/phone-book.js b/phone-book.js index a84705a..a0b49ba 100644 --- a/phone-book.js +++ b/phone-book.js @@ -38,11 +38,22 @@ function valEmail(email) { function formatPhone(phone) { - var one = phone.slice(0, 3); - var two = phone.slice(3, 6); - var three = phone.slice(6, 8); - var four = phone.slice(8, 10); - var result = '+7 ' + '(' + one + ')' + ' ' + two + '-' + three + '-' + four; + var result = '+7 ({1}) {2}-{3}-{4}' + .replace('{1}', phone.slice(0, 3)) + .replace('{2}', phone.slice(3, 6)) + .replace('{3}', phone.slice(6, 8)) + .replace('{4}', phone.slice(8, 10)); + + return result; + +} + +function concatString(name, phone, email) { + + var result = '{1}, {2}, {3}' + .replace('{1}', name) + .replace('{2}', phone) + .replace('{3}', email); return result; @@ -86,11 +97,13 @@ function checkEntry(phone) { return resultsEntry; } + /** * Добавление записи в телефонную книгу * @param {String} phone * @param {String} name * @param {String} email + * @returns {Boolean} - true или false от успеха операции */ exports.add = function (phone, name, email) { var bookObj = {}; @@ -101,7 +114,7 @@ exports.add = function (phone, name, email) { if (isEmptyQuery(uName)) { - return false; + return false; } if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -126,6 +139,7 @@ exports.add = function (phone, name, email) { * @param {String} phone * @param {String} name * @param {String} email + * @returns {Boolean} - true или false от успеха операции */ exports.update = function (phone, name, email) { var upPhone = ''; @@ -160,6 +174,7 @@ exports.update = function (phone, name, email) { /** * Удаление записей по запросу из телефонной книги * @param {String} query + * @returns {Number} - Число удаленных записей */ exports.findAndRemove = function (query) { var counter = 0; @@ -188,6 +203,7 @@ exports.findAndRemove = function (query) { /** * Поиск записей по запросу в телефонной книге * @param {String} query + * @returns {String} Результат поиска */ exports.find = function (query) { var searchResult = []; @@ -206,7 +222,8 @@ exports.find = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { convertedPhone = formatPhone(findPhone); - concatResult = findName + ',' + ' ' + convertedPhone + ',' + ' ' + findEmail; + concatResult = concatString(findName, convertedPhone, findEmail); + searchResult.push(concatResult); } @@ -221,10 +238,11 @@ exports.find = function (query) { if (query === '*') { phoneBook.forEach(function (object, index) { - findPhone = phoneBook[index].username; + findName = phoneBook[index].username; findEmail = phoneBook[index].mail; convertedPhone = formatPhone(phoneBook[index].number); - concatResult = findPhone + ',' + ' ' + convertedPhone + ',' + ' ' + findEmail; + concatResult = concatString(findName, convertedPhone, findEmail); + searchResult.push(concatResult); }); @@ -234,7 +252,7 @@ exports.find = function (query) { } else if (query === '') { - return false; + return []; } }; From 7bbf9cf4499d5afb5fa907a6cfdcd7387ecd611a Mon Sep 17 00:00:00 2001 From: imatasov Date: Sun, 16 Oct 2016 23:25:29 +0500 Subject: [PATCH 04/24] Phone book test --- phone-book.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/phone-book.js b/phone-book.js index a0b49ba..2984b35 100644 --- a/phone-book.js +++ b/phone-book.js @@ -49,12 +49,24 @@ function formatPhone(phone) { } function concatString(name, phone, email) { + var result; - var result = '{1}, {2}, {3}' + if (email !== '') { + + result = '{1}, {2}, {3}' .replace('{1}', name) .replace('{2}', phone) .replace('{3}', email); + } else { + + result = '{1}, {2}' + .replace('{1}', name) + .replace('{2}', phone); + + } + + return result; } @@ -163,12 +175,10 @@ exports.update = function (phone, name, email) { return true; } - }); } - return false; }; /** From f8cbab3642fbb776aa356bc958a2d13e1041f3a6 Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 17 Oct 2016 02:12:16 +0500 Subject: [PATCH 05/24] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/phone-book.js b/phone-book.js index 2984b35..64be68d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -50,23 +50,19 @@ function formatPhone(phone) { function concatString(name, phone, email) { var result; - if (email !== '') { result = '{1}, {2}, {3}' .replace('{1}', name) .replace('{2}', phone) .replace('{3}', email); - } else { result = '{1}, {2}' - .replace('{1}', name) - .replace('{2}', phone); - + .replace('{1}', name) + .replace('{2}', phone); } - return result; } @@ -157,7 +153,7 @@ exports.update = function (phone, name, email) { var upPhone = ''; var checkEmail = isEmptyQuery(email) ? '' : email; - if (isEmptyQuery(name)) { + if (isEmptyQuery(name) && isEmptyQuery(phone)) { return false; @@ -172,13 +168,15 @@ exports.update = function (phone, name, email) { phoneBook[index].username = name; phoneBook[index].mail = checkEmail; - return true; } }); + return true; } + return false; + }; /** @@ -202,6 +200,7 @@ exports.findAndRemove = function (query) { phoneBook.splice(index, 1, ''); counter++; + } }); @@ -231,10 +230,12 @@ exports.find = function (query) { findEmail = phoneBook[index].mail; if (findIndex(query, findPhone, findName, findEmail)) { + convertedPhone = formatPhone(findPhone); concatResult = concatString(findName, convertedPhone, findEmail); searchResult.push(concatResult); + } }); @@ -242,7 +243,6 @@ exports.find = function (query) { searchResult.sort(); return searchResult; - } if (query === '*') { @@ -254,6 +254,7 @@ exports.find = function (query) { concatResult = concatString(findName, convertedPhone, findEmail); searchResult.push(concatResult); + }); searchResult.sort(); From 1ba94eabf4467bc38c6e3361b2214af76f96d84c Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 17 Oct 2016 05:25:22 +0500 Subject: [PATCH 06/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/phone-book.js b/phone-book.js index 64be68d..f912152 100644 --- a/phone-book.js +++ b/phone-book.js @@ -115,16 +115,11 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uPhone = phone; - uName = name; + uPhone = phone.trim(); + uName = isEmptyQuery(name) ? false : name.trim(); var checkEmail = isEmptyQuery(email) ? '' : email; - if (isEmptyQuery(uName)) { - - return false; - } - if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { bookObj = { @@ -151,7 +146,7 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = isEmptyQuery(email) ? '' : email; + var checkEmail = isEmptyQuery(email) ? '' : email.trim().toLowerCase(); if (isEmptyQuery(name) && isEmptyQuery(phone)) { @@ -187,7 +182,7 @@ exports.update = function (phone, name, email) { exports.findAndRemove = function (query) { var counter = 0; - if (checkQuery(query)) { + if (checkQuery(query.trim())) { phoneBook.forEach(function (object, index) { @@ -222,7 +217,7 @@ exports.find = function (query) { var findName; var findEmail; - if (checkQuery(query) && query !== '*' && query !== '') { + if (checkQuery(query.trim()) && query !== '*' && query !== '') { phoneBook.forEach(function (object, index) { findPhone = phoneBook[index].number; @@ -278,5 +273,25 @@ exports.importFromCsv = function (csv) { // Парсим csv // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует - return csv.split('\n').length; + var csvArr = csv.split('\n'); + var splitCsv; + var count = 0; + + for (var i = 0; i < csvArr.length; i++) { + + splitCsv = csvArr[i].split(';'); + var csvName = splitCsv[0]; + var csvPhone = splitCsv[1]; + var csvEmail = splitCsv[2]; + var competeAdd = exports.add(csvPhone, csvName, csvEmail); + var compeleUpdate = exports.update(csvPhone, csvName, csvEmail); + + if (competeAdd || compeleUpdate) { + + count++; + } + + } + + return count; }; From 9d02255d1b15de9c237732be5619cdd80b918377 Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 17 Oct 2016 05:33:32 +0500 Subject: [PATCH 07/24] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phone-book.js b/phone-book.js index f912152..e12dcb3 100644 --- a/phone-book.js +++ b/phone-book.js @@ -146,7 +146,7 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = isEmptyQuery(email) ? '' : email.trim().toLowerCase(); + var checkEmail = isEmptyQuery(email) ? '' : email; if (isEmptyQuery(name) && isEmptyQuery(phone)) { @@ -182,7 +182,7 @@ exports.update = function (phone, name, email) { exports.findAndRemove = function (query) { var counter = 0; - if (checkQuery(query.trim())) { + if (checkQuery(query)) { phoneBook.forEach(function (object, index) { @@ -217,7 +217,7 @@ exports.find = function (query) { var findName; var findEmail; - if (checkQuery(query.trim()) && query !== '*' && query !== '') { + if (checkQuery(query) && !isEmptyQuery(query) && query !== '*' && query !== '') { phoneBook.forEach(function (object, index) { findPhone = phoneBook[index].number; @@ -258,7 +258,7 @@ exports.find = function (query) { } else if (query === '') { - return []; + return false; } }; From b651dcbae95b7c114985f872df15850db1628970 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 03:53:12 +0500 Subject: [PATCH 08/24] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 51 ++++++++++++++------------------------------------- 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/phone-book.js b/phone-book.js index e12dcb3..fc235cb 100644 --- a/phone-book.js +++ b/phone-book.js @@ -115,9 +115,8 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uPhone = phone.trim(); - uName = isEmptyQuery(name) ? false : name.trim(); - + uPhone = phone; + uName = name; var checkEmail = isEmptyQuery(email) ? '' : email; if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -213,22 +212,19 @@ exports.find = function (query) { var searchResult = []; var convertedPhone = ''; var concatResult = ''; - var findPhone; - var findName; - var findEmail; + var fixQuery = query.trim(); - if (checkQuery(query) && !isEmptyQuery(query) && query !== '*' && query !== '') { + if (checkQuery(fixQuery) && !isEmptyQuery(fixQuery) && fixQuery !== '*' && fixQuery !== '') { phoneBook.forEach(function (object, index) { - findPhone = phoneBook[index].number; - findName = phoneBook[index].username; - findEmail = phoneBook[index].mail; + var findPhone = phoneBook[index].number; + var findName = phoneBook[index].username; + var findEmail = phoneBook[index].mail; - if (findIndex(query, findPhone, findName, findEmail)) { + if (findIndex(fixQuery, findPhone, findName, findEmail)) { convertedPhone = formatPhone(findPhone); concatResult = concatString(findName, convertedPhone, findEmail); - searchResult.push(concatResult); } @@ -240,11 +236,11 @@ exports.find = function (query) { return searchResult; } - if (query === '*') { + if (fixQuery === '*') { phoneBook.forEach(function (object, index) { - findName = phoneBook[index].username; - findEmail = phoneBook[index].mail; + var findName = phoneBook[index].username; + var findEmail = phoneBook[index].mail; convertedPhone = formatPhone(phoneBook[index].number); concatResult = concatString(findName, convertedPhone, findEmail); @@ -256,9 +252,9 @@ exports.find = function (query) { return searchResult; - } else if (query === '') { + } else if (fixQuery === '') { - return false; + return []; } }; @@ -273,25 +269,6 @@ exports.importFromCsv = function (csv) { // Парсим csv // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует - var csvArr = csv.split('\n'); - var splitCsv; - var count = 0; - - for (var i = 0; i < csvArr.length; i++) { - - splitCsv = csvArr[i].split(';'); - var csvName = splitCsv[0]; - var csvPhone = splitCsv[1]; - var csvEmail = splitCsv[2]; - var competeAdd = exports.add(csvPhone, csvName, csvEmail); - var compeleUpdate = exports.update(csvPhone, csvName, csvEmail); - - if (competeAdd || compeleUpdate) { - - count++; - } - - } - return count; + return csv.split('\n'); }; From 3c4fc532533e0f9998c14fd9d239fe223eea2784 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 04:31:45 +0500 Subject: [PATCH 09/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/phone-book.js b/phone-book.js index fc235cb..46a0f2c 100644 --- a/phone-book.js +++ b/phone-book.js @@ -8,7 +8,15 @@ exports.isStar = false; function checkQuery(query) { - return typeof query === 'string'; + var typeQuery = typeof query !== 'string'; + var emptyQuery = query === ''; + + if (typeQuery || emptyQuery) { + + return false; + } + + return true; } function isEmptyQuery(query) { @@ -16,6 +24,7 @@ function isEmptyQuery(query) { return query === undefined; } + function checkPhone(phone) { var regExpPhone = /^([5]\d{2})([1-5]\d{2})([0]\d{1})([1-5]\d{1})$/; @@ -231,9 +240,7 @@ exports.find = function (query) { }); - searchResult.sort(); - - return searchResult; + return searchResult.sort(); } if (fixQuery === '*') { @@ -248,11 +255,9 @@ exports.find = function (query) { }); - searchResult.sort(); - - return searchResult; + return searchResult.sort(); - } else if (fixQuery === '') { + } else if (fixQuery === '' || typeof fixQuery === undefined) { return []; } From d5a1a9e9bfa01645953512f7f5fbc60cc8eee59b Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 04:38:46 +0500 Subject: [PATCH 10/24] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B2=D1=8B=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/phone-book.js b/phone-book.js index 46a0f2c..1afb42c 100644 --- a/phone-book.js +++ b/phone-book.js @@ -27,9 +27,16 @@ function isEmptyQuery(query) { function checkPhone(phone) { - var regExpPhone = /^([5]\d{2})([1-5]\d{2})([0]\d{1})([1-5]\d{1})$/; + var phoneLength = phone.length; + var phoneType = typeof Number(phone) !== 'number'; + var emptyPhone = phone === ''; - return phone.match(regExpPhone); + if (phoneLength < 10 || phoneType || emptyPhone) { + + return false; + } + + return true; } function valEmail(email) { From 429532aaf6d8ca01b1b1aa8ac7f3046499ad6440 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 04:53:02 +0500 Subject: [PATCH 11/24] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B2=D1=8B=D1=80=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/phone-book.js b/phone-book.js index 1afb42c..1f9af11 100644 --- a/phone-book.js +++ b/phone-book.js @@ -41,15 +41,13 @@ function checkPhone(phone) { function valEmail(email) { - var regExpEmail = /^([a-z]+)@([a-z]+\.com)$/; - if (email === '') { return true; - } - return email.match(regExpEmail); + } + return email; } function formatPhone(phone) { From 2b9a5f19120d1632d3b0a6121a00001736a985e6 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 05:16:02 +0500 Subject: [PATCH 12/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/phone-book.js b/phone-book.js index 1f9af11..5bbcef9 100644 --- a/phone-book.js +++ b/phone-book.js @@ -10,8 +10,9 @@ function checkQuery(query) { var typeQuery = typeof query !== 'string'; var emptyQuery = query === ''; + var undefQuery = typeof query === 'undefined'; - if (typeQuery || emptyQuery) { + if (typeQuery || emptyQuery || undefQuery) { return false; } @@ -129,9 +130,9 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uPhone = phone; - uName = name; - var checkEmail = isEmptyQuery(email) ? '' : email; + uPhone = phone.trim(); + uName = isEmptyQuery(name) ? false : name.trim(); + var checkEmail = isEmptyQuery(email) ? '' : email.trim(); if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -160,20 +161,18 @@ exports.add = function (phone, name, email) { exports.update = function (phone, name, email) { var upPhone = ''; var checkEmail = isEmptyQuery(email) ? '' : email; + var fixName = name.trim(); + var fixPhone = phone.trim(); - if (isEmptyQuery(name) && isEmptyQuery(phone)) { - - return false; - - } else if (checkPhone(phone) && valEmail(checkEmail)) { + if (checkPhone(fixPhone) && valEmail(checkEmail) && checkQuery(fixName)) { phoneBook.forEach(function (object, index) { upPhone = phoneBook[index].number; - if (upPhone.indexOf(phone) !== -1) { + if (upPhone.indexOf(fixPhone) !== -1) { - phoneBook[index].username = name; + phoneBook[index].username = fixName; phoneBook[index].mail = checkEmail; } @@ -228,7 +227,7 @@ exports.find = function (query) { var concatResult = ''; var fixQuery = query.trim(); - if (checkQuery(fixQuery) && !isEmptyQuery(fixQuery) && fixQuery !== '*' && fixQuery !== '') { + if (checkQuery(fixQuery) && fixQuery !== '*' && fixQuery !== '') { phoneBook.forEach(function (object, index) { var findPhone = phoneBook[index].number; From 976dcb9cd96eae7732481ab09b71512b4d6bd267 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 21:40:08 +0500 Subject: [PATCH 13/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/phone-book.js b/phone-book.js index 5bbcef9..a3c6f5d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,7 +9,7 @@ exports.isStar = false; function checkQuery(query) { var typeQuery = typeof query !== 'string'; - var emptyQuery = query === ''; + var emptyQuery = query === '' || query === ' '; var undefQuery = typeof query === 'undefined'; if (typeQuery || emptyQuery || undefQuery) { @@ -84,6 +84,12 @@ function concatString(name, phone, email) { function findIndex(query, phone, name, email) { + if (isEmptyQuery(email)) { + + return false; + + } + if (phone.indexOf(query) !== -1 || name.indexOf(query) !== -1 || email.indexOf(query) !== -1) { return true; @@ -101,6 +107,7 @@ var uPhone; var uName; function checkEntry(phone) { + var resultsEntry = true; phoneBook.forEach(function (object, index) { @@ -160,7 +167,7 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = isEmptyQuery(email) ? '' : email; + var checkEmail = isEmptyQuery(email) ? '' : email.trim(); var fixName = name.trim(); var fixPhone = phone.trim(); @@ -179,7 +186,7 @@ exports.update = function (phone, name, email) { }); - return true; + return phoneBook.filter(checkEntry).length !== 0; } return false; @@ -192,9 +199,10 @@ exports.update = function (phone, name, email) { * @returns {Number} - Число удаленных записей */ exports.findAndRemove = function (query) { + var counter = 0; - if (checkQuery(query)) { + if (checkQuery(query) && phoneBook.length !== 0) { phoneBook.forEach(function (object, index) { @@ -261,7 +269,7 @@ exports.find = function (query) { return searchResult.sort(); - } else if (fixQuery === '' || typeof fixQuery === undefined) { + } else if (fixQuery === '' || typeof fixQuery === 'undefined') { return []; } @@ -279,5 +287,5 @@ exports.importFromCsv = function (csv) { // Добавляем в телефонную книгу // Либо обновляем, если запись с таким телефоном уже существует - return csv.split('\n'); + return csv.split('\n').length; }; From 122c3560a17f8c29fc5460325fb1c5076b0010ac Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 23:33:13 +0500 Subject: [PATCH 14/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/phone-book.js b/phone-book.js index a3c6f5d..5ee4490 100644 --- a/phone-book.js +++ b/phone-book.js @@ -139,6 +139,7 @@ exports.add = function (phone, name, email) { var bookObj = {}; uPhone = phone.trim(); uName = isEmptyQuery(name) ? false : name.trim(); + var checkEmail = isEmptyQuery(email) ? '' : email.trim(); if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -168,8 +169,15 @@ exports.add = function (phone, name, email) { exports.update = function (phone, name, email) { var upPhone = ''; var checkEmail = isEmptyQuery(email) ? '' : email.trim(); - var fixName = name.trim(); - var fixPhone = phone.trim(); + var fixName = isEmptyQuery(name) ? false : name.trim(); + var fixPhone; + + if (phone === null || phone === undefined) { + + return false; + } + + fixPhone = phone.trim(); if (checkPhone(fixPhone) && valEmail(checkEmail) && checkQuery(fixName)) { @@ -186,7 +194,7 @@ exports.update = function (phone, name, email) { }); - return phoneBook.filter(checkEntry).length !== 0; + return true; } return false; @@ -233,9 +241,15 @@ exports.find = function (query) { var searchResult = []; var convertedPhone = ''; var concatResult = ''; + + if (query === undefined || query === '' || typeof query === 'undefined') { + + return []; + } + var fixQuery = query.trim(); - if (checkQuery(fixQuery) && fixQuery !== '*' && fixQuery !== '') { + if (checkQuery(fixQuery) && fixQuery !== '*') { phoneBook.forEach(function (object, index) { var findPhone = phoneBook[index].number; @@ -269,9 +283,6 @@ exports.find = function (query) { return searchResult.sort(); - } else if (fixQuery === '' || typeof fixQuery === 'undefined') { - - return []; } }; From 2e8b82e8937b190c9c8cbc4cfae3a4d2f4ef85c6 Mon Sep 17 00:00:00 2001 From: imatasov Date: Tue, 18 Oct 2016 23:51:48 +0500 Subject: [PATCH 15/24] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/phone-book.js b/phone-book.js index 5ee4490..023b7e9 100644 --- a/phone-book.js +++ b/phone-book.js @@ -25,7 +25,6 @@ function isEmptyQuery(query) { return query === undefined; } - function checkPhone(phone) { var phoneLength = phone.length; @@ -137,9 +136,14 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uPhone = phone.trim(); uName = isEmptyQuery(name) ? false : name.trim(); + if (phone === null || phone === undefined) { + + return false; + } + + uPhone = phone.trim(); var checkEmail = isEmptyQuery(email) ? '' : email.trim(); if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -242,7 +246,7 @@ exports.find = function (query) { var convertedPhone = ''; var concatResult = ''; - if (query === undefined || query === '' || typeof query === 'undefined') { + if (query === undefined || query === null || !checkQuery(query)) { return []; } From 1f89bcd0fa6c1ef2f148d6cc833c0df461b9af67 Mon Sep 17 00:00:00 2001 From: imatasov Date: Wed, 19 Oct 2016 00:01:23 +0500 Subject: [PATCH 16/24] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D1=8B=20v2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/phone-book.js b/phone-book.js index 023b7e9..f519cb2 100644 --- a/phone-book.js +++ b/phone-book.js @@ -26,17 +26,9 @@ function isEmptyQuery(query) { } function checkPhone(phone) { + var reg = /^(\d{10})$/; - var phoneLength = phone.length; - var phoneType = typeof Number(phone) !== 'number'; - var emptyPhone = phone === ''; - - if (phoneLength < 10 || phoneType || emptyPhone) { - - return false; - } - - return true; + return reg.test(phone); } function valEmail(email) { From 4161b28efd886b89c754b982fff3d018b5556b07 Mon Sep 17 00:00:00 2001 From: imatasov Date: Wed, 19 Oct 2016 05:47:25 +0500 Subject: [PATCH 17/24] Phone book v3 --- phone-book.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/phone-book.js b/phone-book.js index f519cb2..8118320 100644 --- a/phone-book.js +++ b/phone-book.js @@ -56,6 +56,7 @@ function formatPhone(phone) { function concatString(name, phone, email) { var result; + if (email !== '') { result = '{1}, {2}, {3}' @@ -75,7 +76,7 @@ function concatString(name, phone, email) { function findIndex(query, phone, name, email) { - if (isEmptyQuery(email)) { + if (email === undefined) { return false; @@ -206,9 +207,17 @@ exports.findAndRemove = function (query) { var counter = 0; - if (checkQuery(query) && phoneBook.length !== 0) { + if (checkQuery(query)) { - phoneBook.forEach(function (object, index) { + if (query === '*') { + + var bookLength = phoneBook.length; + phoneBook = []; + + return bookLength; + } + + phoneBook.forEach(function (element, index) { var findPhone = phoneBook[index].number; var findName = phoneBook[index].username; @@ -217,9 +226,7 @@ exports.findAndRemove = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { phoneBook.splice(index, 1, ''); - counter++; - } }); From 1fba8ec340c6fda9e63e4da36bdd21cf88f23a05 Mon Sep 17 00:00:00 2001 From: imatasov Date: Thu, 20 Oct 2016 05:52:01 +0500 Subject: [PATCH 18/24] Phone book v3.1 --- phone-book.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/phone-book.js b/phone-book.js index 8118320..3fc0cb8 100644 --- a/phone-book.js +++ b/phone-book.js @@ -11,8 +11,9 @@ function checkQuery(query) { var typeQuery = typeof query !== 'string'; var emptyQuery = query === '' || query === ' '; var undefQuery = typeof query === 'undefined'; + var undQuery = query === undefined; - if (typeQuery || emptyQuery || undefQuery) { + if (typeQuery || emptyQuery || undefQuery || undQuery) { return false; } @@ -76,13 +77,7 @@ function concatString(name, phone, email) { function findIndex(query, phone, name, email) { - if (email === undefined) { - - return false; - - } - - if (phone.indexOf(query) !== -1 || name.indexOf(query) !== -1 || email.indexOf(query) !== -1) { + if (email.indexOf(query) !== -1 || phone.indexOf(query) !== -1 || name.indexOf(query) !== -1) { return true; } @@ -206,13 +201,15 @@ exports.update = function (phone, name, email) { exports.findAndRemove = function (query) { var counter = 0; + var result = []; + var copyBook = phoneBook.slice(); if (checkQuery(query)) { if (query === '*') { - var bookLength = phoneBook.length; - phoneBook = []; + var bookLength = copyBook.length; + copyBook = []; return bookLength; } @@ -225,7 +222,8 @@ exports.findAndRemove = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { - phoneBook.splice(index, 1, ''); + result.push(phoneBook[index]); + counter++; } From 8247470cec2b1b3dc505f1790f5aafe3ebe26e98 Mon Sep 17 00:00:00 2001 From: imatasov Date: Thu, 20 Oct 2016 05:56:55 +0500 Subject: [PATCH 19/24] Back to old version --- phone-book.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 3fc0cb8..49dfe0d 100644 --- a/phone-book.js +++ b/phone-book.js @@ -77,6 +77,11 @@ function concatString(name, phone, email) { function findIndex(query, phone, name, email) { + if (email === undefined) { + + return false; + + } if (email.indexOf(query) !== -1 || phone.indexOf(query) !== -1 || name.indexOf(query) !== -1) { return true; @@ -222,7 +227,7 @@ exports.findAndRemove = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { - result.push(phoneBook[index]); + phoneBook.splice(index, 1, ''); counter++; } From 3991f570f035daf137a738cacff9b70bf37c140e Mon Sep 17 00:00:00 2001 From: imatasov Date: Thu, 20 Oct 2016 05:57:53 +0500 Subject: [PATCH 20/24] Back to old version2 --- phone-book.js | 1 - 1 file changed, 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 49dfe0d..fe88467 100644 --- a/phone-book.js +++ b/phone-book.js @@ -206,7 +206,6 @@ exports.update = function (phone, name, email) { exports.findAndRemove = function (query) { var counter = 0; - var result = []; var copyBook = phoneBook.slice(); if (checkQuery(query)) { From 942ee94e76012bd882992ff744d2b898cf5d13fa Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 24 Oct 2016 04:55:16 +0500 Subject: [PATCH 21/24] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/phone-book.js b/phone-book.js index fe88467..7dd1f4c 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,7 +9,7 @@ exports.isStar = false; function checkQuery(query) { var typeQuery = typeof query !== 'string'; - var emptyQuery = query === '' || query === ' '; + var emptyQuery = query === '' || query === null; var undefQuery = typeof query === 'undefined'; var undQuery = query === undefined; @@ -21,10 +21,6 @@ function checkQuery(query) { return true; } -function isEmptyQuery(query) { - - return query === undefined; -} function checkPhone(phone) { var reg = /^(\d{10})$/; @@ -129,15 +125,15 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uName = isEmptyQuery(name) ? false : name.trim(); + uName = !checkQuery(name) ? false : name.trim(); - if (phone === null || phone === undefined) { + if (!checkQuery(phone)) { return false; } uPhone = phone.trim(); - var checkEmail = isEmptyQuery(email) ? '' : email.trim(); + var checkEmail = !checkQuery(email) ? '' : email.trim(); if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -165,8 +161,8 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = isEmptyQuery(email) ? '' : email.trim(); - var fixName = isEmptyQuery(name) ? false : name.trim(); + var checkEmail = !checkQuery(email) ? '' : email.trim(); + var fixName = !checkQuery(name) ? false : name.trim(); var fixPhone; if (phone === null || phone === undefined) { @@ -207,6 +203,7 @@ exports.findAndRemove = function (query) { var counter = 0; var copyBook = phoneBook.slice(); + var remResult = []; if (checkQuery(query)) { @@ -226,9 +223,9 @@ exports.findAndRemove = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { - phoneBook.splice(index, 1, ''); + remResult.push(phoneBook[index]); - counter++; + counter = remResult.length; } }); @@ -247,7 +244,7 @@ exports.find = function (query) { var convertedPhone = ''; var concatResult = ''; - if (query === undefined || query === null || !checkQuery(query)) { + if (!checkQuery(query)) { return []; } @@ -299,9 +296,6 @@ exports.find = function (query) { * @returns {Number} – количество добавленных и обновленных записей */ exports.importFromCsv = function (csv) { - // Парсим csv - // Добавляем в телефонную книгу - // Либо обновляем, если запись с таким телефоном уже существует return csv.split('\n').length; }; From 117e9ce0c235bec394992d156f7be8c884d08042 Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 24 Oct 2016 05:11:06 +0500 Subject: [PATCH 22/24] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=20=D1=80=D0=B5?= =?UTF-8?q?=D0=B3=D0=B2=D1=8B=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phone-book.js b/phone-book.js index 7dd1f4c..acdd428 100644 --- a/phone-book.js +++ b/phone-book.js @@ -23,7 +23,7 @@ function checkQuery(query) { function checkPhone(phone) { - var reg = /^(\d{10})$/; + var reg = /^(555\d\d\d\d\d\d\d)$/; return reg.test(phone); } From a5dec70e96acca513464343909f48298e6c58555 Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 24 Oct 2016 05:18:13 +0500 Subject: [PATCH 23/24] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20trim?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/phone-book.js b/phone-book.js index acdd428..56ff347 100644 --- a/phone-book.js +++ b/phone-book.js @@ -23,7 +23,7 @@ function checkQuery(query) { function checkPhone(phone) { - var reg = /^(555\d\d\d\d\d\d\d)$/; + var reg = /^(555\d{7})$/; return reg.test(phone); } @@ -125,15 +125,15 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uName = !checkQuery(name) ? false : name.trim(); + uName = !checkQuery(name) ? false : name; if (!checkQuery(phone)) { return false; } - uPhone = phone.trim(); - var checkEmail = !checkQuery(email) ? '' : email.trim(); + uPhone = phone; + var checkEmail = !checkQuery(email) ? '' : email; if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { @@ -161,8 +161,8 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = !checkQuery(email) ? '' : email.trim(); - var fixName = !checkQuery(name) ? false : name.trim(); + var checkEmail = !checkQuery(email) ? '' : email; + var fixName = !checkQuery(name) ? false : name; var fixPhone; if (phone === null || phone === undefined) { @@ -170,7 +170,7 @@ exports.update = function (phone, name, email) { return false; } - fixPhone = phone.trim(); + fixPhone = phone; if (checkPhone(fixPhone) && valEmail(checkEmail) && checkQuery(fixName)) { @@ -249,7 +249,7 @@ exports.find = function (query) { return []; } - var fixQuery = query.trim(); + var fixQuery = query; if (checkQuery(fixQuery) && fixQuery !== '*') { From 86778d439ff755d371315915f8c3a1bb19b41227 Mon Sep 17 00:00:00 2001 From: imatasov Date: Mon, 24 Oct 2016 20:40:52 +0500 Subject: [PATCH 24/24] =?UTF-8?q?=D0=9E=D1=82=D0=BA=D0=B0=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phone-book.js | 98 ++++++++++++++++++++------------------------------- 1 file changed, 39 insertions(+), 59 deletions(-) diff --git a/phone-book.js b/phone-book.js index 56ff347..9ac08ac 100644 --- a/phone-book.js +++ b/phone-book.js @@ -9,11 +9,10 @@ exports.isStar = false; function checkQuery(query) { var typeQuery = typeof query !== 'string'; - var emptyQuery = query === '' || query === null; + var emptyQuery = query === '' || query === ' '; var undefQuery = typeof query === 'undefined'; - var undQuery = query === undefined; - if (typeQuery || emptyQuery || undefQuery || undQuery) { + if (typeQuery || emptyQuery || undefQuery) { return false; } @@ -21,9 +20,13 @@ function checkQuery(query) { return true; } +function isEmptyQuery(query) { + + return query === undefined; +} function checkPhone(phone) { - var reg = /^(555\d{7})$/; + var reg = /^(\d{10})$/; return reg.test(phone); } @@ -78,7 +81,8 @@ function findIndex(query, phone, name, email) { return false; } - if (email.indexOf(query) !== -1 || phone.indexOf(query) !== -1 || name.indexOf(query) !== -1) { + + if (phone.indexOf(query) !== -1 || name.indexOf(query) !== -1 || email.indexOf(query) !== -1) { return true; } @@ -90,8 +94,6 @@ function findIndex(query, phone, name, email) { * Телефонная книга */ var phoneBook = []; - -var uPhone; var uName; function checkEntry(phone) { @@ -125,20 +127,13 @@ function checkEntry(phone) { */ exports.add = function (phone, name, email) { var bookObj = {}; - uName = !checkQuery(name) ? false : name; - - if (!checkQuery(phone)) { + uName = isEmptyQuery(name) ? false : name; + var checkEmail = isEmptyQuery(email) ? '' : email; - return false; - } - - uPhone = phone; - var checkEmail = !checkQuery(email) ? '' : email; - - if (checkPhone(uPhone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(uPhone)) { + if (checkPhone(phone) && checkQuery(uName) && valEmail(checkEmail) && checkEntry(phone)) { bookObj = { - number: uPhone, + number: phone, username: uName, mail: checkEmail }; @@ -161,24 +156,16 @@ exports.add = function (phone, name, email) { */ exports.update = function (phone, name, email) { var upPhone = ''; - var checkEmail = !checkQuery(email) ? '' : email; + var checkEmail = isEmptyQuery(email) ? '' : email; var fixName = !checkQuery(name) ? false : name; - var fixPhone; - if (phone === null || phone === undefined) { - - return false; - } - - fixPhone = phone; - - if (checkPhone(fixPhone) && valEmail(checkEmail) && checkQuery(fixName)) { + if (checkPhone(phone) && valEmail(checkEmail)) { phoneBook.forEach(function (object, index) { upPhone = phoneBook[index].number; - if (upPhone.indexOf(fixPhone) !== -1) { + if (upPhone.indexOf(phone) !== -1) { phoneBook[index].username = fixName; phoneBook[index].mail = checkEmail; @@ -200,17 +187,14 @@ exports.update = function (phone, name, email) { * @returns {Number} - Число удаленных записей */ exports.findAndRemove = function (query) { - + var removed = []; var counter = 0; - var copyBook = phoneBook.slice(); - var remResult = []; if (checkQuery(query)) { if (query === '*') { - var bookLength = copyBook.length; - copyBook = []; + var bookLength = phoneBook.slice().length; return bookLength; } @@ -223,9 +207,8 @@ exports.findAndRemove = function (query) { if (findIndex(query, findPhone, findName, findEmail)) { - remResult.push(phoneBook[index]); - - counter = remResult.length; + removed.push(index); + counter = removed.length; } }); @@ -244,21 +227,30 @@ exports.find = function (query) { var convertedPhone = ''; var concatResult = ''; - if (!checkQuery(query)) { + if (checkQuery(query)) { - return []; - } + if (query === '*') { - var fixQuery = query; + phoneBook.forEach(function (object, index) { + var findName = phoneBook[index].username; + var findEmail = phoneBook[index].mail; + convertedPhone = formatPhone(phoneBook[index].number); + concatResult = concatString(findName, convertedPhone, findEmail); + + searchResult.push(concatResult); + + }); + + return searchResult.sort(); - if (checkQuery(fixQuery) && fixQuery !== '*') { + } phoneBook.forEach(function (object, index) { var findPhone = phoneBook[index].number; var findName = phoneBook[index].username; var findEmail = phoneBook[index].mail; - if (findIndex(fixQuery, findPhone, findName, findEmail)) { + if (findIndex(query, findPhone, findName, findEmail)) { convertedPhone = formatPhone(findPhone); concatResult = concatString(findName, convertedPhone, findEmail); @@ -271,22 +263,7 @@ exports.find = function (query) { return searchResult.sort(); } - if (fixQuery === '*') { - - phoneBook.forEach(function (object, index) { - var findName = phoneBook[index].username; - var findEmail = phoneBook[index].mail; - convertedPhone = formatPhone(phoneBook[index].number); - concatResult = concatString(findName, convertedPhone, findEmail); - - searchResult.push(concatResult); - - }); - - return searchResult.sort(); - - } - + return []; }; /** @@ -296,6 +273,9 @@ exports.find = function (query) { * @returns {Number} – количество добавленных и обновленных записей */ exports.importFromCsv = function (csv) { + // Парсим csv + // Добавляем в телефонную книгу + // Либо обновляем, если запись с таким телефоном уже существует return csv.split('\n').length; };