Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Матасов Иван #70

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
9ff3ddc
Добавлена задача
Oct 11, 2016
29ebfc5
Merge pull request #1 from urfu-2016/add-task
gogoleff Oct 11, 2016
b0af7e3
Phone book v1
IvanMatasov Oct 16, 2016
94d6e4b
Исправлена конкатенация строк
IvanMatasov Oct 16, 2016
7bbf9cf
Phone book test
IvanMatasov Oct 16, 2016
f8cbab3
Исправлены ошибки теста
IvanMatasov Oct 16, 2016
1ba94ea
Добавлены тесты
IvanMatasov Oct 17, 2016
9d02255
Тест 1
IvanMatasov Oct 17, 2016
b651dcb
Тест 2
IvanMatasov Oct 17, 2016
3c4fc53
Добавлена функция проверки запроса
IvanMatasov Oct 17, 2016
d5a1a9e
Удален регвыр
IvanMatasov Oct 17, 2016
429532a
Удален регвыр email
IvanMatasov Oct 17, 2016
2b9a5f1
Добавлены новые тесты
IvanMatasov Oct 18, 2016
976dcb9
Добавлена проверка запроса
IvanMatasov Oct 18, 2016
122c356
Добалены новые тесты v2
IvanMatasov Oct 18, 2016
2e8b82e
Добавлены новые тесты
IvanMatasov Oct 18, 2016
1f89bcd
Новые тесты v2
IvanMatasov Oct 18, 2016
4161b28
Phone book v3
IvanMatasov Oct 19, 2016
1fba8ec
Phone book v3.1
IvanMatasov Oct 20, 2016
8247470
Back to old version
IvanMatasov Oct 20, 2016
3991f57
Back to old version2
IvanMatasov Oct 20, 2016
942ee94
Исправлены тесты
IvanMatasov Oct 23, 2016
117e9ce
Тест регвыра
IvanMatasov Oct 24, 2016
a5dec70
Убрана функция trim
IvanMatasov Oct 24, 2016
86778d4
Откат
IvanMatasov Oct 24, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -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
3 changes: 3 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "hrundel/node"
}
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.idea
/node_modules
*.log
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
save=true
save-exact=true
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
language: node_js
node_js:
- "6"
68 changes: 67 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,67 @@
# javascript-task-2
# Задача «Телефонная книга»

Перед выполнением задания внимательно прочитайте:

- [О всех этапах проверки задания](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)

<img width="1279" alt="Позвони мне, позвони" src="https://cloud.githubusercontent.com/assets/4534405/19268754/abd81b8c-8fcf-11e6-9cbb-6665bf84bcfa.png">
44 changes: 44 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
'use strict';

var phoneBook = require('./phone-book');

// Эти записи добавятся, вернется true
phoneBook.add('5554440044', 'Григорий', '[email protected]');
phoneBook.add('5552220022', 'Борис', '[email protected]');
phoneBook.add('5551110011', 'Алекс');
phoneBook.add('5553330033', 'Валерий', '[email protected]');

// Эти запись не добавятся
phoneBook.add('3330033', 'Неизвестный', '[email protected]');
phoneBook.add('5551110011', 'Алексей');
phoneBook.add('5555550055');

// Обновление
phoneBook.update('5551110011', 'Алексей', '[email protected]');
phoneBook.update('5553330033', 'Валерий');

// В следующих примерах вернутся все записи
console.info(phoneBook.find('*'));
console.info(phoneBook.find('555'));
// Вывод будет следующий
// [
// 'Алексей, +7 (555) 111-00-11, [email protected]',
// 'Борис, +7 (555) 222-00-22, [email protected]',
// 'Валерий, +7 (555) 333-00-33',
// 'Григорий, +7 (555) 444-00-44, [email protected]'
// ]

// Удаление
phoneBook.findAndRemove('@'); // returns 3

if (phoneBook.isStar) {
// Импортируем из csv
var csv = [
'Борис;5552220022;[email protected]',
'Григорий;5554440044;[email protected]',
'Алексей;5551110011;[email protected]',
'Валерий;5553330033;[email protected]',
'Неизвестный;3330033;[email protected]'
].join('\n');
phoneBook.importFromCsv(csv); // returns 4
}
13 changes: 13 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
Loading