Kiel etendi Rake taskojn

Rake estas ilo en rubeno kiu egalas al make en Unikso aŭ ant en la ĝava mondo. Ĉi tio ne estas enkonduko al la ilo, sed mezaj nivelaj lertaĵoj.

Aldoni antaŭpost taskon

Ni diru ke vi havas Rake-a taskon kaj vi volas modifi ĝin iel per antaŭ aŭ post metaĵo. Estas do metodoj por fari tion sed nur unu estas rekomendata.

Bazo
task :bazo do
	puts "bazo"
end

task :antaŭ do
	puts "antaŭ"
end

task :post do
	puts "post"
end

Nun ni havas tri taskojn kiujn eliras siajn nomojn. Vi povas meti tion en dosieron nomitan Rakefile kaj enmeti rake bazo aŭ simila por plenumi ĝin.

Malbone

Unu por antaŭenmeti taskon:

task :bazo => [:antaŭ]
antaŭ
bazo

Por postmeti taskon

task :bazo do
	Rake::Task[:post].invoke
end
bazo
post

Aŭ ambaŭ:

task :bazo => [:antaŭ] do
	Rake::Task[:post].invoke
end
antaŭ
bazo
post

Oni eĉ povas enmeti kodon rekte

task :bazo => [:antaŭ] do
	puts "saluton"
	Rake::Task[:post].invoke
	puts "ĝis"
end
antaŭ
bazo
saluton
post
ĝis
Bone

Pli bona metodo estas uzi la enhance (plibonigi) medoto.

Rake::Task[:bazo].enhance [:antaŭ]
antaŭ
bazo

Por postmeti taskon

Rake::Task[:bazo].enhance do
	Rake::Task[:post].invoke
end
bazo
post

Aŭ ambaŭ:

Rake::Task[:bazo].enhance [:antaŭ] do
	Rake::Task[:post].invoke
end
antaŭ
bazo
post

Denove kun la rekta koda enmetata:

Rake::Task[:bazo].enhance [:antaŭ] do
	puts "saluton"
	Rake::Task[:post].invoke
	puts "ĝis"
end
antaŭ
bazo
saluton
post
ĝis
Konkludo

Se vi ne volas aldoni funkcion al taskon sed tute anstantaŭigi ĝin vi povas forigi la jaman taskon:

task :bazo do
	puts "bazo"
end

Rake::Task[:bazo].clear_actions
Rake::Task[:bazo].clear_prerequisites

task :bazo do
	puts "nova bazo"
end
nova bazo

Vi ankaŭ povas krei helpilojn

class Rake::Task
  def forigu
  	clear_actions
  	clear_prerequisites
  end
end

task :bazo do
	puts "bazo"
end

Rake::Task[:bazo].forigu

task :bazo do
	puts "nova bazo"
end
nova bazo

Nun ke ne kreis tion, Rake donos al ni la clear metodo kiu faras la saman kiel forigu

kaj finfine ni povas krei nian anstantaŭigu medoton

class Rake::Task
  def anstantaŭigu(&block)
  	clear
  	enhance(&block)
  end
end

task :bazo do
	puts "bazo"
end

Rake::Task[:bazo].anstantaŭigu do
  puts "nova bazo anstantaŭigita"
end
nova bazo anstantaŭigita

Fino

Sed nur ĉar vi povas fari ĉi tion ne signifas ke vi devas. Se vi havas novan membron al via skipo, ri ne supozas ke la signifon de la taskon ŝanĝiĝis, kaj povas esti doloriga leciono. Se vi faras ŝanĝon al taskon, mi rekomendu fari ilin en dosiero nomitan ŝanĝoj.rake, etendoj.rake, aŭ anstantaŭigoj.rake aŭ ion simila kaj dokumenti la fakton ke ĝi ŝanĝiĝis.