coaster 0.3.4 → 0.3.5

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: 22e42c64476dc3536ab28c684c29502752c78fc7
4
- data.tar.gz: a475bf582422996c60cc6637351a2d8dd94549d2
3
+ metadata.gz: cf1f98ccd896c61cd25584533b7895e027599525
4
+ data.tar.gz: f2ce5af045ad7c1c75511cb01b96c5b0153ab800
5
5
  SHA512:
6
- metadata.gz: 5e55f6702cfe92f287b2b8c22da4175d987411f684b34b737cc84b36b92307e313b9fe3d015b5e4957296054c61a7eb9ffe786cdd09b9c400cdbc92cc2302a85
7
- data.tar.gz: fd7b2ee0ac10cac922407537ec667cf9ff5a6388dd778e0c3e576af43c4e7b31d7738a10c7bfe1c9723458a14feccd6116a60052d65d4b81558b9a060dcd697c
6
+ metadata.gz: 2af452b0fcd5316cd5da74cbcbaf37cd46a5ee4cd32e938dc5f910aa89a7bcdbaa017a0245a2dbb5d56a5348cfeecf95e35c28d96fcdc0a0e532c336ef1cba92
7
+ data.tar.gz: 0b5b7d294968de6501437e3763fff5301caae53b18d45cfc916956e60b5720590ff388681abc06131659014a189afa2bccbcb811162bd610c98a1e65399a63e4
@@ -0,0 +1,78 @@
1
+ class Coaster::BacktraceCleaner
2
+ attr_accessor :least
3
+
4
+ def initialize
5
+ @filters, @silencers = [], []
6
+ @least = 10
7
+ end
8
+
9
+ # Returns the backtrace after all filters and silencers have been run
10
+ # against it. Filters run first, then silencers.
11
+ def clean(backtrace, kind = :silent)
12
+ filtered = filter_backtrace(backtrace)
13
+
14
+ case kind
15
+ when :silent
16
+ silence(filtered)
17
+ when :noise
18
+ noise(filtered)
19
+ else
20
+ filtered
21
+ end
22
+ end
23
+ alias :filter :clean
24
+
25
+ # Adds a filter from the block provided. Each line in the backtrace will be
26
+ # mapped against this filter.
27
+ #
28
+ # # Will turn "/my/rails/root/app/models/person.rb" into "/app/models/person.rb"
29
+ # backtrace_cleaner.add_filter { |line| line.gsub(Rails.root, '') }
30
+ def add_filter(&block)
31
+ @filters << block
32
+ end
33
+
34
+ # Adds a silencer from the block provided. If the silencer returns +true+
35
+ # for a given line, it will be excluded from the clean backtrace.
36
+ #
37
+ # # Will reject all lines that include the word "mongrel", like "/gems/mongrel/server.rb" or "/app/my_mongrel_server/rb"
38
+ # backtrace_cleaner.add_silencer { |line| line =~ /mongrel/ }
39
+ def add_silencer(&block)
40
+ @silencers << block
41
+ end
42
+
43
+ # Removes all silencers, but leaves in the filters. Useful if your
44
+ # context of debugging suddenly expands as you suspect a bug in one of
45
+ # the libraries you use.
46
+ def remove_silencers!
47
+ @silencers = []
48
+ end
49
+
50
+ # Removes all filters, but leaves in the silencers. Useful if you suddenly
51
+ # need to see entire filepaths in the backtrace that you had already
52
+ # filtered out.
53
+ def remove_filters!
54
+ @filters = []
55
+ end
56
+
57
+ private
58
+ def filter_backtrace(backtrace)
59
+ @filters.each do |f|
60
+ backtrace = backtrace.map { |line| f.call(line) }
61
+ end
62
+
63
+ backtrace
64
+ end
65
+
66
+ def silence(backtrace)
67
+ least_bt = backtrace.shift(least)
68
+ @silencers.each do |s|
69
+ backtrace = backtrace.reject { |line| s.call(line) }
70
+ end
71
+
72
+ least_bt + backtrace
73
+ end
74
+
75
+ def noise(backtrace)
76
+ backtrace - silence(backtrace)
77
+ end
78
+ end
@@ -1,7 +1,7 @@
1
1
  require 'coaster/core_ext/object_translation'
2
2
 
3
3
  class StandardError
4
- cattr_accessor :cleaner
4
+ cattr_accessor :cleaner, :cause_cleaner
5
5
 
6
6
  class << self
7
7
  def status
@@ -51,20 +51,23 @@ class StandardError
51
51
  @tkey = hash.delete(:tkey)
52
52
  msg = cause.message if msg.nil? && cause
53
53
  @attributes.merge!(hash)
54
- when String, NilClass then
54
+ when String then
55
55
  msg = message
56
- when FalseClass then
57
- msg = false
56
+ when FalseClass, NilClass then
57
+ msg = ''
58
58
  else
59
- msg = message
59
+ msg = message.class.name
60
60
  @attributes[:object] = message
61
61
  end
62
62
 
63
63
  @fingerprint = [] unless @fingerprint.is_a?(Array)
64
64
  @tags = {} unless @tags.is_a?(Hash)
65
- msg = nil if msg == false
65
+ msg ||= ''
66
66
  super(msg)
67
- set_backtrace(cause.backtrace) if cause
67
+ end
68
+
69
+ def safe_message
70
+ message || ''
68
71
  end
69
72
 
70
73
  def status
@@ -98,7 +101,7 @@ class StandardError
98
101
  def description
99
102
  dsc = attributes[:description] || attributes[:desc]
100
103
  return dsc if dsc
101
- msg = message.dup
104
+ msg = safe_message.dup
102
105
  msg.instance_variable_set(:@raw, true)
103
106
  msg
104
107
  end
@@ -141,7 +144,7 @@ class StandardError
141
144
 
142
145
  def to_detail
143
146
  lg = "[#{self.class.name}] status:#{status}"
144
- lg += "\n\tMESSAGE: #{message.gsub(/\n/, "\n\t\t")}"
147
+ lg += "\n\tMESSAGE: #{safe_message.gsub(/\n/, "\n\t\t")}"
145
148
  instance_variables.each do |var|
146
149
  if var.to_s.start_with?('@_')
147
150
  next
@@ -160,6 +163,9 @@ class StandardError
160
163
  else
161
164
  lg += "\n\tCAUSE: #{cause.class.name}: #{cause.message.gsub(/\n/, "\n\t\t")}"
162
165
  end
166
+ if cause_cleaner && cause.backtrace
167
+ lg += cause_cleaner.clean(cause.backtrace).join("\n\t\t")
168
+ end
163
169
  end
164
170
  lg << "\n"
165
171
  end
@@ -185,8 +191,8 @@ class StandardError
185
191
  msg = to_detail
186
192
 
187
193
  if cl && backtrace
188
- msg += "\t\t"
189
- msg += cleaner.clean(backtrace).join("\n\t\t")
194
+ msg += "\tBACKTRACE:\n\t"
195
+ msg += cl.clean(backtrace).join("\n\t")
190
196
  end
191
197
 
192
198
  logger.tagged(*rails_tag) do
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '0.3.4'
2
+ VERSION = '0.3.5'
3
3
  end
data/lib/coaster.rb CHANGED
@@ -22,3 +22,4 @@ module Coaster
22
22
  end
23
23
 
24
24
  require 'coaster/core_ext'
25
+ require 'coaster/backtrace_cleaner'
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.3.4
4
+ version: 0.3.5
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-11 00:00:00.000000000 Z
11
+ date: 2016-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -186,6 +186,7 @@ files:
186
186
  - README.md
187
187
  - Rakefile
188
188
  - lib/coaster.rb
189
+ - lib/coaster/backtrace_cleaner.rb
189
190
  - lib/coaster/core_ext.rb
190
191
  - lib/coaster/core_ext/object_translation.rb
191
192
  - lib/coaster/core_ext/standard_error.rb