Ú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.