Tvorba vlastních gemů
Tvorba vlastního balíčku je až překvapivě jednoduchá – stačí jednoduše napsat soubor s metadaty a na ten posléze zavolat příkaz gem build. Tak se do toho dáme, nejdříve ta metadata …
Soubor gemspec
Soubor gemspec
je obyčejný skript v Ruby, ve kterém vytvoříme objekt Gem::Specification a předáme mu informace o našem balíčku. Na jeho názvu ani příponě nesejde, nicméně bývá zvykem pojmenovávat jej <package_name>.gemspec
.
Minimální soubor gemspec může vypadat třeba takto:
Gem::Specification.new do |specification| specification.name = "Hello world" specification.version = "0.0.1" specification.summary = "Just a hello world." specification.files = ["hello.rb"] end
Vhodné je také přidat informace o autorovi:
specification.author = "Botanicus" specification.email = "stastny@iinfo.cz" specification.homepage = "http://www.helloworldinruby.cz"
Samozřejmě není problém doplnit závislosti:
s.add_dependency(%q<some_library>, [">= 1.0.0"])
Pokud k balíčku existuje dokumentace, je třeba na ni RubyGems také upozornit:
specification.has_rdoc = true specification.extra_rdoc_files = Dir['[A-Z]*'] specification.rdoc_options << '--title' << 'Builder -- Easy XML Building'
Celý specfile může nakonec vypadat třeba takto:
Gem::Specification.new do |specification| # informations about author specification.author = "Botanicus" specification.email = "stastny@iinfo.cz" specification.homepage = "http://www.helloworldinruby.cz" # package informations specification.name = "Hello world" specification.version = "0.0.1" specification.summary = "Just a hello world." specification.description = "It only sais "Hello world" and exit." # files and paths specification.files = Dir['lib/**/*.rb'] + Dir['bin/*.rb'] specification.require_path = 'lib' # dependencies s.add_dependency(%q<some_library>, [">= 1.0.0"]) # rdoc info specification.has_rdoc = true specification.extra_rdoc_files = Dir['[A-Z]*'] specification.rdoc_options << '--title' << 'Builder -- Easy XML Building' end
Vytvoření balíčku
Pokud máme náš specfile hotov, stačí již jen zavolat příkaz gem build soubor.gemspec
a vytvořit tak balíček: .
Chcete-li balíček rovnou nainstalovat, stačí opět pouze gem install <package>
, protože tento příkaz nejprve hledá v aktuálním adresáři, a pokud zde balíček nalezne, logicky jej již nehledá na serveru.
Formát balíčků
Co se vlastních balíčků týče, RubyGems si nevymýšlí žádné podivnosti. Ačkoliv balíček končí příponou gem
, nenechte se zmást – jedná se o úplně obyčejný tar
archiv, který bez problémů ve vaší oblíbené distribuci rozbalíte. Uvnitř jsou dva soubory – metadata.gz
obsahující pochopitelně metadata balíčku a data.tar.gz
s vlastním obsahem balíčku.
Podepisování gemů
Aby byly naše balíčky důvěryhodné, je třeba je také podepsat. Nejprve příkazem gem cert --build <my_mail>
vygenerujeme veřejný certifikát a privátní klíč, naleznete jej v souborech gem-public_cert.pem
a gem-private_key.pem
.
Nyní otevřete soubor gemspec a připište do něj:
specification.signing_key = '/path/to/your/gem-private_key.pem' specification.cert_chain = ['gem-public_cert.pem']
Aby byl náš podpis ověřitelný, je třeba jej příkazem gem cert --add gem-public_cert.pem
přidat jako důvěryhodný zdroj.
A to je vše přátelé, když nyní přes gem build opětovně vytvoříte balíček, bude v něm navíc soubor data.tar.gz.sig
a metadata.gz.sig
naznačující, že vše se povedlo jak mělo.
Když budete nyní chtít využívat výhod vyšší bezpečnosti, můžete při instalaci parametrem -P
specifikovat míru bezpečnosti. Povolené hodnoty jsou: NoSecurity, LowSecurity, MediumSecurity a HighSecurity, vyčet rozdílů mezi nimi najdete v oficiální dokumentaci.
Není doufám třeba připomínat, že privátní klíč je nezbytné dát mimo dosah ostatních, ideálně na externí médium, protože když se dostane do nepovolaných rukou, může za vás balíčky podepisovat cizí osoba.
Sofistikovanější tvorba gemů
Tvorba gemů je ukázkovým příkladem pro použití některého buildovacího systému. Jistě nejlepší alternativou pro Ruby je systém Rake, o kterém si povíme něco v některém z příštích dílů. Protože Rake má na RubyGems poměrně pěknou vazbu, lze tím dovést tvorbu gemů k naprosté dokonalosti.
Jak jednoduše a přehledně prohlížet nainstalované gemy?
RubyGems v sobě obsahují i jednoduchý webový servřík, který nám umožní jednoduše prohlížet nainstalované gemy včetně jejich dokumentace. Zacházení s ním je prosté, stačí jej pustit příkazem gem_server
a v prohlížeči zadat http://localhost:8088
Takto vypadá rozhraní pro prohlížení gemů.
Pokud chcete, není problém si vytvořit přímo vlastní server, ze kterého bude možno gemy instalovat.
Doplňkový software
V duchu klasického unixového příkazu which existuje i jeho gemový bratříček – gemwhich. Ten hledá v Ruby knihovnách a RubyGems repozitářích.
$ gemwhich rake /usr/lib/ruby/site_ruby/1.8/rake.rb $ gemwhich rake/testtask /usr/local/lib/ruby/gems/1.8/gems/rake-0.4.15/lib/rake/testtask.rb $ gemwhich socket /usr/local/lib/ruby/1.8/i686-linux/socket.so
S RubyGems je dále distribuována utilitka gemri
, která slouží stejně jako ri
, tedy pro zobrazování dokumentace, ale pro knihovny instalované přes RubyGems,
Příště
Po třech dílech věnovaných gemům se budeme věnovat dalším utilitkám souvisejících nějakým způsobem s distribucí kódu psaného v Ruby, tentokrát se zaměříme převážně na utilitky umožňující distribuci kódu a interpretu v jediném souboru.