Sha256: 17bf8f642d25f6fe9d40bafd81f97818247345ceab5e3c4b6ff16ae2937805bc

Contents?: true

Size: 1.56 KB

Versions: 18

Compression:

Stored size: 1.56 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

18 entries across 18 versions & 1 rubygems

Version Path
cxxproject-0.5.76 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.75 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.74 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.73 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.72 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.71 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.70 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.69 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.68 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.67 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.66 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.65 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.64 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.63 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.62 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.61 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.60 lib/cxxproject/ext/rake_listener.rb
cxxproject-0.5.59 lib/cxxproject/ext/rake_listener.rb