Христо обнови решението на 22.01.2014 00:11 (преди почти 11 години)
+REPOSITORY = 'http://github.com/hhursev/ruby-retrospective-3'
+
+# Двадесет неща, които научих.
+#
+# 1. разбрах, че мога, а и е добре откъм четимост, да подавам блокове не само на
+# map и each, ами и на none?, any?, all?
+#
+# 2. на 1ва задача в prime_factors няма абсолютно никакъв смисъл да проверяваме
+# дали числото, до което сме стигнали итерацията, е prime
+#
+# 3. 1.upto(self).map { |number| Rational(1, number) }.reduce(:+) е много по
+# четимо от (1..abs).reduce { |sum, n| sum += 1 / n.to_r }.to_r
+#
+# 4. Ако имаме inline блок, в който условието става прекалено тежко за четене,
+# е доста вероятно да не се възползваме оптимално от вградената
+# функционалност която Ruby ни дава
+#
+# 5. Да слагам скобички около аргументите при дефенирането на метод.
+# (Винаги ги изтървам при initialize метода например)
+#
+# 6. Новия синтаксис на ламбата не ми харесва, но пък пести ценни колони
+#
+# 7. something.(task) е грозноват и неприятен за четене синтаксис на
+# something.call(task), но пести колони
+#
+# 8. да не правя нечетими работи, само за да пестя колони.. Смисъла на
+# ограниченията в колоните е да станат нещата по-четими, а не по-кратки...
+#
+# 9. в констурктура на Criteria е по подходящо да подаваме направо блок а не
+# lambda / proc аргумент (this is RUBY)
+#
+# 10. когато имаме атрибут на клас, който едновременно с това има attr_reader,
+# някак си предпочитам вътрешно в класа да го използвам с @, за да е
+# по-удобно за разчитане после. Все пак на моменти става доста грозно
+#
+# 11. freeze е добре да се ползва за да укажем че даден стринг е immutable.
+# предава по ясна представа как точно се ползва дадения стринг, не толкова
+# откъм повишаване на ефикасност на кода
+#
+# 12. Hash > масив от масиви в някои случаи. Като например в задачатa за
+# Canvas-а. Реших да ползвам hash в проекта си и там е по-добре да се
+# ползва масив от масиви. (shit happens)
+#
+# 13. join_pixels_in(line) метода, който беше дефинирал в решението на задачата
+# с canvas-а, може на пръв поглед да е доста ненужен, но повишава значително
+# четимостта на кода. Добре е да се хващат и създават подобни методи.
+#
+# 14. true/false за стойности на координатите в canvas-а има няколко на брой
+# значими предимства пред 1 / 0. (особено в Ruby където всичко е True
+# освен нещата, които се оценят на False :D)
+#
+# 15. Изключително приятна имплементация на Renderers модула. Може доста време
+# човек да си я гледа. Елегантно използване на ООП моделиране, разбиване
+# на методи, преизползване на такива, наследяване и т.н.
+#
+# 16. Да не оставям дреболии за "по-нататъшно" оправяне
+# (не заменянето на на attr_accessor с reader ми изгърмява тестове на 3-та)
+#
+# 17. Ако имам модул и в него класове обвързани един с друг, и ако който и да е
+# метод да променя, от който и да е клас, чупи функционалността на поне
+# 2 други значи нещо не е правилно в организацията на класовете
+# (bawtibabababa..)
+#
+# 18. Хубаво е методи, които дефинираме и няма да се използват извън класа да са
+# private. Чете се по-лесно кода след това.
+#
+# 19. Ако имаш кола: include-ваш Enumerable, дефинираш each и получаваш танк.
+#
+# 20. Литерален синтаксис общо взето навсякъде, където е възможно.
+#
+# 21. method_missing е доста удобен и някак си елегантен на вид начин за
+# метапрограмиране. Комбинирано с това, че по всяко време може да се отвори
+# даден клас и да се добавя / променя функциоиналност имаме доста сериозен
+# badass в лицето на Ruby откъм метапрограмиране
+#
+# 22. За пръв път commit-вам в git пач промени от файл. (Мноу яко)
Добри изводи си направил :) Бонус точка.