Method: StandardError#initialize

Defined in:
lib/coaster/core_ext/standard_error.rb,
lib/coaster/core_ext/standard_error/raven.rb

#initialize(message = nil, cause = $!) ⇒ StandardError

Returns a new instance of StandardError.



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/coaster/core_ext/standard_error.rb', line 24

def initialize(message = nil, cause = $!)
  @fingerprint = Coaster.default_fingerprint.dup
  @tags = {}
  @level = 'error'
  @attributes = HashWithIndifferentAccess.new
  @tkey = nil

  case message
    when Exception
      msg = message
      set_backtrace(message.backtrace)
    when StandardError
      @fingerprint = message.fingerprint
      @tags = message.tags
      @level = message.level
      @tkey = message.tkey
      @attributes = message.attributes
      msg = message
      set_backtrace(message.backtrace)
    when Hash then
      hash = message.with_indifferent_access rescue message
      msg = hash.delete(:m)
      msg = hash.delete(:msg) || msg
      msg = hash.delete(:message) || msg
      @fingerprint = hash.delete(:fingerprint) || hash.delete(:fingerprints)
      @tags = hash.delete(:tags) || hash.delete(:tag)
      @level = hash.delete(:level) || hash.delete(:severity) || @level
      @tkey = hash.delete(:tkey)
      msg = cause.message if msg.nil? && cause
      @attributes.merge!(hash)
    when String then
      msg = message
    when FalseClass, NilClass then
      msg = ''
    else
      msg = message
  end

  @fingerprint = [] unless @fingerprint.is_a?(Array)
  @tags = {} unless @tags.is_a?(Hash)
  msg ||= self.class.title
  super(msg)
end