Merb - flash
31 października 2008UPDATE: Zamiast calej zabawy - plugin merb-flash :)
Kontynuując serię o sztuczkach w Merbie tym razem przedstawię coś, czego najbardziej mi zabrakło - railsowego flasha.
UPDATE: Zamiast calej zabawy - plugin merb-flash :)
Kontynuując serię o sztuczkach w Merbie tym razem przedstawię coś, czego najbardziej mi zabrakło - railsowego flasha.
Merb wczoraj został wypuszczony na świat w wersji RC4. Z tej okazji* rozpoczynam cykl kilku postów z przydatnymi sztuczkami związanymi z tym właśnie frameworkiem. Na pierwszy ogień idzie kolorowanie wiadomości z merbowego loggera.
Pare minut temu zakończył się MerbCamp. Slajdy z prezentacji można znależć na Slideshare, zapis video powinien być dostępny w ciągu paru dni na stronie głównej campa.
Ogólnie myśle, że spotkanie wypadło dobrze, całkiem sporo rzeczy zostało wyjaśnionych. Wystąpienia można było śledzić poprzez udostępniony webcast (w małej, jednak wystarczającej rozdzielczości). Osobiście z obejżanych prezentacji (przesunięcie czasu skutecznie przeszkodziło w śledzeniu wszystkich) najbardziej podobała mi się "Merb plumbing: The router" a także możliwość zadawania pytań na żywo poprzez IRC.
Jutro (a w sumie to dzisiaj) rano czasu polskiego powinien być dostępny Merb 0.9.9 RC1. Autorzy zapowiedzieli, że w ciągu paru tygodni powinna wyjść RC2, a następnie już 1.0 Final. Najważniejsze jednak, że publiczne api juz nie zostanie zmienione także można na spokojnie działac ;)
Jest 1:43, jutro na 8 do szkoły - chyba czas do spania...
[EDIT] Video z prezentacji już dosępne.Dzisiaj bez komentarza.
lib/tasks/stats.rake
desc "LOC statistic" task :stats do STATISTICS_DIRS = { :controllers => 'app/controllers', :helpers => 'app/helpers', :models => 'app/models', :lib => 'lib', :spec => 'spec' } EMPTY_STATS = { :lines => 0, :loc => 0, :classes => 0, :modules => 0, :methods => 0 } def show_line(name, stats, color = nil) ce = color ? "\033[0m" : "" puts "| #{color}#{name.to_s.capitalize.ljust(20)}#{ce} " + "| #{color}#{stats[:lines].to_s.rjust(7)}#{ce} " + "| #{color}#{stats[:loc].to_s.rjust(7)}#{ce} " + "| #{color}#{stats[:classes].to_s.rjust(7)}#{ce} " + "| #{color}#{stats[:modules].to_s.rjust(7)}#{ce} " + "| #{color}#{stats[:methods].to_s.rjust(7)}#{ce} |" puts separator end def separator '+----------------------+---------+---------+---------+---------+---------+' end def check_dir(dir) Dir.foreach(dir) do |file_name| if File.stat(dir / file_name).directory? and (/^\./ !~ file_name) check_dir(dir / file_name) end if file_name =~ /.*\.rb$/ File.open(dir / file_name).each_line do |line| @stats[:lines] += 1 @stats[:loc] += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/ @stats[:classes] += 1 if line =~ /class [A-Z]/ @stats[:modules] += 1 if line =~ /module [A-Z]/ @stats[:methods] += 1 if line =~ /def [a-z]/ end end end end @all = {} total = EMPTY_STATS.clone ce = "\033[0m" cb = "\033[35m" cg = "\033[4;32m" cr = "\033[31m" puts separator puts "| #{cg}Name#{ce} | #{cg}Lines#{ce} | #{cg}LOC#{ce} | #{cg}Classes#{ce} | #{cg}Modules#{ce} | #{cg}Methods#{ce} |" puts separator STATISTICS_DIRS.each_pair do |name, dir| @stats = EMPTY_STATS.clone check_dir(dir) @all[name] = @stats show_line(name, @stats) @stats.each_pair { |type, count| total[type] += count } end show_line('Total', total, cr) code_loc = [:controllers, :helpers, :models].inject(0) { |sum, e| sum += @all[e][:loc] } test_loc = @all[:spec][:loc] puts " Code LOC: #{cb}#{code_loc}#{ce} Test LOC: #{cb}#{test_loc}#{ce} Test to code radio: #{cb}1:%0.2f#{ce}" % (test_loc.to_f / code_loc.to_f) puts end
Ostatnio szukałem jakiegoś dobrego narzędzia do fixtures (nie mam pojęcia jak to można po polsku nazwa) w Merbie i znalazłem projekt na githubie merb-fixtures. Niestety okazało się, że sprawia pewne problemy w szczególności z dm-is-nested_set z paczki dm-more DataMappera. Jednak postanowiłem się nie poddawać i korzystając z kodu merb-fixtures napisać coś własnego.