Grunderna i en Ruby Gem

Jag har använt ruby gems i några veckor nu och det har varit jättebra, men jag var inte riktigt säker på vad som hände under huven när jag lade till en i mitt program. Så det här blogginlägget ska hjälpa mig att förstå hur gems fungerar och förhoppningsvis hjälpa dig också.

En ruby gem är paketerad rubykod som du kan lägga till i din applikation. Detta kan spara dig tid genom att använda kod som andra har skrivit för att lösa liknande problem. Om du till exempel vill ändra färgen på en text kan du installera och använda colorize gem. Du får all dess funktionalitet utan att någonsin behöva skriva den koden själv.

Sinatra är en gem, Rack är en gem och jag blev förvånad över att lära mig att även Rails är en gem. Alla offentliga gems publiceras via RubyGems.org. Det är här folk kan bidra och dela dem med gemenskapen.

Låt oss börja med att installera en gem

Välj en gem och låt oss installera den. Jag valde att lägga till colorize gem till min applikation, som ändrar färgen på en sträng som vi skickar in. Du kan köra gem install gem_name för att ladda ner gemen till din dator och göra den tillgänglig för dina program. Undrar du var den där gemen bor efter att den installerats? Du kan köra gem which gem_name och den kommer att berätta exakt var den finns.

gem install colorize

För att kunna använda gemen i vår kod måste du kräva gemen högst upp i din fil genom att sätta require “gem_name”. Vi gör detta så att vi har tillgång till gemen och nu behöver vi inte skriva vår egen kod för att färglägga text.

require ‘colorize’

Nu när du har installerat och krävt gemen kan du använda den. Om du går till pärlans GitHub-repo hittar du vanligtvis viktig information om dess funktioner och hur du använder dem.

https://github.com/fazibear/colorize

Låt oss använda den!

Så vi har läst readme och vill nu lägga till lite färg till vår text. Jag har lagt till tre olika färger i min kod genom att kalla .colorze(:color) på en sträng.

Körning av koden

Snyggt! Ser det inte bra ut? Så vi har installerat vår gem och den verkar fungera, men vad händer om vi har en större applikation som kräver många gems? Att kalla gem install och kräva varje enskild gem verkar vara mycket arbete. Det finns säkert ett enklare sätt.

Bundler

Bundler gör våra liv mycket enklare. Vad är bundler? Jo, det är en pärla förstås! Den spårar varje gem och installerar exakt den gem och den version som du behöver använda i ditt program. För att kunna använda bundler behöver du en Gemfile i katalogen för ditt projekt och där inne kan du lista så många gems som du vill. För att göra det är det bara att öppna Gemfile och lägga till gem “gem_name”.

När du har lagt till den i din Gemfile ska du se till att köra bundle install i din terminal. Detta kommer att installera alla gems som listas i din Gemfile, tillsammans med deras beroenden. Det gör verkligen saker och ting mycket enklare. Det som är bra är att Ruby 2.6 och senare inkluderar bundler automatiskt, så du behöver inte installera det själv.

Det verkar som om vi fortfarande måste lägga till require “gem_file” högst upp i våra filer, och det verkar också vara mycket arbete om vi har många av dem. Det visar sig att bundler tänkte på detta också. Du kan lägga till require ‘bundler’ högst upp i din .rb-fil och skriva Bunlder.require(:default). Vad detta gör under huven är att kalla require “gem_name” för varje gem som du har i din gemfile.

Bundler.require(:default)

När du väl har kört buntle install kan du märka att en massa gems som du inte har lagt till installeras. Varför är det så? Många gems kräver att andra gems installeras tillsammans med dem. Till exempel kräver rails många andra gems och dessa gems kan kräva andra gems och så vidare. Bundler ser till att alla installerade gem-versioner är kompatibla med varandra.

När den har hittat de korrekta versionerna av varje gem registrerar den dessa versioner i en annan fil som heter Gemfile.lock. Det gör det möjligt att installera exakt samma version på varje maskin som kommer att behöva köra programmet.

En Gemfile.lock-fil

Du kan se i min Gemfile.lock att lolize kräver paint-gemen och de versioner som den kan använda. Så bundler kommer att hämta den och rätt version för oss. Är inte det till hjälp? Tack bundler!

Så det är det! Jag hoppas att detta har hjälpt dig att förstå det grundläggande i en gem och bundler. Det finns många gems där ute som du kan använda och du kan söka efter dem här. https://rubygems.org/.

Lämna ett svar

Din e-postadress kommer inte publiceras.