Witam,
Gdy zobaczyłem w Radiancie extensions, czyli ichni sposób na proste rozszerzanie funkcjonalności CMSa, to stwierdziłem, że bardzo podoba mi się takie podejście. Jest tylko jeden minus. Żeby to zaimplementować w swojej aplikacji trzeba się trochę namęczyć i dodatkowo, żeby korzystać z dobrodziejstw rozszerzania widoków trzeba owe widoki odpowiednio zbudować.
Czyli na przykład chcę dodać kolejny link do menu głównego w panelu. Jeżeli jest odpowiednio zdefiniowany blok dla tego menu, to mogę w extension dodać:
admin.tabs.add "Link Roll", "/admin/link_roll", :after => "Layouts", :visibility => [:all]
Zastanawiałem się nad zrobieniem prostego systemu rozszerzeń do swojej aplikacji opartego na engine’ach (ewentualnie jak będę pisał w merbie to na slices), który dodatkowo miałby możliwość zmiany layoutu/widoków.
Z reguły jest tak, że jak piszę rozszerzenie do konkretnej aplikacji i dodatkowo jest to na przykład związane z dodaniem nowego kontrolera (na przykład dodaję obsługę galerii), to chciałbym po załadowaniu tego rozszerzenia dodać link “Galerie” w menu. Bez systemu takiego jak w radiancie trzeba to zrobić ręcznie.
Dlatego pomyślałem sobie, że najprościej by było użyć do tego nokogiri (wcześniej chciałem użyć hpricota, ale nokogiri jest szybszy i mniej zamotany :).
Czyli na przykład coś w stylu:
def activate
with_layout "admin" do |layout|
layout.css("#main_menu ul li").last do |last|
last.add_next_sibling("<li><a href="/foo">bar</a></li>")
end
end
end
Co o tym myślicie? Dobre? Głupie? Jakieś rażące braki/minusy w rozumowaniu? Ewentualnie może ktoś jest na tyle biegły w kodzie railsów (a może merba?), żeby stwierdził, czy łatwo będzie dodać coś takiego?
Ja bałem się o wydajność, ale jak pokazują benchmarki chyba nie ma się o co martwić. Wczytanie 500 razy strony slashdot.org zajmuje 8 sekund, parsowanie dużo mniej, szczególnie jeżeli używa się XPath. Coś jeszcze o czym powinienem pomyśleć?