Деян обнови решението на 13.11.2011 15:35 (преди почти 13 години)
+REPOSITORY = 'https://github.com/dido91/ruby-retrospective-1'
+
+
+# Двадесет неща, които научих.
+#
+#1.Разбрах, че може да променям или добавям функции във вградени #класове като Array или Hash.
+#
+#2.Kогато пиша функция в клас, не е необходимо да използвам #"self.", ако искам да използвам "each" или някаква друга #операция за обекта, върху който ги прилагам.
+#
+#3.Няма смисъл да пиша return на последния ред във функциите, #Ruby така или иначе го връща.
+#
+#4.Може да се използва "inject" не само за връщане на една #стойност,но и за напълване на масив или хеш,
+#просто трябва да върна като резултат хеша или масива в #последния ред на блока на inject.
+#
+#5.В subarray_count мога да използвам "yield" вместо някакъв #блок и викане на блока.
+#
+#6.Действието на "each_cons" е да връща всички последователни #подмасиви с определена дължина и е много по-лесно #subarray_count да се реализира с него.
+#
+#7.Когато е необходимо, да върна блока на "each", мога да #използвам "map".(например в occurances_count).
+#
+#8.Мога да използвам attr_accessors вместо да създавам отделни #функци като setter-и и getter-и.
+#
+#9.Действието на "strip" е да премахва whitespace от string-ове, #а на "compact" използвано върху масиви премахва всики елементи #nil в масива.
+#
+#10.По-добре е обработката на входа да става в клас Collection и #да се създаде масив от обекти на класа Song, така проверката #може да се извършва в Song.
+# По този начин спазваме Single Responsible Principle като #всеки клас върши едно точно определено нещо.
+#
+#11.Оператора ^ означава изключващо или(xor)
+#
+#12.Метода "chomp(arg)" проверява последни символ на даден #стринг и ако съвпада с "arg" го премахва.
+#
+#13.Мога да подавам като параметър self и по този начин да #предам данни за обработване на друг клас. например #ShopingCart.new(self).
+#
+#14.Мога да задавам стойности по подразбиране на формални #параметри def add(product_name, count = 1) и ако пропусна #извикам add само с един параметър няма да има проблем.
+#
+#15.Ако напиша " if variable " без никаква проверка блока след #if ще се изпълни, единствено ако variable не е nil.
+#
+#16.За да задам на променлива стойност от тип Big decimal мога #да използвам следнарта стойност '100'.to_d.
+#
+#17.sprintf("%.2f", result) може да се замести с "%.2f" % #result.
+#
+#18.Създаване на обект, когато класа му е в модул.Може да стане #по следния начин: Coupon::NilCoupon.new.
+#
+#19.Полета на класа могат да се създават не само в конструктора, #а във всеки метод, щом започват с @ имаме достъп до тях от #всеки метод на класа.
+#
+#20.Клас-методите се дефинират, ако имената им започват с #"self." или "ИмеНаКласа.", по този начим може да използваме #метод от този клас,
+# без да е нужно да имаме конкретен обект от този клас.