Йончо обнови решението на 19.01.2015 16:30 (преди почти 10 години)
+REPOSITORY = 'https://github.com/speedyGonzales/ruby-retrospective-4'
+
+# Двадесет неща, които научих.
+#
+# 1. Едно от най-трудните неща в едно решение е да минат skeptic ограниченията
+#
+# 2. Мonkey-patching-a не е добра практика и трябва да се избягва, но понякога върши добра работа,
+# особено при предизвикателствата
+# 3. Не е много рубистично да се ползва for цикъл, от друга страна е много по-добре да се ползва upto вместо range
+#
+# 4. В Enumerable, Hash има много полезни методи, хубаво е да се знаят
+#
+# 5. attr_accessor спестява писане и място, прави кода по-прегледен. От друга страна трябва да внимаваме до кой атрибути
+# даваме достъп
+# 6. На Hash.new може да се подава блок, който се вика, ако някой иска да достъпи
+# несъществуващ ключ в хеша.
+# 7. Понякога е красиво да се chain-ва (map/selec/ вместо each), но човек не трябва да се увлича
+#
+# 8. Метапрограмирането е хубаво нещо, но прави кода прекалено объркан за ниво продукшън.
+#
+# 9. За операторите трябва да се помни, че "and" и "or" операторите имат равен приоритет, а
+# операторът && има по-висок приоритет от ||.
+# 10. alias спестява повторения при дефинирането на сходни метод
+#
+# 11. Ако една константа ни се повтаря на повече от едно място е хубаво да се изнесе -прави кода по-четим и по-лесен за
+# refactoring
+# 12. Дефинирането на DSL е добре да се направи чрез `instance_eval &block`
+#
+# 13. За да може да се използват инстанционни променливи в ламбди, после трябва да
+# използваме instance_exec вместо call.
+# 14. Може да подаваме символи, които представляват име на метод, който да се
+# използва като подаден блок.
+# 15. Proc и lambda могат да бъдат взаимозаменяеми, но имат разлики в поведението в някои случаи. Пример: подаване на #масив от аргументи.
+# 16. Ruby ri документация е доста полезна ако знаеш, как да я използваш
+#
+# 17. Добра практика всички методи, които не са public или са помощни да бъдат private, което отново спомага
+# за капсулацията.
+# 18. Да правя много класове с малко методи, вместо няколко с множество методи.
+#
+# 19. Хубаво е да обмислим как да използваме оптимално ООП дизайн за решението на задачи
+#
+# 20. Хубаво е да се commit-ва по-често...
+#
+# 21. Добрите тестове ти спестяват доста проблеми
+#
+# 22. Стриктното спазване на конвенции и стил е много важно.
+#
Решението ти не минава rake check
(чупи се на тестовете на четвърта задача) и затова не получаваш пълен брой точки:
.F
Failures:
1) Command Line Toolkit adding horizontal group does not change the behavior
Failure/Error: horizontal do
NoMethodError:
undefined method `horizontal' for #<UI::TextScreen:0x007fd26cd4ff58>
# ./specs/04_spec.rb:35:in `block (3 levels) in <top (required)>'
# ./solutions/04.rb:4:in `instance_eval'
# ./solutions/04.rb:4:in `draw'
# ./specs/04_spec.rb:7:in `block (3 levels) in <top (required)>'
# ./specs/04_spec.rb:34:in `block (2 levels) in <top (required)>'
Finished in 0.00218 seconds (files took 0.18949 seconds to load)
2 examples, 1 failure
Failed examples:
rspec ./specs/04_spec.rb:33 # Command Line Toolkit adding horizontal group does not change the behavior