Ú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::MakefileLoader 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::RubyForgePublisher 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.