Sha256: 2a457587d18c81dac9d587220903a77034dc76c2424ed0e39a357c50b9149ab6

Contents?: true

Size: 1.5 KB

Versions: 24

Compression:

Stored size: 1.5 KB

Contents

require 'rake'

module Rake

  def self.add_listener(l)
    get_listener() << l
  end

  def self.get_listener
    @listener ||= []
  end

  def self.remove_listener(l)
    get_listener().delete(l)
  end

  def self.notify_listener(symbol, name)
    Rake::get_listener().each do |l|
      if l.respond_to?(symbol)
        l.send(symbol, name)
      end
    end
  end

  class MultiTask
    invoke_prerequisites_original = self.instance_method(:invoke_prerequisites)
    define_method(:invoke_prerequisites) do |task_args, invocation_chain|
      Rake::notify_listener(:before_prerequisites, name)
      invoke_prerequisites_original.bind(self).call(task_args, invocation_chain)
      Rake::notify_listener(:after_prerequisites, name)
      if !needed?
        Rake::notify_listener(:after_execute, name)
      end
    end
  end

  class Task
    invoke_prerequisites_original = self.instance_method(:invoke_prerequisites)
    execute_original = self.instance_method(:execute)

    define_method (:invoke_prerequisites) do |task_args, invocation_chain|
      Rake::notify_listener(:before_prerequisites, name)
      invoke_prerequisites_original.bind(self).call(task_args, invocation_chain)
      Rake::notify_listener(:after_prerequisites, name)
      if !needed?
        Rake::notify_listener(:after_execute, name)
      end
    end

    define_method(:execute) do |args|
      Rake::notify_listener(:before_execute, name)
      execute_original.bind(self).call(args)
      Rake::notify_listener(:after_execute, name)
    end

  end

end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
cxxproject-0.6.29 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.28 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.27 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.26 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.25 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.24 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.23 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.21 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.18 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.17 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.14 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.12 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.13 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.11 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.10 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.9 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.6 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.5 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.4 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.6.2 lib/cxxproject/ext/rake_listener.rb