Для моего первого проекта по программе веб-разработки в школе Flatiron я решил создать CLI-приложение Stock Activity, которое будет получать ежедневные данные об активности акций с веб-сайта Nasdaq Stock Market и отображать их с помощью простого интерфейса консоли.

На домашней странице Nasdaq есть раздел «Активность акций» с пятью категориями: «Самая активная», «Самая продвинутая», «Самая низкая», «Объем в долларах» и «Необычный объем». В каждой категории перечислены пять акций с наиболее важной информацией (цена последней продажи, чистое и процентное изменение, объем акций)*. У каждой акции есть страница на веб-сайте, на которой подробно описаны характеристики акции.

Я представлял, как работает мой драгоценный камень, следующим образом. Во-первых, он приветствует пользователя при открытии. Затем он предлагает пользователю ввести категорию и отображает пять акций в этой категории. Просмотрев хотя бы одну категорию, пользователь может либо просмотреть другую категорию, либо получить более подробную информацию о конкретной акции столько раз, сколько он пожелает, пока не будет введен выход.

Чтобы построить гем, я создал три класса: класс CLI, отвечающий за взаимодействие с пользователем, класс Stock, для каждого экземпляра которого есть атрибуты, хранящие ключевые характеристики акций. Наконец, у меня есть класс Scraper, который очищает веб-сайт Nasdaq с помощью драгоценного камня Nokogiri.

Схема программы такова, что экземпляр класса CLI вызывает метод очистки класса Scraper для извлечения нужного контента из Nasdaq, а затем передает очищенный контент методу create_from_collection класса Stock. Последний затем создаст экземпляры запаса и сохранит детали в атрибутах. Наконец, экземпляр CLI форматирует и отображает сведения о запасах. Кроме того, экземпляр CLI может вызывать Scrape_stock_details Scraper, если пользователь хочет подробно просмотреть конкретную акцию.

Поскольку это был первый раз, когда я создавал проект с нуля, я многое узнал о рабочем процессе проекта. Я понял, как важно тратить время на разработку архитектуры программы перед тем, как приступить к написанию кода, чтобы продумать отношения между классами. Я также осознал важность рефакторинга: вместо того, чтобы хотеть получить все идеально с первой попытки и ничего не получить в результате, лучше иметь несколько кодов — даже если они не самые чистые — и потом проводить рефакторинг. С таким подходом я смог добиться постоянного прогресса в своем проекте: по мере того, как у меня работало больше функций, у меня было гораздо более конкретное представление о том, как мой проект должен работать, и оттуда добавление новых функций и рефакторинг старых стало намного проще. .

Наконец, при создании этого ppa у меня было несколько шокирующее осознание. Это было связано с моим предыдущим предположением, что Ruby передается по значению, но я считаю, что эта тема достаточно важна, чтобы оправдать ее отдельный пост, поэтому он появится в ближайшее время…

* Для категории «Необычный объем» также дается дополнительная информация об изменении объема в процентах.