Елена обнови решението на 13.11.2011 16:16 (преди около 13 години)
+REPOSITORY = 'http://github.com/eivanova/ruby-retrospective-1'
+
+# Двадесет неща, които научих.
+#
+# 1. Припомних си yield, когато методът проема блок като
+# аргумент.
+# Много готино може да се използва в първа задача в
+# Аrrray#index_by
+# 2. Научих за each_cons метода на Enumerable и как може да се # приложи в Array#subarray_count
+# 3. Как да върна стойност по подразбиране ако в хеш няма даден # ключ - Hash.new { |key, value| 0} или само Hash.new 0
+# 4. Kaк мога да излолзвам [true, false].all? вместо да правя
+# inject
+# 5. Добра идея е да изфилтрирам първо положителните и
+# отрицателни тагове на песните и да ползвам операции с
+# множества вместо булеви променливи
+# 6. Много по-добре изглежда ако цялото мачване на песен е в 1
+# метод и по-хубаво и блока да си обработя в Song
+# 7. Масивите могат да получават елементи с <<
+# 8. Методи от рода на map могат да получават функция като
+# аргумент map(&:chop)
+# 9. Регулярните изрази имат и по-хубав синтаксис от r%{} - /../
+# 10. Мога да присвоявам стойности на няколко променливи
+# едновременно:
+# name, artist, genres, tags = song.split(/\.\s*/).map(&:strip)
+# 11. В последната задача - не само промоциите, но и купоните
+# могат да имат отделни класове
+# 12. Null Object pattern
+# 13. По-добре да ползваме по-прости структури, когато може, а
+# по-конкретно - масив вместо хеш
+# 14. Мога да си дефинирам [] оператор за обекти различни от
+# масив и хеш
+# 15. Методът Hash.first и как може много по-удобно да се
+# използва
+# @fullPriceNum, @discount = hash.first вместо
+# @fullPriceNum = hash.keys[0]
+# @discount = hash.values[0]
+# 16. Доста по-красиви имена на методи са discount и
+# discount_string вместо get_discount и get_discount_string
+# 17. Как се инициализира клас, който е в модул (::)
+# 18. Методът detect - доста удобно, на няколко пъти досега ми
+# трябваше
+# 19. items_price ... това име нещо все ми убягваше
+# 20. Как можем да изплзваме mixin за инициализация на правилния
+# тип. По-рано имах метод за това... на много по-неподходящо
+# място.
+# 21. Как се инициализират mixins
+# 22. Защо на Руби не му трябваат интерфейси, не се бях
+# замисляла за ролята на тестовете от тази гледна точка. И все
+# пак не ми стана ясно защо Стефан 3 пъти си е дефинирал псевдо-
+# интерфейс с ексепшъни ако някой метод не е имплементиран...
+# Или поне така каза на лекция...
+# 23. А, да, и една груба грешка.. някъде из нета гледах
+# примери, в които полетата бяха кемъл кейс, та се подведох :(
+# За съжаление се подсещам в момента на работа и няма да мога да
+# си пусна тестовете, ако ги оправя.