Merb je webový MVC framework silně inspirovaný frameworky Ruby on Rails a Django. Jeho vývoj započal zakladatel Engine Yardu Ezra Zygmuntowicz. Původně vznikl jako jednoduchý patch do Rails, který měl umožnit rychlejší uploadování souborů. Merb byl tehdy pouhý mongrelový handler, postupně se z něj vyvinul plnohodnotný webový framework.

Merb
VývojářEngine Yard, vývoj vedl Yehuda Katz
Aktuální verze1.1.3 (12. července 2010)
Operační systémNezávislý na platformě
Vyvíjeno vRuby
Typ softwaruFramework na vývoj webových aplikací
LicenceMIT
Webmerbivore.com
Některá data mohou pocházet z datové položky.

Za Merbem stála firma Engine Yard. Dalšími z jejich projektů jsou například implementace Ruby Rubinius nebo DataMapper ORM.

Vývoj frameworku byl ukončen v roce 2010 ve prospěch integrace jeho klíčových konceptů (mj. modularita, exaktně definované veřejné rozhraní) do Ruby on Rails verze 3.[1][2]

Filosofie editovat

Ačkoliv je Merb na první pohled velmi podobný Rails, oba frameworky mají dost odlišnou filosofii. Kdežto Rails jsou navrženy tak, aby podporovaly software vyhovující jejich tvůrcům, Merb se snaží být co nejvíce konfigurovatelný. Pokud v Merbu chcete změnit testovací framework, stačí změnit jedinou řádku v konfiguraci. Pokud to samé chcete v Rails, máte problém. O nepodpoře jiných šablonovacích systémů railsovými generátory nemluvě. Merb je tedy agnostický k šablonovacímu jazyku, testovacímu frameworku, javascriptovému frameworku i ORM. Volba nástrojů je u Merbu na uživatelích frameworku, nikoliv na jeho tvůrcích.

Merb se také snaží dodržovat styl jazyka Ruby a nevymýšlet si zbytečně vlastní metajazyk. Merb nedělá z Ruby něco jiného než je, jako se o to snaží Rails. To kritizovalo velké množství vývojářů, mezi nimi i designer a autor jazyka Ruby Jukihiro Macumoto zvaný „Matz“. Ten si Merb oblíbil a používá jej pro vývoj ve své firmě.

Proč používat Merb editovat

  • Vývojáři dbají i na rychlost a hardwarovou nenáročnost Merbu. Pomalost je brána jako bug.
  • Je jednoduše konfigurovatelný.
  • Výjimky routuje na kontrolér Exception.
  • Slices umožňují psát pluginy obsahující hotové části aplikace.
  • Part kontroléry řeší logiku jednotlivých podčástí stránky přímo nesouvisejících s hlavním obsahem.
  • Obsahuje podporu testování
  • Je kompatibilní s Passengerem, vaše aplikace bez problémů poběží na serveru Apache.

Architektura editovat

Modely editovat

ORM editovat

DataMapper editovat

DataMapper je zdaleka nejpoužívanější merbové ORM. Mezi jeho největší výhody patří automigrace. Stačí v modelu nadefinovat jaké bude mít vlastnosti a pustit automigrační task (rake db:automigrate) a příslušně databázové schéma bude vytvořeno. Pokud změníte libovolnou vlastnost v modelu, stačí pustit rake db:autoupgrade a struktura databáze bude změněna bez ztráty dat.

Za DataMapperem, stejně jako za Merbem stojí Engine Yard a hodně vývojářů Merbu se podílí i na DataMapperu a naopak. Mají proto podobnou filosofii. Zatímco Merb je agnostický k ORM, JavaScriptovému frameworku a šablonovacímu jazyku, DataMapper je agnostický k úložišti. Tím může být nejenom relační databáze, ale třeba YAML, CSV nebo CouchDB.

Stejně jako u Merbu, i u DataMapperu je kladen důraz na rychlost a čistou Ruby syntaxi, kterou se vyjadřují i věci, na které je v ActiveRecordu použít SQL podmínku.

Sequel editovat

Sequel je minimalistické ORM zaměřené především na snadné a mocné dotazování.

ActiveRecord editovat

ActiveRecord je ORM z Ruby on Rails. Je stabilní a odladěné, na druhou stranu ale pomalé a se syntaxí nutící psát SQL podmínky. Používalo se spíše dříve, když DataMapper nebyl ještě dostatečně odladěný.

Kontroléry editovat

Part kontroléry editovat

Kromě běžných kontrolerů podporuje Merb přes plugin merb-parts také tzv. part controllers, tedy kontrolery určené pro práci tag cloud

Zachytávání výjimek editovat

V Merbu je definován kontroler Exceptions, který je volán automaticky vždy, když je vyvolána výjimka NotFound, NotAcceptable nebo podobné. To umožňuje jednoduchou tvorbu vlastních chybových hlášení při zachování vzoru MVC.

Pluginy editovat

Všechny merbové pluginy jsou klasické gemy, které je možno nainstalovat do složky gems v rootu aplikace. Výhoda této tzv. zabundlované aplikace je ta, že ať ji nasadíte kdekoliv, stačí ji pouze Ruby a RubyGems, vše ostatní načte ze své lokální složky gems.

V Merbu není problém napsat si také vlastní generátory. Ty mohou generovat jak celou merbovou aplikaci, tak její konkrétní části jako jsou modely nebo kontrolery.

Zásadní rozdíl je také v samotném kódu frameworku. Kód Merbu je velmi přehledný, dobře dokumentovaný a je v něm použito minimum „magie“ jako jsou například method_missing, define_method, eval a další, kterými se to v Rails jen hemží. Kód Merbu je tím mnohem přístupnější pro vývojáře pluginů i pro potenciální kontributory.

Slices editovat

Zajímavou částí Merbu jsou tzv. slices, části aplikace, které lze přimountovat na určitou URL stejně jako to umí například framework Django. Příkladem slice je merb-auth, což je velmi dobře napsaný autentikační plugin, podporující mimo jiné i OpenID.

Odkazy editovat

Reference editovat

  1. HANSSON, David Heinemeier. Merb gets merged into Rails 3! [online]. 23 Dec 2008 [cit. 2020-07-18]. Dostupné online. 
  2. KATZ, Yehuda. Rails and Merb Merge [online]. 23 Dec 2008. Dostupné online. 

Externí odkazy editovat