Module: MetaRake::Builder::Rake

Extended by:
Magic
Defined in:
lib/metarake/builder/rake.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Methods included from Magic

included

Instance Method Details

#buildObject



69
70
71
72
73
74
# File 'lib/metarake/builder/rake.rb', line 69

def build
  Dir.chdir(self.to_s) do
    print "[#{self}/] "
    sh *(rake_command+targets)
  end
end

#initialize(*args) ⇒ Object

Create a sub-task for each of project targets.



25
26
27
28
29
30
31
32
33
# File 'lib/metarake/builder/rake.rb', line 25

def initialize(*args)
  super

  self.targets.each do |tgt|
    tgt_f = application.define_task(Rake::FileTask, File.join(self.to_s, tgt))
    tgt_f.comment = "Build #{tgt} in #{self}"
    tgt_f.enhance([self])
  end
end

#project_target?(target_name) ⇒ Boolean

Decide, whether a target listed by ‘rake -T` is a project target.

Default implementation decides based on target_filter, based on its type. When target_filter is a:

nil

All targets returned by ‘rake -T` are project targets (default)

Regex

Targets whose names match the regular expression are project targets

String

Targets whose names include the string are project targets

Proc

It is called with a target name as an argument; if it returns true, the target is a project target.

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
# File 'lib/metarake/builder/rake.rb', line 47

def project_target?(target_name)
  case self.class.target_filter
  when nil    ; true
  when Regexp ; self.class.target_filter =~ target_name
  when Proc   ; self.class.target_filter.call(target_name)
  when String ; target_name.include?(self.class.target_filter)
  end
end

#targetsArray

Returns Project target names, as returned by ‘rake -T` and filtered by #project_target?.

Returns:

  • (Array)

    Project target names, as returned by ‘rake -T` and filtered by #project_target?



58
59
60
61
62
63
64
65
66
67
# File 'lib/metarake/builder/rake.rb', line 58

def targets
  @targets ||= 
    begin
      cmd = Mixlib::ShellOut.new(rake_command+['-T'], :cwd => self.to_s)
      cmd.run_command.error!
      cmd.stdout.lines.
        map { |ln| tgt=ln.split[1] ; tgt if self.project_target?(tgt) }.
        compact
    end
end