GithubHelp home page GithubHelp logo

sseezov / l5-validator-test-v1 Goto Github PK

View Code? Open in Web Editor NEW
43.0 2.0 67.0 38 KB

Проект для подготовки к аттестации и экзамену в Хекслет-колледже

Makefile 10.98% JavaScript 89.02%

l5-validator-test-v1's Introduction

Правила и регламент

Задание

Ваша задача написать валидатор, в котором есть ряд методов и свойств и экспортировать его из файла src/Validator.js. Валидатор позволяет проверять аргументы на соответствие необходимым условиям, которые были заданы с помощью методов валидатора.

Пример использования:

// создаем экземпляр валидатора
const v = new Validator();
// определяем метод для валидации чисел и связываем его с валидатором, обращаясь к нему через переменную.
const schema = v.number();

// проверяем данные на соответствие числовому типу, с помощью метода isValid()
schema.isValid('Hexlet'); // false
schema.isValid(''); // false
schema.isValid(null); // false
schema.isValid(123); // true

Примечания

Вы можете самостоятельно протестировать работу валидатора. В каталоге src разрешено использовать любые файлы и создавать новые, если это делает вашу разработку более удобной. Вам не обязательно использовать все файлы, достаточно реализовать валидатор в Validator.js, остальные файлы созданы для вашего удобства.

Для тестирования валидатора, достаточно создать экземпляр валидатора, настроить валидацию с помощью методов и вызвать метод isValid() с необходимым аргументом, после чего написать в терминале:

node index.js

1 задача

Вам необходимо создать валидатор, который способен принимать аргумент и проводить его проверку на соответствие определенным условиям. В данной задаче мы ограничиваемся валидацией только чисел. Для этого в вашем валидаторе должен быть метод number(), который создает экземпляр валидатора чисел. Этот экземпляр обладает методом isValid(), который принимает данные на вход и возвращает значение true или false в зависимости от того, являются ли входные данные числом или нет.

Параметры и методы

  • аргумент, который мы валидируем (проверяем)
  • метод валидатора number(), который создает экземпляр валидатора чисел
  • метод экземпляра isValid(), который вызывается у экземпляра number(), он принимает данные на вход и валидирует
const v = new Validator();
const schema = v.number();

schema.isValid(null); // false
schema.isValid(''); // false
schema.isValid(true); // false
schema.isValid(123); // true
schema.isValid(0); // true

После добавления методов number() и isValid(), экземпляр валидатора будет проверять является ли аргумент типом данных Number.

2 задача

Вам необходимо расширить функциональность экземпляра валидатора чисел, добавив к нему методы even() и odd(). При вызове метода even(), он добавляет дополнительную проверку, которая будет выполняться при вызове метода isValid() на то, является ли число четным. И наоборот, вызов метод odd(), проверяет является ли число нечетным.

Методы

  • метод even(), который вызывается у экземпляра number(). Он добавляет проверку на четность
  • метод odd(), который вызывается у экземпляра number(). Он добавляет проверку на нечетность
const v = new Validator();

const schema1 = v.number();
schema1.isValid(11); // true;

const schema2 = v.number().even()
schema2.isValid(2); // true;
schema2.isValid(11); // false;

const schema3 = v.number().odd();
schema.isValid(22); // false;
schema.isValid(23); // true;

После добавления методов even() или odd(), экземпляр валидатора чисел будет проверять является ли аргумент четным или нечетным числом.

3 задача

Вам необходимо создать валидатор массивов, добавив к нему метод array(). Аналогично методу number(), метод array() создает экземпляр валидатора массивов. Для валидации массива у этого экземпляра также есть метод isValid(), который проверяет, является ли переданный аргумент массивом.

Методы

  • метод валидатора array(), который создает экземпляр валидатора массивов
  • метод isValid(), который вызывается у экземпляра array(). Он проверяет является ли аргумент массивом
const v = new Validator();
const schema = v.array();

schema.isValid([]); // true
schema.isValid(123); // false
schema.isValid('Hexlet'); // false

После добавления метода array(), экземпляр валидатора сможет проверять переданные значения на соответствие экземпляру глобального объекта Array.

4 задача

Вам необходимо расширить функциональность экземпляра валидатора массивов. Кроме того, что он может валидировать, является ли аргумент массивом, он должен также иметь возможность проверять, соответствует ли массив указанной длине, если бы вызван метод length(), аргументом в котором является число, означающее необходимую длину массива.

Методы

  • метод length(), который вызывается у экземпляра array(). Он проверяет соответствует ли длина массива заданному в length() аргументу
const v = new Validator();
const schema1 = v.array();

schema1.isValid([1, 2]); // true

const schema2 = v.array().length(4);
schema2.isValid([1, 2]); // false
schema2.isValid([1, 2, 2, 1]); // true

После добавления метода length(), экземпляр валидатора массивов будет способен проверять, соответствует ли длина массива заданной в методе длине.

5 задача

Вам необходимо создать валидатор полей объекта, используя методы, представленные в предыдущих задачах. Для этого необходимо создать метод object(), который проверяет не сам объект, а данные внутри него на соответствием заданным валидаторам. Метод Validator.object() должен содержать метод shape(), позволяющий задать поля, подлежащие валидации, для объекта. Метод shape() принимает объект, в котором ключи представляют поля, которые требуется проверить, а значения - экземпляры валидаторов. Если количество полей в shape не совпадает с количеством полей в валидируемом объекте, то валидация не проходит.

Методы

  • метод валидатора (экземпляр класса Validator) object(), который проверяет данные внутри объекта (поля объекта)
  • метод shape(), который вызывается у экземпляра object(). Он позволяет задать поля валидации для объекта
const v = new Validator();

// Позволяет описывать валидацию для свойств объекта
const schema = v.object().shape({
  id: v.number().odd(), // теперь, при валидации объекта с ключом id, значение этого ключа пройдет валидацию в соответствии с текущими методами
  basket: v.array().length(3),
});

schema.isValid({ id: 11, basket: ['potatos', 'tomatos', 'oranges'] }); // true
schema.isValid({ id: 12, basket: ['potatos', 'tomatos', 'oranges'] }); // false
schema.isValid({ id: 11, basket: [] }); // false

После добавления методов object() и shape(), экземпляр валидатора сможет проверять поля объекта на соответствие заданным валидаторам

l5-validator-test-v1's People

Contributors

sseezov avatar

Stargazers

Danya avatar  avatar  avatar  avatar Kirsanov Alex avatar  avatar соус avatar  avatar Andrei Belskii avatar  avatar Dmitry Makhanek avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar Vlad avatar  avatar  avatar  avatar Rodion avatar Greenbox avatar  avatar Karina avatar  avatar  avatar  avatar Demid avatar Denis Parfenov avatar Daria Savicheva avatar  avatar  avatar Korolenok Sergey avatar Leonid Bezrukov avatar  avatar  avatar Auzmit avatar Igor Gilmutdinov avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.