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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c58a466dfd273e9573f9aae56ea3eb2e2bec440
4
- data.tar.gz: a0a164c43f5fe9425581b14872e8b394c336e462
3
+ metadata.gz: ff07fb211e83da4a3ec0ea6d4fa1feef919b811a
4
+ data.tar.gz: a3d02429755c8269e99df86cd5d714d76d60967d
5
5
  SHA512:
6
- metadata.gz: f066892ea068143a9dbfdba6b774d2548557af98b5674aa9867e01f5adca711b089ab59f4a916721388ae36e7b1e5d8b04d78b14ac5ba7454e974531fef060c5
7
- data.tar.gz: dd633c17c96eba2394bf91caff61c6333f1d01b57d77f71440c03d7d9005bff0d2fc51306f397b347d7b96826b5bbd3d65cbe6ade7325bed669ba57b37010a91
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 fingerprint=(*fp)
12
- raven[:fingerprint] = fp
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
- notes[:tags] ||= {}
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] || {}).merge(attributes)
32
+ notes[:extra] = attributes.merge(notes[:extra])
33
+ notes
34
+ end
35
35
 
36
- Raven.annotate_exception(self, notes)
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[:raven])
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
- @tags = []
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[:message]
46
- msg = hash[:msg] if msg.nil?
47
- msg = hash[:m] if msg.nil?
48
- @tags = Array(hash.delete(:tags) || hash.delete(:tag))
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(*tags) do
192
+ logger.tagged(*rails_tag) do
178
193
  if logger.respond_to?(level)
179
194
  logger.send(level, msg)
180
195
  else
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3.3'
3
3
  end
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
 
@@ -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
- @tags: []
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
- @tags: []
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.2.1
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-09-06 00:00:00.000000000 Z
11
+ date: 2016-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n