Sha256: abef8bad37cfa29049157c89e5b9736e4777f4bba7703a3ad70aab07cf6d506f

Contents?: true

Size: 1.65 KB

Versions: 13

Compression:

Stored size: 1.65 KB

Contents

require 'rake'

module Rake
  module Funnel
    module Integration
      class ProgressReport
        attr_reader :starting, :finished

        def initialize
          task_starting do |task, _args|
            puts "\n[#{task.name}]" unless Rake::Funnel::Integration::TeamCity.running?
          end

          yield self if block_given?

          patch.apply!
        end

        def task_starting(&block)
          @starting = block
        end

        def task_finished(&block)
          @finished = block
        end

        def disable!
          patch.revert!
        end

        private
        def patch
          @patch ||= create_patch
        end

        def create_patch
          Rake::Funnel::Support::Patch.new(self) do |p|
            p.setup do |context|
              Rake::Task.class_eval do
                old_execute = instance_method(:execute)

                define_method(:execute) do |args|
                  context.starting.call(self, args) if context.starting

                  error = nil
                  begin
                    old_execute.bind(self).call(args)
                  rescue => e
                    error = e
                  ensure
                    context.finished.call(self, args, error) if context.finished
                    fail error if error
                  end
                end

                old_execute
              end
            end

            p.reset do |memo|
              Rake::Task.class_eval do
                define_method(:execute) do |args|
                  memo.bind(self).call(args)
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
rake-funnel-0.14.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.13.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.12.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.11.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.10.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.9.1.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.9.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.8.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.7.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.6.1.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.6.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.5.0.pre lib/rake/funnel/integration/progress_report.rb
rake-funnel-0.4.0.pre lib/rake/funnel/integration/progress_report.rb