Sha256: fd2b25d65fe3da07a18545fe3448c71d34dd4eee21a2f981b56cef25fc62293e

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

require "multi_json"

module Bugsnag
  class Event
    attr_accessor :exception, :user_id, :app_environment, :web_environment, :meta_data
    
    def initialize(exception, user_id, env={})
      self.exception = exception
      self.user_id = user_id
      self.app_environment = env[:app_environment]
      self.web_environment = env[:web_environment]
      self.meta_data = env[:meta_data]
    end

    def error_class
      exception.class.to_s
    end
    
    def message
      exception.message
    end

    def stacktrace(project_path=nil)
      return @stacktrace if @stacktrace

      if exception.backtrace
        @stacktrace = exception.backtrace.map do |trace|
          method = nil
          file, line, method_str = trace.split(":")
        
          trace_hash = {
            :file => file,
            :lineNumber => line
          }
        
          if method_str
            method_match = /in `([^']+)'/.match(method_str)
            method = method_match.captures.first if method_match
          end

          trace_hash[:method] = method if method
          trace_hash[:inProject] = true if project_path && file.match(/^#{project_path}/)
        
          trace_hash
        end
      else
        @stacktrace = []
      end
      
      @stacktrace
    end

    def as_hash
      {
        :userId => user_id,
        :causes => [{
          :errorClass => error_class,
          :message => message,
          :stacktrace => stacktrace
        }],
        :appEnvironment => app_environment,
        :webEnvironment => web_environment,
        :metaData => meta_data
      }
    end

    def as_json
      MultiJson.encode(as_hash)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bugsnag-1.0.0 lib/bugsnag/event.rb