coaster 0.2.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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