CoderCastrov logo
CoderCastrov
Руби

Как я создал Ruby CLI, который помогает вам начать еженедельное исследование беременности!

Как я создал Ruby CLI, который помогает вам начать еженедельное исследование беременности!
просмотров
3 мин чтение
#Руби
Table Of Content

    Вся информация для этого проекта была взята с What to Expect

    Для этого проекта я сосредоточился на информации, доступной на странице неделя за неделей.

    Я использовал это видео, чтобы помочь мне начать настройку IDE: Настройка IDE для проекта CLI в браузере

    Я также следовал общей структуре этого гема, чтобы помочь мне организовать файлы для этого проекта: Лучшие рестораны мира

    В этом геме есть три основных класса, и все они являются расширениями модуля PregnancyWeeksInfo. Вот очень краткое описание каждого из них.

    1. Класс cli, определенный внутри файла cli.rb. Этот файл содержит логику взаимодействия cli с пользователем.

    2. Класс scraper, определенный внутри файла scraper.rb. Этот файл содержит все действия, которые будут выполнены для парсинга веб-сайта и получения информации.

    3. Класс week, определенный внутри файла week.rb. Этот файл определяет объект week. Каждый объект week представляет неделю беременности. Поскольку всего 42 недели, будет создано 42 экземпляра этого класса. Каждый объект week будет содержать конкретную информацию, связанную с данной неделей беременности.

    Более подробный взгляд на класс CLI

    Что он делает?

    Этот класс вызывает метод make_weeks в моем классе scraper, чтобы начать парсинг веб-сайта беременности и получить информацию.

    Затем он взаимодействует с пользователем, чтобы запросить у него конкретную неделю, которую он хотел бы изучить. Основываясь на этом, он либо печатает все недели в заданном триместре, либо в заданной неделе.

    Вот основная структура моего файла cli:

    cli.rb

    Более подробный взгляд на класс Scraper

    Этот класс будет делать всю работу по парсингу для вас!

    Как вы помните, в классе cli мы вызываем метод make_weeks в классе scraper. Это вызывает цепочку действий в классе scraper, начиная с метода make_weeks.

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

    Методы в этом классе для парсинга просто опираются на метод get_all_links для сбора всех 42 ссылок с основной ссылки и метод scrape_all_weeks для получения xml-частей, содержащих три основные части еженедельной информации, а именно вес, размер и количество оставшихся недель, которые создаются при инициализации новых экземпляров.

    Что этот класс не делает, так это не парсит информацию внутри ссылок отдельных недель для получения дополнительной информации, такой как симптомы и дополнительные материалы для чтения. Это остается для класса week.

    Для каждого объекта week xml, переданного в метод make_weeks, будет создан экземпляр класса week с использованием данных внутри объекта week xml.

    Вот основная структура моего файла scraper:

    scraper.rb

    Более подробный взгляд на класс Week

    Наконец, у нас есть центральный фундамент, на котором строится остальная часть гема cli: класс week. Это класс, на который вызывается метод make_weeks в классе scraper. Общая структура выглядит следующим образом:

    week.rb

    Есть метод класса new_from_page, которому передается URL и объект week xml, из которых он затем создает новые экземпляры класса.

    Интересно то, что в то время как вес, размер, количество оставшихся недель и ссылка на страницу создаются при инициализации экземпляра week, симптомы и материалы для чтения для каждой недели не обязательно парсятся и сохраняются в переменных класса, так как они парсятся и сохраняются только тогда, когда пользователь хочет изучить конкретную неделю. Это может быть довольно оптимально с точки зрения хранения данных!

    Теперь у меня есть вся информация о беременности на моем компьютере!

    Вот видеодемонстрация работы CLI: Видео демонстрация Pregnancy CLI GemВы также можете скачать копию Pregnancy CLI Gem с моего GitHub.