Необходимо написать некоторое подобие утилиты sl
. Для того чтобы иметь представление что делает данная утилита, для ubuntu можно поставить ее через sudo apt-get install sl
и после завершения установки написать в терминале sl
. Если вы упали со стула потому что на вас поехал паровоз - вы на правильном пути.
В данном домашнем задании мы не ограничиваем вас только поездом, в общем случае это должна быть какая-то ASCII-картинка которая будет как-то дергаться.
Необходимо написать утилиту gemfiler
, которая будет показывать отфильтрованные версии гемов.
Входные параметры:
- Имя gem'а
- Указание версий в формате, совместимом с Gemfile
Вывод на консоль:
- Все версии данной библиотеки, при этом красным цветом подсвечиваются отфильтрованные версии.
Требования:
- Утилита должна парсить входные параметры с использованием существующих библиотек.
- Все версии gem'ов должны браться путем парсинга страницы или через взаимодействите с rubygems API
- Утилита должна быть поделена на независимые модули, каждый должен быть представлен отдельным классом.
- Правильная обработка потока ошибок.
Примеры:
./gemfiler devise '~> 2.1.3'
./gemfiler rails '>= 3.1'
./gemfiler rails '>= 3.1' '< 4.0'
Создаем убийцу grep
. Для тех кто не знает что это такое - советую пойти поиграться в консоль с этой утилитой. Если кратко - то это утилита для поиска строк, содержащих текст в файлах. Атомарной единицей для этой утилиты является строка. То есть при поиске если вы находите в строке искомый текст - она выдает вам обратно в STDOUT строку.
Если вы зайдете в мануал то увидите что формат команды примерно такой:
grep [options] PATTERN [FILE...]
grep [options] [-e PATTERN | -f FILE] [FILE...]
Первый формат означает что в команду сперва передаются опции, затем какой-то текст для поиска в файле и затем 1 или несколько файлов. Второй формат примерное такой же, но использует регулярные выражения для поиска по файлам.
В результате домашнего задания вам нужно написать утилиту grep с несколько ограниченным функционалом. Необходимые опции которые вам надо реализовать:
-A
- опция которая выводит количество строк до и после найденной строки-e
- опция которая позволяет вводить регулярные выражения вместо просто части строки-R
- опция которая говорит искать строку не в одном файле, а рекурсивно во всех файлах в папке-z
- опция указывающая что файлик является сжатым и сначала его надо разжать и только потом искать по нему.
Для примера будем использовать файлик 1.txt со следующим содержанием:
aa
bb
cc
abc
bcd
cde
ggg
Результаты выполнения:
grep a 1.txt
=> aa
=> abc
grep -A 1 ab 1.txt
=> cc
=> abc
=> bcd
grep -A 1 b 1.txt
=> aa
=> bb
=> cc
=> cc
=> abc
=> bcd
=> abc
=> bcd
=> cde
grep -e "a[^b]" 1.txt
=> aa
Для того чтобы вы сразу не писали огромную утилиту разобьем ее имплементацию на несколько этапов:
- Сделайте утилиту которая просто без опций находит строки в файле.
- Добавьте возможность искать по нескольким файлам, aka
grep a 1.txt 2.txt
- Добавьте опцию
-A
которая выводит соседние строки. - Добавьте опцию
-e
которая ищет по регуляркам - Добавьте опцию
-R
которая будет искать по всем файлам в папке - Добавьте опцию
-z
которая будет искать по сжатому через gzip файлу
Задания принимаются только ввиде ссылки на гитхаб.