Цель:
Вот такая интересная дилемма у меня была. Моя первоначальная идея состояла в том, чтобы создать Gem, который будет очищать веб-сайт для ежедневных рецептов по предпочтениям и рейтингу. Достаточно просто, не так ли? Что ж, это был мой первый Gem, и я совершил ошибку новичка, создав интерфейс командной строки и классы (правда, с заглушенными данными), прежде чем найти подходящий веб-сайт. Оказывается, с веб-сайтов с рецептами особенно сложно собрать информацию, потому что они вообще не стандартизированы. За это время я также обнаружил свою почти забавную неспособность работать (или пытаться) с API. Короче говоря, я столкнулся с множеством ошибок, подобных этой:
В конце концов я решил сначала найти подходящий веб-сайт, а затем создать свой Gem на основе легко очищаемых данных. По воле судьбы я нашел тот, который идеально соответствовал моим интересам, на веб-сайте, который предлагал ежедневные скидки на товары, связанные с автомобилями. У меня появилось новое чувство цели в надежде, что я действительно смогу использовать этот драгоценный камень в будущем. Так что теперь цель состояла в том, чтобы предоставить некоторые ежедневные предложения, актуальные для автолюбителей.
Испытания:
Итак, у меня был веб-сайт, и необходимые мне данные были относительно доступны. Кусок пирога, верно? Если бы. Оказалось, что при очистке и форматировании данных возникло множество проблем. В конце концов, приложив немного усилий и безудержного гугления, я смог построить свои объекты с правильными свойствами.
Особенности:
Итак, когда у меня были объекты и их атрибуты, я начал думать о том, что я хочу, чтобы мой драгоценный камень мог делать. Я знаю, что он сможет очистить выбранную мной веб-страницу и вернуть соответствующие объекты и свойства для каждой конкретной сделки, но потом я как пользователь подумал, что будет иметь отношение ко мне? Что ж, я люблю экономить деньги, поэтому я добавил функцию сортировки, которая настраивает объекты по цене. Я также добавил возможность запуска с помощью драгоценного камня Launchy, чтобы вы могли получить доступ к ссылкам прямо с вашего терминала.
Форматирование:
Форматирование и рефакторинг были не такими сложными, как процесс парсинга, но определенно сопровождались определенными разочарованиями. Во-первых, я постоянно попадал в этот странный цикл, в котором моя команда «выход» не работала. Было несколько строк кода (на самом деле МНОГО строк), которые нуждались в некоторых незначительных изменениях для правильной работы, но я смог упростить гем и устранить любые ошибки или циклы. Самое сложное форматирование пришлось на класс парсинга. Мой класс scrape_price не учитывал элементы с пометкой «бесплатно», и мне пришлось использовать какой-то хитрый код, чтобы заставить его рассматривать «бесплатно» как число, чтобы мой метод Sort работал правильно.
Урок:
Хм, я думаю, что мой самый большой вывод был о том, как много мне еще предстоит узнать. Все, что я сделал для этого проекта CLI Gem, каждый компонент: от парсинга до создания объектов, я делал раньше. Но безудержная среда без тестов и без реальной подсказки представляла собой настоящую проблему. Я считаю, прежде всего, что это подстегнуло огонь под моей задницей, чтобы начать создавать свои собственные проекты без тренировочных колес. Мне нужно чувствовать пламя, чтобы чувствовать себя комфортно в жару. В любом случае, вот дружеское неуместное прощание с моей жемчужиной: