Sha256: 2998fcc89c0b31f4994c811b481318834e20b53094da32258b41f953828df339

Contents?: true

Size: 1.96 KB

Versions: 28

Compression:

Stored size: 1.96 KB

Contents

# Patch Rake::Application to handle errors with Honeybadger
module Honeybadger::RakeHandler
  def self.included(klass)
    klass.class_eval do
      include Rake087Methods unless defined?(Rake::VERSION) && Rake::VERSION >= '0.9.0'
      alias_method :display_error_message_without_honeybadger, :display_error_message
      alias_method :display_error_message, :display_error_message_with_honeybadger
    end
  end

  def display_error_message_with_honeybadger(ex)
    if Honeybadger.sender && Honeybadger.configuration &&
      (Honeybadger.configuration.rescue_rake_exceptions || 
       (Honeybadger.configuration.rescue_rake_exceptions===nil && !self.tty_output?))

      Honeybadger.notify_or_ignore(ex, :component => reconstruct_command_line)
      Honeybadger.context.clear!
    end

    display_error_message_without_honeybadger(ex)
  end

  def reconstruct_command_line
    "rake #{ARGV.join( ' ' )}"
  end

  # This module brings Rake 0.8.7 error handling to 0.9.0 standards
  module Rake087Methods
    # Method taken from Rake 0.9.0 source
    #
    # Provide standard exception handling for the given block.
    def standard_exception_handling
      begin
        yield
      rescue SystemExit => ex
        # Exit silently with current status
        raise
      rescue OptionParser::InvalidOption => ex
        $stderr.puts ex.message
        exit(false)
      rescue Exception => ex
        # Exit with error message
        display_error_message(ex)
        exit(false)
      end
    end

    # Method extracted from Rake 0.8.7 source
    def display_error_message(ex)
      $stderr.puts "#{name} aborted!"
      $stderr.puts ex.message
      if options.trace
        $stderr.puts ex.backtrace.join("\n")
      else
        $stderr.puts ex.backtrace.find {|str| str =~ /#{@rakefile}/ } || ""
        $stderr.puts "(See full trace by running task with --trace)"
      end
    end
  end
end

Rake.application.instance_eval do
  class << self
    include Honeybadger::RakeHandler
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
honeybadger-1.16.7 lib/honeybadger/rake_handler.rb
honeybadger-1.16.6 lib/honeybadger/rake_handler.rb
honeybadger-1.16.5 lib/honeybadger/rake_handler.rb
honeybadger-1.16.4 lib/honeybadger/rake_handler.rb
honeybadger-1.16.3 lib/honeybadger/rake_handler.rb
honeybadger-1.16.2 lib/honeybadger/rake_handler.rb
honeybadger-1.16.1 lib/honeybadger/rake_handler.rb
honeybadger-1.16.0 lib/honeybadger/rake_handler.rb
honeybadger-1.15.3 lib/honeybadger/rake_handler.rb
honeybadger-1.15.2 lib/honeybadger/rake_handler.rb
honeybadger-1.15.1 lib/honeybadger/rake_handler.rb
honeybadger-1.15.0 lib/honeybadger/rake_handler.rb
honeybadger-1.14.0 lib/honeybadger/rake_handler.rb
honeybadger-1.13.2 lib/honeybadger/rake_handler.rb
honeybadger-1.13.1 lib/honeybadger/rake_handler.rb
honeybadger-1.13.0 lib/honeybadger/rake_handler.rb
honeybadger-1.12.0.beta3 lib/honeybadger/rake_handler.rb
honeybadger-1.12.0.beta2 lib/honeybadger/rake_handler.rb
honeybadger-1.11.2 lib/honeybadger/rake_handler.rb
honeybadger-1.11.1 lib/honeybadger/rake_handler.rb