coaster 0.2.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/coaster/core_ext/standard_error/raven.rb +28 -19
- data/lib/coaster/core_ext/standard_error.rb +24 -9
- data/lib/coaster/version.rb +1 -1
- data/lib/coaster.rb +10 -0
- data/test/test_standard_error.rb +13 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff07fb211e83da4a3ec0ea6d4fa1feef919b811a
|
4
|
+
data.tar.gz: a3d02429755c8269e99df86cd5d714d76d60967d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3477640a65dbcc0fa4fefcd82883b2287bc37254922258e0cfc5f58fb91a96a7f3e608a690d767e98b705dbc0019cd3112ef7b284653b0bd9ef7621278a61d95
|
7
|
+
data.tar.gz: 1a51dc6965dc02a94922fcaeba376bc97e4a9322da48e0a27bf9dd3f560fe845710de4de36e3dd8a8a20d1493c612bf6a07ed3bc71fa634676c8dc7ce3a1a88f
|
@@ -4,22 +4,11 @@ class StandardError
|
|
4
4
|
alias_method :initialize_original, :initialize
|
5
5
|
def initialize(message = nil, cause = $!)
|
6
6
|
initialize_original(message, cause)
|
7
|
-
@raven = (attributes.delete(:raven) || {}).with_indifferent_access
|
8
|
-
@raven[:fingerprint] ||= attributes[:fingerprint] || [:default]
|
7
|
+
@raven = (attributes.delete(:raven) || attributes.delete(:sentry) || {}).with_indifferent_access
|
9
8
|
end
|
10
9
|
|
11
|
-
def
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
def fingerprint
|
16
|
-
raven[:fingerprint]
|
17
|
-
end
|
18
|
-
|
19
|
-
def capture(options = {})
|
20
|
-
notes = raven.merge(options || {})
|
21
|
-
|
22
|
-
notes[:fingerprint] = notes[:fingerprint].flatten.map do |fp|
|
10
|
+
def raven_fingerprint
|
11
|
+
(fingerprint || Coaster.default_raven_fingerprint).flatten.map do |fp|
|
23
12
|
if fp == true || fp == :class
|
24
13
|
self.class.name
|
25
14
|
elsif fp == :default
|
@@ -27,13 +16,25 @@ class StandardError
|
|
27
16
|
else
|
28
17
|
fp
|
29
18
|
end
|
30
|
-
end
|
31
|
-
|
19
|
+
end.flatten
|
20
|
+
end
|
21
|
+
|
22
|
+
def notes(options = {})
|
23
|
+
opts = options ? options.dup : {}
|
24
|
+
extra_opts = opts.slice!(:fingerprint, :tags, :level, :extra)
|
25
|
+
opts[:extra] = extra_opts.merge(opts[:extra] || {})
|
26
|
+
notes = raven.merge(opts)
|
27
|
+
|
28
|
+
notes[:fingerprint] ||= raven_fingerprint
|
29
|
+
notes[:tags] ||= (tags && tags.merge(notes[:tags] || {})) || {}
|
32
30
|
notes[:tags] = notes[:tags].merge(environment: Rails.env) if defined?(Rails)
|
33
31
|
notes[:level] ||= self.level
|
34
|
-
notes[:extra] = (notes[:extra]
|
32
|
+
notes[:extra] = attributes.merge(notes[:extra])
|
33
|
+
notes
|
34
|
+
end
|
35
35
|
|
36
|
-
|
36
|
+
def capture(options = {})
|
37
|
+
Raven.annotate_exception(self, notes(options))
|
37
38
|
Raven.capture_exception(self)
|
38
39
|
rescue => e
|
39
40
|
msg = "#{e.class.name}: #{e.message}"
|
@@ -41,9 +42,17 @@ class StandardError
|
|
41
42
|
Raven.logger.error(msg)
|
42
43
|
end
|
43
44
|
|
45
|
+
# options
|
46
|
+
# :logger
|
47
|
+
# :cleaner
|
48
|
+
# :fingerprint
|
49
|
+
# :tags
|
50
|
+
# :level
|
51
|
+
# :extra
|
52
|
+
# and others are merged to extra
|
44
53
|
alias_method :just_logging, :logging
|
45
54
|
def logging(options = {})
|
46
|
-
capture(options
|
55
|
+
capture(options)
|
47
56
|
just_logging(options)
|
48
57
|
end
|
49
58
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'active_support/core_ext/class/attribute_accessors'
|
2
|
-
require 'active_support/core_ext/string'
|
3
1
|
require 'coaster/core_ext/object_translation'
|
4
2
|
|
5
3
|
class StandardError
|
@@ -21,10 +19,11 @@ class StandardError
|
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
24
|
-
attr_accessor :tags, :level, :tkey
|
22
|
+
attr_accessor :tags, :level, :tkey, :fingerprint
|
25
23
|
|
26
24
|
def initialize(message = nil, cause = $!)
|
27
|
-
@
|
25
|
+
@fingerprint = Coaster.default_fingerprint
|
26
|
+
@tags = {}
|
28
27
|
@level = 'error'
|
29
28
|
@attributes = HashWithIndifferentAccess.new
|
30
29
|
@tkey = nil
|
@@ -34,6 +33,7 @@ class StandardError
|
|
34
33
|
msg = message
|
35
34
|
set_backtrace(message.backtrace)
|
36
35
|
when StandardError
|
36
|
+
@fingerprint = message.fingerprint
|
37
37
|
@tags = message.tags
|
38
38
|
@level = message.level
|
39
39
|
@tkey = message.tkey
|
@@ -42,10 +42,11 @@ class StandardError
|
|
42
42
|
set_backtrace(message.backtrace)
|
43
43
|
when Hash then
|
44
44
|
hash = message.with_indifferent_access rescue message
|
45
|
-
msg = hash
|
46
|
-
msg = hash
|
47
|
-
msg = hash
|
48
|
-
@
|
45
|
+
msg = hash.delete(:m)
|
46
|
+
msg = hash.delete(:msg) || msg
|
47
|
+
msg = hash.delete(:message) || msg
|
48
|
+
@fingerprint = hash.delete(:fingerprint) || hash.delete(:fingerprints)
|
49
|
+
@tags = hash.delete(:tags) || hash.delete(:tag)
|
49
50
|
@level = hash.delete(:level) || hash.delete(:severity) || @level
|
50
51
|
@tkey = hash.delete(:tkey)
|
51
52
|
msg = cause.message if msg.nil? && cause
|
@@ -59,6 +60,8 @@ class StandardError
|
|
59
60
|
@attributes[:object] = message
|
60
61
|
end
|
61
62
|
|
63
|
+
@fingerprint = [] unless @fingerprint.is_a?(Array)
|
64
|
+
@tags = {} unless @tags.is_a?(Hash)
|
62
65
|
msg = nil if msg == false
|
63
66
|
super(msg)
|
64
67
|
set_backtrace(cause.backtrace) if cause
|
@@ -161,6 +164,18 @@ class StandardError
|
|
161
164
|
lg << "\n"
|
162
165
|
end
|
163
166
|
|
167
|
+
def rails_tag
|
168
|
+
(fingerprint || Coaster.default_fingerprint).flatten.map do |fp|
|
169
|
+
if fp == true || fp == :class
|
170
|
+
self.class.name
|
171
|
+
elsif fp == :default || fp == '{{ default }}'
|
172
|
+
nil
|
173
|
+
else
|
174
|
+
fp
|
175
|
+
end
|
176
|
+
end.compact
|
177
|
+
end
|
178
|
+
|
164
179
|
def logging(options = {})
|
165
180
|
logger = options[:logger]
|
166
181
|
logger = Rails.logger if logger.nil? && defined?(Rails)
|
@@ -174,7 +189,7 @@ class StandardError
|
|
174
189
|
msg += cleaner.clean(backtrace).join("\n\t\t")
|
175
190
|
end
|
176
191
|
|
177
|
-
logger.tagged(*
|
192
|
+
logger.tagged(*rails_tag) do
|
178
193
|
if logger.respond_to?(level)
|
179
194
|
logger.send(level, msg)
|
180
195
|
else
|
data/lib/coaster/version.rb
CHANGED
data/lib/coaster.rb
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
require 'active_support/core_ext/hash/indifferent_access'
|
2
2
|
require 'active_support/core_ext/module/attribute_accessors'
|
3
|
+
require 'active_support/core_ext/class/attribute_accessors'
|
4
|
+
require 'active_support/core_ext/string'
|
5
|
+
require 'active_support/core_ext/hash/slice'
|
3
6
|
|
4
7
|
module Coaster
|
5
8
|
mattr_accessor :logger
|
9
|
+
mattr_writer :default_fingerprint
|
10
|
+
|
11
|
+
DEFAULT_FINGERPRINT = [:default, :class]
|
6
12
|
|
7
13
|
class << self
|
8
14
|
def configure
|
9
15
|
yield self
|
10
16
|
end
|
17
|
+
|
18
|
+
def default_fingerprint
|
19
|
+
@@default_fingerprint ||= DEFAULT_FINGERPRINT
|
20
|
+
end
|
11
21
|
end
|
12
22
|
end
|
13
23
|
|
data/test/test_standard_error.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'minitest/autorun'
|
3
|
+
require 'coaster/core_ext/standard_error/raven'
|
3
4
|
|
4
5
|
module Coaster
|
5
6
|
class TestStandardError < Minitest::Test
|
@@ -74,16 +75,20 @@ module Coaster
|
|
74
75
|
detail = <<-LOG
|
75
76
|
[Coaster::TestStandardError::ExampleError] status:20
|
76
77
|
MESSAGE: Coaster::TestStandardError::SampleError
|
77
|
-
@
|
78
|
+
@fingerprint: []
|
79
|
+
@tags: {}
|
78
80
|
@level: \"error\"
|
79
81
|
@attributes: {\"wat\"=>\"cha\"}
|
80
82
|
@tkey: nil
|
83
|
+
@raven: {}
|
81
84
|
CAUSE: [Coaster::TestStandardError::SampleError] status:10
|
82
85
|
MESSAGE: Coaster::TestStandardError::SampleError
|
83
|
-
@
|
86
|
+
@fingerprint: []
|
87
|
+
@tags: {}
|
84
88
|
@level: \"error\"
|
85
89
|
@attributes: {\"frog\"=>\"rams\"}
|
86
90
|
@tkey: nil
|
91
|
+
@raven: {}
|
87
92
|
LOG
|
88
93
|
assert_equal(detail, e.to_detail)
|
89
94
|
end
|
@@ -129,5 +134,11 @@ LOG
|
|
129
134
|
assert_equal e.root_cause.message, 'a'
|
130
135
|
end
|
131
136
|
end
|
137
|
+
|
138
|
+
def test_raven_notes
|
139
|
+
raise SampleError, m: 'foofoo', something: 'other'
|
140
|
+
rescue => e
|
141
|
+
assert_equal e.notes(the_other: 'something'), {something: 'other', the_other: 'something'}.with_indifferent_access
|
142
|
+
end
|
132
143
|
end
|
133
144
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- buzz jung
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: i18n
|