Utilitky pro Ruby: buildovací systém Rake V
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.
Seriál Utilitky pro Ruby
- Utilitky pro Ruby: buildovací systém Rake II
- Utilitky pro Ruby: buildovací systém Rake III
- Utilitky pro Ruby: buildovací systém Rake IV
- Utilitky pro Ruby: buildovací systém Rake V
- Utilitky pro Ruby: buildovací systém Rake VI
Ú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.
Odkazy
Související odkazy
Školení: SQL pro začátečníky
Kdo nezná jazyk SQL jako kdyby nebyl. Tak lze stručně charakterizovat dnešní význam SQL v IT. Pokud se chcete naučit tento jazyk, tak navštivte naše školení SQL. Školení je určené začátečníkům, a proto se začíná od skutečných základů.
Kromě samotného SQL se účastíci školení seznámí i se základy PostgreSQL, což je databáze, která se díky své shodě se standardem ANSI SQL a komfortem, který poskutuje svým uživatelům, zvlášť hodí pro výuku SQL.
Podrobnější informace a přihláška
Seriál Utilitky pro Ruby
- Utilitky pro Ruby: buildovací systém Rake II
- Utilitky pro Ruby: buildovací systém Rake III
- Utilitky pro Ruby: buildovací systém Rake IV
- Utilitky pro Ruby: buildovací systém Rake V
- Utilitky pro Ruby: buildovací systém Rake VI
Přehled názorů
Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.


