Hlavní navigace

Utilitky pro Ruby: buildovací systém Rake V

Jakub Šťastný 1. 10. 2007

V dnešním díle seriálu o utilitkách pro Ruby přijdou na přetřes jednotlivé knihovny pro tvorbu specifických tasků, naučíme se balit balíčky pomocí Rake, mazat dočasné soubory, ale také automatizovat testování naší aplikace a generovat dokumentaci.

Úklid souborů projektu

V prvním díle jsem ukázal, jak lze provést task clean. Popravdě řečeno, jeho podoba byla značně nedokonalá, nicméně byl to úvodní díl a nechtěl jsem zabíhat příliš do podrobností Rake – ten má totiž tento úkol dostupný skrze knihovnu rake/clean.

require "rake/clean"
CLEAN("*.log", "tmp/*")

A je to. Prosté a úsporné, jako ostatně každý správný kód v Ruby. Pokud chceme čistit ještě důkladněji, máme k dispozici task clobber ze stejné knihovny. Používá se stejně jako CLEAN, funguje na stejném principu, akorát před jeho provedením bude nejprve zavoláno rake clean. Kompletní podpora pro úklid projektu může v Rakefile vypadat například takto:

require "rake/clean"
CLEAN("*.log", "tmp/*")
CLOBBER.include("**/*.temp", "*.o")

Co se stane, když tyto úkoly zavoláme? Při každém zavolání tasku clean budou smazány logové soubory a soubory ve složce tmp, při každém zavolání tasku clobber bude nejprve zavolán task clean, a poté budou ještě navíc smazány soubory s příponou .temp ve všech podsložkách a všechny výstupní .o soubory.

Tvorba balíčků

Se sestavováním balíčků nám může pomoci knihovna rake/gempackagetask:

require 'rubygems'
Gem::manage_gems
require 'rake/gempackagetask'

spec = 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        = FileList["{bin,tests,lib,docs}/**/*"].exclude("rdoc").to_a
  specification.require_path = 'lib'

  # dependencies
  specification.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

Rake::GemPackageTask.new(spec) do |pkg|
  pkg.need_tar = true # chceme vytvorit i archiv tar?
  pkg.need_zip = true # chceme vytvorit i archiv zip?
end

Povšimněte si, že v gemové specifikaci nyní místo Dir používám FileList, což práci se soubory příjemně usnadňuje. Příjemné také je, že co se výstupních souborů týče, nejsme omezeni jen na gemy, ale balíčkovací knihovna umí produkovat i různé typy archivů od zipu, přes tar až po tar.gz a tar.bz2.

Přidáním tohoto kódu do vašeho Rakefile vám přibudou úkoly package, který slouží pro vytvoření balíčků v zadaných formátech, clobber_package pro smazání balíčků a repackage pro znovuvytvoření balíčků i pokud nejsou starší než zdrojové kódy. Akce clobber_package bude automaticky vyvolána pokud spustíme úkol clobber. Přejete-li si vytvořit pouze gemový balíček, použijte akci gem

Tvorba dokumentace

Knihovna rake/rdoctask automatizuje tvorbu pokumentace utilitkou rdoc:

require "rake/rdoctask"
Rake::RDocTask.new do |rdoc|
  rdoc.rdoc_dir = 'html'   # vystupni slozka s dokumentaci
  rdoc.template = 'kilmer' # sablona
  rdoc.options << '--line-numbers' # parametry rdoc
  rdoc.rdoc_files.add('README', 'MIT-LICENSE', 'TODO', 'CHANGES')
  rdoc.rdoc_files.add('lib/**/*.rb', 'doc/**/*.rdoc', 'test/*.rb')
end

Jak vidíte, knihovna je vystavěna se stejnou logikou jako knihovna pro tvorbu balíčků. Nepřekvapí tedy, že rake rdoc generuje dokumentaci, rake rerdoc ji přegenerovává a rake clobber_rdoc ji zase maže.

Testy

Testování aplikace je zcela klíčová, v praxi však také velmi často opomíjená část vývoje. V Rake nám s testováním pomůže knihovna rake/testtask:

require "rake/testtask"
Rake::TestTask.new do |t|
  t.libs << "test"
  t.test_files = FileList['test/test*.rb']
  t.verbose = true
end

Veškeré testy spustíme příkazem rake test, mnohdy však potřebujeme testovat pouze konkrétní soubor, což se dělá příkazem rake test TEST=file.rb.

Další knihovny pro Rake

Rake má samozřejmě více knihoven, než jsme si my v našem povídání stihli popsat, snad jen namátkou nejzajímavější z nich: Rake::Makefile­Loader slouží k nahrávání souborů Makefile, spoustu knihoven spolupracuje s SSH případně FTP a je určeno pro nahrání projektu na web, případně Rake::RubyFor­gePublisher slouží k přímému nahrání projektu na RubyForge.

Příště

V posledním díle našeho seriálu věnovaném sestavovacímu systému Rake si povíme o jeho významu v Ruby on Rails a podíváme se také, co se chystá v příští verzi nového.

Poznámka: některé ukázky byly přejaty z www.noobkit­.com.

Odkazy

Našli jste v článku chybu?

1. 10. 2007 9:23

-nf- (neregistrovaný)
v titulku je dobrej nazev :)

buildovací systém RakeV ;)

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Vitalia.cz: Pečete cukroví a zbyl vám bílek?

Pečete cukroví a zbyl vám bílek?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR