Как-то Сисадмин спросил:
– Учитель, не желаете ли красивую картинку для вашего десктопа? У меня есть коллекция «обоев для рабочего стола» со звёздным небом и моральным законом.
– Почему ты думаешь, что мой нынешний «wallpaper» хуже? – спросил в ответ Инь Фу Во.
– Я не знаю, какая у вас картинка сейчас. Я никогда не видел вашего десктопа. У вас всегда открыто множество окон.
– Я тоже его никогда не видел, – сказал почтенный Инь. – Я работаю.
github.com/troydm/AnimeWallpaperDownloader/pull/1
Я, следуя порыву, начал рефакторить, но сумел вовремя остановиться.
Для более глубокого рефакторинга надо смотреть, что там за страницы оно отдаёт и т.д.
Примеры:
1. В руби стандартом являются отступы в 2 пробела (styleguide)
2. Неплохо было бы вычищать лишние пробелы — это очень портит диффы.
3. Имена переменных это главный фейл. Ещё в школе по-моему рассказывают, что называть переменные «a, b, c» — это плохо.
4. Повторяющийся код надо извлекать в соответствующие методы.
5. Меня смущают счётчики и метод, которым парсятся страницы, но по этому поводу я ничего не могу сказать конкретного, надо вникать в то, как работает приложение.
7. Зачем там хеши нужны я так и не понял. Заменил на массивы.
8. Ну и прочие C-измы. То есть приложение написано в обычном процедурном стиле как это делается в C, без использования всех возможностей ruby.
Усложнять всё это (nokorogi надо ещё запаковывать) и трать много времени не хотелось так как там несколько моментов где нужно запарсить html и достаточно стандартных средств Ruby
Никак паковать не надо в app, зачем? Или все библиотеки линкуемые вы тоже всегда к приложению прикладываете? :) Надо это написать в prerequisites или в самом скрипте сделать проверку, что б ежели что отсутствует — выдавал полный список требуемых гемов и инструкции по установке.
Я не думаю что простые рядовые пользователи умеют устанавливать gem-ы. Счаз там ничего кроме MacRuby не нужно. Eго устанавливать не сложно. Простой установщик. Я потом разберусь как его вообще вместе с .app поставлять чтоб пользователи не морочились c установкой MacRuby вообще. Это же десктопное приложение всё таки
Внимание, вопрос. А зачем вы вообще тогда взялись на MacRuby писать?! Не лучше ли на нативном Obj-C? По времени вышло бы столько же, задача тривиальная благо. И никаких бы проблем не было.
Вы явно пытаетесь решать или не ту задачу, или не теми средствами.
Если вы хотите, что бы приложение было standalone и требовало минимум усилий по установке в порыве заботы о «рядовых пользователях» — пишите на Obj-C. Иначе это скоро кончится тем, что вы и сам macRuby прилинкуете жестко и положите в пэкэдж, а то вдруг выйдет новая версия, и ваш код окажется работать без какого-нибудь небольшого фикса. Такие случаи медицине известны.
Отказ от велосипедов и массированное использование гемов — один из столпов руби, сама идея жестко их линковать выглядит противоестественной, о чем тут и намекнули. Установка гемов проста как никогда, для этого люди приложили много усилий. Если беспокоят какие-то сложности — напишите установочный шелл-скрипт, он может все разруливать очень умным образом. И если вы пойдете этим путем, то образовательный эффект будет гораздо больше.
Добавил standalone версию которая ничего не требует при установке (содержит MacRuby внутри) так что это теперь рядовые пользователи могут просто скачать её и пользоваться программой
итого получился проект для скачивания обоев с одного сайта и чтобы использовать его для его-то другого, нужно переписать больше половины вашего класса Downloader?
Пишем Anime Wallpaper Downloader на MacRuby