warning_signs 0.4.0 → 0.5.0
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/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +19 -6
- data/lib/warning_signs/caller_location_helper.rb +17 -0
- data/lib/warning_signs/deprecation.rb +14 -2
- data/lib/warning_signs/handler.rb +5 -2
- data/lib/warning_signs/rails_deprecation_catcher.rb +6 -1
- data/lib/warning_signs/ruby_deprecation_catcher.rb +4 -11
- data/lib/warning_signs/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d9af94718f30c122c45153b7c2837ec2544ab06d3c3f5356b6062408e766d64
|
4
|
+
data.tar.gz: c038f7baf62f0f15c63041e47c54281e9c9c26c8dfc489f96c98780e7490b523
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b47dd7876dec5213c03fb2774ee2add5a5da6f35d40dac9d33f8a27dd5767ac80bbc507b009d01887695184e2c24af5bd286028b41b647e56b63e1e3fc0f74b
|
7
|
+
data.tar.gz: 14618990cbda30ebb76dcf6d362b67c4eacdbb700005d3f1aef6c15dc98348a43e5c67323ed3b286ee1b37ad5d0a88b7a4d721ea78c20948baa8a97560d0fdb6
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
The Warning Signs gem builds upon the ideas of the
|
4
4
|
[Ruby Warning Gem](https://github.com/jeremyevans/ruby-warning)
|
5
|
-
and [Stop
|
5
|
+
and [Stop ignoring your Rails (and Ruby) deprecations!](https://blog.testdouble.com/posts/2023-04-24-stop-ignoring-your-ruby-and-rails-deprecations/).
|
6
6
|
|
7
7
|
The idea is to provide an easily-configurable way to manage deprecation
|
8
|
-
warnings from Ruby and Rails to support your
|
8
|
+
warnings from Ruby and Rails to support your upgrades.
|
9
9
|
|
10
10
|
## Installing Warning Signs
|
11
11
|
|
@@ -18,7 +18,7 @@ under some use cases, you may not need it in production.
|
|
18
18
|
|
19
19
|
## Using Warning Signs
|
20
20
|
|
21
|
-
The Warning Signs
|
21
|
+
The Warning Signs gem looks for a `.warning_signs.yml` file when the Rails
|
22
22
|
application starts. If it does not find the file, it will not load and the
|
23
23
|
processing of deprecations will be unaffected.
|
24
24
|
|
@@ -50,7 +50,7 @@ Handlers are matched in order. If no handler applies to a deprecation
|
|
50
50
|
warning, Ruby warnings is ignored, Rails warnings are passed through
|
51
51
|
the ActiveSupport notification mechanism.
|
52
52
|
|
53
|
-
The following
|
53
|
+
The following example logs all deprecation warnings:
|
54
54
|
|
55
55
|
```yaml
|
56
56
|
handlers:
|
@@ -98,6 +98,20 @@ No matter what order you have the behaviors in, a `raise` behavior will be
|
|
98
98
|
executed last so that the other behaviors happen before the exception is
|
99
99
|
invoked.
|
100
100
|
|
101
|
+
The attribute `backtrace_lines` can be used to print extra lines of the
|
102
|
+
backtrace to the output for the `log`, `stderr`, and `stdout` behaviors.
|
103
|
+
Currently, it's one attribute that applies to all behaviors. This can be
|
104
|
+
useful, especially if the direct cause of the issue is in a gem.
|
105
|
+
|
106
|
+
```yaml
|
107
|
+
handlers:
|
108
|
+
- environment: all
|
109
|
+
backtrace_lines: 5
|
110
|
+
behaviors:
|
111
|
+
- raise
|
112
|
+
- log
|
113
|
+
```
|
114
|
+
|
101
115
|
A common pattern is to focus only on specific deprecations and ignore others.
|
102
116
|
For example, this setting file would raise on Ruby keyword argument
|
103
117
|
deprecations and ignore other ruby deprecations
|
@@ -155,7 +169,7 @@ Ruby warnings can have an optional category, there are two predefined
|
|
155
169
|
categories, `deprecated` and `experimental`. You can specify a handler to
|
156
170
|
match those categories based on an "only" or "except" matcher. If you want
|
157
171
|
to specially handle warnings that do not have a defined category, you can
|
158
|
-
refer to them as `blank
|
172
|
+
refer to them as `blank`.
|
159
173
|
|
160
174
|
This handler only handles Ruby warnings that are deprecated, other warnings
|
161
175
|
are ignored.
|
@@ -182,5 +196,4 @@ handlers:
|
|
182
196
|
|
183
197
|
## To Do:
|
184
198
|
|
185
|
-
* write to standard out as a behavior
|
186
199
|
* Ability to customize output message format
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module WarningSigns
|
2
|
+
module CallerLocationHelper
|
3
|
+
def caller_location_start
|
4
|
+
caller_locations.find_index do |location|
|
5
|
+
!ignore_line(location.to_s)
|
6
|
+
end || 0
|
7
|
+
end
|
8
|
+
|
9
|
+
def ignore_line(line)
|
10
|
+
line.include?("<internal:") ||
|
11
|
+
line.include?("warning_signs/lib") ||
|
12
|
+
line.include?("warning_signs/spec") ||
|
13
|
+
line.include?("rubygems") ||
|
14
|
+
line.include?("/gems")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module WarningSigns
|
2
2
|
class Deprecation
|
3
|
-
attr_accessor :message, :source, :category
|
3
|
+
attr_accessor :message, :source, :category, :backtrace
|
4
4
|
|
5
|
-
def initialize(message, source:, category: nil)
|
5
|
+
def initialize(message, source:, category: nil, backtrace: nil)
|
6
6
|
@message = message
|
7
7
|
@source = source.to_s.downcase.inquiry
|
8
8
|
@category = category
|
9
|
+
@backtrace = backtrace
|
9
10
|
end
|
10
11
|
|
11
12
|
def handler
|
@@ -19,6 +20,12 @@ module WarningSigns
|
|
19
20
|
(result - ["raise"]) << "raise"
|
20
21
|
end
|
21
22
|
|
23
|
+
def backtrace_lines
|
24
|
+
lines = handler&.backtrace_lines || 0
|
25
|
+
return "" if lines.zero?
|
26
|
+
backtrace[1..lines].join("\n")
|
27
|
+
end
|
28
|
+
|
22
29
|
def invoke
|
23
30
|
behaviors.each do |behavior|
|
24
31
|
case behavior
|
@@ -26,8 +33,13 @@ module WarningSigns
|
|
26
33
|
raise UnhandledDeprecationError, message
|
27
34
|
when "log"
|
28
35
|
Rails.logger.warn(message)
|
36
|
+
backtrace_lines.split("\n").each { Rails.logger.warn(_1) }
|
29
37
|
when "stderr"
|
30
38
|
$stderr.puts(message) # standard:disable Style/StderrPuts
|
39
|
+
$stderr.puts(backtrace_lines) # standard:disable Style/StderrPuts
|
40
|
+
when "stdout"
|
41
|
+
$stdout.puts(message) # standard:disable Style/StdoutPuts
|
42
|
+
$stdout.puts(backtrace_lines) # standard:disable Style/StdoutPuts
|
31
43
|
end
|
32
44
|
end
|
33
45
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module WarningSigns
|
2
2
|
class Handler
|
3
|
-
attr_accessor :environments, :except, :only, :source,
|
3
|
+
attr_accessor :environments, :except, :only, :source,
|
4
|
+
:category_matcher, :backtrace_lines
|
4
5
|
|
5
6
|
def self.from_hash(hash)
|
6
7
|
new(**hash.symbolize_keys)
|
@@ -14,7 +15,8 @@ module WarningSigns
|
|
14
15
|
only: [],
|
15
16
|
source: "any",
|
16
17
|
environments: [],
|
17
|
-
ruby_warnings: {}
|
18
|
+
ruby_warnings: {},
|
19
|
+
backtrace_lines: 0
|
18
20
|
)
|
19
21
|
@except = except.map { Pattern.for(_1) }
|
20
22
|
@only = only.map { Pattern.for(_1) }
|
@@ -24,6 +26,7 @@ module WarningSigns
|
|
24
26
|
end
|
25
27
|
@source = source.to_s.downcase.inquiry
|
26
28
|
@category_matcher = RubyCategoryMatcher.new(**ruby_warnings.symbolize_keys)
|
29
|
+
@backtrace_lines = backtrace_lines
|
27
30
|
raise InvalidHandlerError unless valid?
|
28
31
|
end
|
29
32
|
|
@@ -1,9 +1,14 @@
|
|
1
1
|
module WarningSigns
|
2
2
|
class RailsDeprecationCatcher < ActiveSupport::Subscriber
|
3
|
+
include CallerLocationHelper
|
3
4
|
attach_to :rails
|
4
5
|
|
5
6
|
def deprecation(event)
|
6
|
-
Deprecation.new(
|
7
|
+
Deprecation.new(
|
8
|
+
event.payload[:message],
|
9
|
+
source: "rails",
|
10
|
+
backtrace: caller_locations[caller_location_start..]
|
11
|
+
).invoke
|
7
12
|
end
|
8
13
|
end
|
9
14
|
end
|
@@ -1,25 +1,18 @@
|
|
1
1
|
module WarningSigns
|
2
2
|
module RubyDeprecationCatcher
|
3
|
+
include CallerLocationHelper
|
3
4
|
def warn(message, category: nil)
|
4
5
|
Deprecation.new(
|
5
6
|
augmented_message(message, category),
|
6
7
|
source: "ruby",
|
7
|
-
category: category
|
8
|
+
category: category,
|
9
|
+
backtrace: caller_locations[caller_location_start..]
|
8
10
|
).invoke
|
9
11
|
end
|
10
12
|
|
11
13
|
def augmented_message(message, category)
|
12
14
|
category_part = category.present? ? " #{category.upcase}: " : ": "
|
13
|
-
"RUBY WARNING#{category_part}#{message} called from #{
|
14
|
-
end
|
15
|
-
|
16
|
-
def caller_location
|
17
|
-
caller_locations.find do |location|
|
18
|
-
!location.to_s.include?("internal:warning") &&
|
19
|
-
!location.to_s.include?("warning_signs") &&
|
20
|
-
!location.to_s.include?("rubygems") &&
|
21
|
-
!location.to_s.include?("/gems")
|
22
|
-
end
|
15
|
+
"RUBY WARNING#{category_part}#{message} called from #{caller_locations[caller_location_start]}"
|
23
16
|
end
|
24
17
|
end
|
25
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warning_signs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noel Rappin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry-byebug
|
@@ -170,6 +170,7 @@ files:
|
|
170
170
|
- bin/console
|
171
171
|
- bin/setup
|
172
172
|
- lib/warning_signs.rb
|
173
|
+
- lib/warning_signs/caller_location_helper.rb
|
173
174
|
- lib/warning_signs/deprecation.rb
|
174
175
|
- lib/warning_signs/environment.rb
|
175
176
|
- lib/warning_signs/handler.rb
|