Používám ruby gemy už několik týdnů a je to skvělé, ale nebyl jsem si jistý, co se děje pod kapotou, když jsem jeden přidal do své aplikace. Tento příspěvek na blogu mi tedy má pomoci pochopit, jak gemy fungují, a snad pomůže i vám.
Ruby gem je zabalený kód v ruby, který můžete přidat do své aplikace. To vám může ušetřit čas tím, že použijete kód, který k řešení podobných problémů napsali jiní. Pokud byste například chtěli změnit barvu nějakého textu, mohli byste nainstalovat a použít gem colorize. Získáte všechny jeho funkce, aniž byste museli tento kód psát sami.
Sinatra je gem, Rack je gem a překvapilo mě, že i Rails je gem. Všechny veřejné gemy jsou publikovány prostřednictvím RubyGems.org. Zde mohou lidé přispívat a sdílet je s komunitou.
Začneme instalací gemu
Vybereme si gem a nainstalujeme ho. Rozhodl jsem se přidat do své aplikace gem colorize, který mění barvu řetězce, který mu předáme. Můžete spustit příkaz gem install gem_name, abyste gem stáhli do svého počítače a zpřístupnili jej svým aplikacím. Zajímá vás, kde se tento gem po instalaci nachází? Můžete spustit příkaz gem which gem_name a ten vám přesně řekne, kde se nachází.
Chcete-li tento gem použít v našem kódu, budete muset gem vyžadovat na začátku svého souboru vložením require ‘gem_name’. Uděláme to proto, abychom měli přístup ke gemu a nemuseli nyní psát vlastní kód pro obarvení textu.
Teď, když máte gem nainstalovaný a vyžadovaný, můžete ho používat. Pokud přejdete na repozitář gemu GitHub, obvykle tam najdete důležité informace o jeho funkcích a o tom, jak je používat.
Pojďme jej použít!”
Takže jsme si přečetli readme a nyní chceme přidat do našeho textu nějakou barvu. Ve svém kódu jsem přidal tři různé barvy, a to voláním .colorze(:color) na řetězec.
Skvělé! Nevypadá to pěkně? Nainstalovali jsme tedy náš gem a zdá se, že funguje, ale co když máme větší aplikaci, která vyžaduje mnoho gemů? Volání gem install a vyžadování jednotlivých gemů vypadá jako spousta práce. Určitě existuje jednodušší způsob.
Bundler
Bundler nám výrazně usnadní život. Co je to bundler? No samozřejmě je to drahokam! Sleduje jednotlivé drahokamy a instaluje přesně ten drahokam a jeho verzi, kterou potřebujete ve své aplikaci použít. Abyste mohli bundler používat, budete potřebovat soubor Gemfile v adresáři svého projektu a v něm můžete uvést libovolný počet gemů. K tomu stačí otevřít soubor Gemfile a přidat gem ‘jméno_gemu’.
Jakmile jej přidáte do souboru Gemfile, nezapomeňte v terminálu spustit bundle install. Tím se nainstalují všechny drahokamy uvedené ve vašem souboru Gemfile spolu s jejich závislostmi. To vám rozhodně usnadní práci. Skvělé je, že Ruby 2.6 a novější obsahuje bundler automaticky, takže ho nebudete muset instalovat sami.
Zdá se, že na začátek našich souborů musíme ještě přidat require ‘gem_file’, a to se také zdá jako spousta práce, pokud jich máme mnoho. Ukazuje se, že na to bundler myslel také. Na začátek souboru .rb můžete přidat require ‘bundler’ a napsat Bunlder.require(:default). To, co se děje pod kapotou, je volání require ‘jméno_gemu’ pro každý gem, který máte ve svém souboru gem.
Po spuštění instalace bundle si můžete všimnout, že se instaluje spousta gemů, které jste nepřidali. Proč tomu tak je? Mnoho drahokamů vyžaduje, aby spolu s nimi byly nainstalovány další drahokamy. Například rails bude vyžadovat mnoho dalších gemů a tyto gemy mohou vyžadovat další gemy atd. Bundler se ujistí, že všechny nainstalované verze gemů jsou vzájemně kompatibilní.
Po zjištění správných verzí jednotlivých gemů zaznamená tyto verze do dalšího souboru s názvem Gemfile.lock. To umožňuje nainstalovat přesně stejnou verzi na každý počítač, který bude potřebovat spustit tuto aplikaci.
V mém souboru Gemfile.lock vidíte, že lolize vyžaduje gem paint a verze, které může použít. Takže bundler pro nás chytne tento gem a správnou verzi. Není to užitečné? Díky bundleru!
Takže to je ono! Doufám, že vám to pomohlo pochopit základy gemů a bundleru. Existuje mnoho gemů, které můžete použít, a můžete je vyhledat zde. https://rubygems.org/.