Решение на Четвърта задача от Герасим Станчев
Към профила на Герасим Станчев
Резултати
- 4 точки от тестове
- 0 бонус точки
- 4 точки общо
- 7 успешни тест(а)
- 4 неуспешни тест(а)
Код
Лог от изпълнението
...F.F.F.F.
Failures:
1) Command Line Toolkit handles complex group nestings
Failure/Error: expect do
expected #<Proc:0xb9b1b1d8@/tmp/d20141126-26053-v9v7gv/spec.rb:56> to render as " 123\n 45\n 6\n 7\n"
# /tmp/d20141126-26053-v9v7gv/spec.rb:56:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
2) Command Line Toolkit handles borders correctly in complex group nestings
Failure/Error: expect do
expected #<Proc:0xb9b122f4@/tmp/d20141126-26053-v9v7gv/spec.rb:99> to render as " |||1||2|||3| |||\n || |||4|||5||||||\n || || ||6||||||\n ||7| |\n"
# /tmp/d20141126-26053-v9v7gv/spec.rb:99:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
3) Command Line Toolkit propagates upcase to child components
Failure/Error: expect do
expected #<Proc:0xb9aeace0@/tmp/d20141126-26053-v9v7gv/spec.rb:137> to render as " someveryINTERESTINGget it?\n TEXTGOES \n HERE \n"
# /tmp/d20141126-26053-v9v7gv/spec.rb:137:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
4) Command Line Toolkit propagates downcase to child components
Failure/Error: expect do
expected #<Proc:0xb9ad91fc@/tmp/d20141126-26053-v9v7gv/spec.rb:172> to render as " SOMEVERYinterestingGET IT?\n textgoes \n here \n"
# /tmp/d20141126-26053-v9v7gv/spec.rb:172:in `block (2 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
# ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'
Finished in 0.02311 seconds
11 examples, 4 failures
Failed examples:
rspec /tmp/d20141126-26053-v9v7gv/spec.rb:55 # Command Line Toolkit handles complex group nestings
rspec /tmp/d20141126-26053-v9v7gv/spec.rb:98 # Command Line Toolkit handles borders correctly in complex group nestings
rspec /tmp/d20141126-26053-v9v7gv/spec.rb:136 # Command Line Toolkit propagates upcase to child components
rspec /tmp/d20141126-26053-v9v7gv/spec.rb:171 # Command Line Toolkit propagates downcase to child components
История (2 версии и 4 коментара)
Герасим обнови решението на 24.11.2014 04:24 (преди почти 11 години)
Прегледай примерите, които сме дискутирали в темата във форума.
instance_eval &Proc.new за мен е доста по-неясно от това да вземеш блока и да го instance_eval-неш.
Защо set_style_to_segment е в UI?
Прилагането на стил ми се струва дублицирано в UI.set_style_to_segment и UI::TextScreen.label. Не може ли да се централизира? Защо ти се налага да freeze-ваш текстовете? Не можеш ли да контролираш начина/реда за прилагане на стилове по друг начин?
До колкото разбирам методите set_vertical_alignment и set_horizontal_alignment също са част от DSL-а. Тоест, мога да ги извикам в блока, който описва изгледа. Можеш ли да ги премахнеш, оставяйки само horizontal, vertical и label като част от DSL-а?
Предполагам, че имаш предвид въпроса на Александър, за двата последователни vertical блока. Не разбирам защо са на един ред, при положение, че се изпълняват отделно.
За instance_eval - ок, сългасен съм. Трябва ли да правя проверка дали е подаден блок? Т.е. винаги ли ще се подава блок?
Мога да изградя някаква структурна последователност (и безуспешно опитах да го сторя), но избрах този вариант. Разбирам, че тази употреба на freeze не е най-адекватната, но мисля, че върши страхотна работа и покрива точно изискванията. Освен това си мислех дали да не изведа инстанционна променлива @style, която да се променя за всеки блок, а не да се извиква за всеки блок, но реших, че така е по-консистентно.
Т.е. да изведа тези два метода в отделен модул?
Блоковете не се "изпълняват". Те дефинират структурата на интерфейса, който ти трябва да изпълниш така че да изглежда по желания начин. Двата vertical блока са на едно и също ниво тъй като са вложени в "анонимен" horizontal блок (по подразбиране нещата в TextScreen се подреждат хоризонтално).
Да, винаги ще се подава блок.
Т.е. когато в блока на horizontal примерно съм използвал нещо различно от horizontal, vertical и label да ми гърми с NameError. :)
Ъъъъъъъ, схващам логиката, но ще ми трябва време да го разбера.
прокашляне private методи прокашляне :D
