deprecations 2.5.0 → 2.6.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/README.md +2 -1
- data/lib/deprecations/version.rb +1 -1
- data/lib/deprecations.rb +159 -9
- metadata +4 -10
- data/lib/deprecations/behavior.rb +0 -69
- data/lib/deprecations/extension.rb +0 -77
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a9290e6b74cd3d108623f9b726b6f71b02a5108feb534114fb2d63160dfbfab
|
4
|
+
data.tar.gz: 9a554fb7d11c6d6e9c741f43c846c1d140705be8621540683ab94b3bb2bdc0bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66817f08bf5641c9c09404615a1290ec8fe037751e8f0157b91fb7d577f2f24c1818febc6920fc36216e2386cbf40e47d275f048a12fd31a0f20cdfe5129f075
|
7
|
+
data.tar.gz: a57b529946baec215bdb4998151a7dc695166eb629dbbc232a6296a24b31eb60f45a84fb68d82f67632bb256293536197b11328e8901d2a25d0ef3b19219e4fe
|
data/README.md
CHANGED
@@ -70,9 +70,10 @@ Deprecations.behavior = :raise
|
|
70
70
|
|
71
71
|
There are 3 pre-defined behaviors:
|
72
72
|
|
73
|
-
- `:raise` will raise an `
|
73
|
+
- `:raise` will raise an `Deprecations::Exception` when a deprecated method is called
|
74
74
|
- `:silence` will do nothing (ignore the deprecation)
|
75
75
|
- `:warn` will print a warning (default behavior)
|
76
|
+
- `:deprecated` will print a warning when Ruby's warning category 'deprecated' is enabled
|
76
77
|
|
77
78
|
Besides this you can implement your own:
|
78
79
|
|
data/lib/deprecations/version.rb
CHANGED
data/lib/deprecations.rb
CHANGED
@@ -1,18 +1,168 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Deprecations
|
4
|
-
require_relative 'deprecations/behavior'
|
5
|
-
require_relative 'deprecations/extension'
|
6
|
-
require_relative 'deprecations/version'
|
7
|
-
|
8
4
|
Error = Class.new(ScriptError)
|
9
5
|
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
class << self
|
7
|
+
def behavior = BEHAVIOR.key(@behavior) || @behavior
|
8
|
+
|
9
|
+
def behavior=(value)
|
10
|
+
@behavior = as_behavior(value)
|
11
|
+
end
|
12
|
+
|
13
|
+
def with_behavior(behavior)
|
14
|
+
current_behavior = @behavior
|
15
|
+
@behavior = as_behavior(behavior)
|
16
|
+
raise(ArgumentError, 'block expected') unless block_given?
|
17
|
+
yield
|
18
|
+
ensure
|
19
|
+
@behavior = current_behavior
|
20
|
+
end
|
21
|
+
|
22
|
+
alias set_behavior with_behavior
|
23
|
+
|
24
|
+
def call(subject, alternative, outdated)
|
25
|
+
@behavior.call(subject, alternative, outdated)
|
26
|
+
self
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def as_behavior(arg)
|
32
|
+
return arg if defined?(arg.call)
|
33
|
+
BEHAVIOR.fetch(arg) do
|
34
|
+
raise(
|
35
|
+
ArgumentError,
|
36
|
+
"invalid parameter - behavior has to be #{
|
37
|
+
BEHAVIOR.keys.map(&:inspect).join(' | ')
|
38
|
+
} or need to respond to `#call`"
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def name_error(exc)
|
44
|
+
exc.set_backtrace(exc.backtrace.drop_while { _1.start_with?(__FILE__) })
|
45
|
+
exc
|
46
|
+
end
|
47
|
+
|
48
|
+
module Raise
|
49
|
+
def self.call(subject, alternative, _outdated)
|
50
|
+
error =
|
51
|
+
Error.new(
|
52
|
+
"`#{subject}` is deprecated#{
|
53
|
+
" - use #{alternative} instead" if alternative
|
54
|
+
}"
|
55
|
+
)
|
56
|
+
error.set_backtrace(caller(3))
|
57
|
+
raise(error)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module WarnMessage
|
62
|
+
def message(subject, alternative, outdated)
|
63
|
+
"`#{subject}` is deprecated#{
|
64
|
+
outdated ? " and will be outdated #{outdated}." : '.'
|
65
|
+
}#{" Please use `#{alternative}` instead." if alternative}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module Warn
|
70
|
+
extend WarnMessage
|
71
|
+
def self.call(*args) = ::Kernel.warn(message(*args), uplevel: 3)
|
72
|
+
end
|
73
|
+
|
74
|
+
module Deprecated
|
75
|
+
extend WarnMessage
|
76
|
+
def self.call(*args)
|
77
|
+
::Kernel.warn(message(*args), uplevel: 3, category: :deprecated)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
BEHAVIOR = {
|
82
|
+
silence: proc {},
|
83
|
+
raise: Raise,
|
84
|
+
warn: Warn,
|
85
|
+
deprecated: Deprecated
|
86
|
+
}.freeze
|
87
|
+
|
88
|
+
module ClassMethods
|
89
|
+
private
|
90
|
+
|
91
|
+
def deprecated(name, alt = nil, outdated = nil)
|
92
|
+
alias_name = "__deprecated__singleton_method__#{name}__"
|
93
|
+
return if private_method_defined?(alias_name)
|
94
|
+
begin
|
95
|
+
alias_method(alias_name, name)
|
96
|
+
rescue NameError => e
|
97
|
+
raise ::Deprecations.__send__(:name_error, e)
|
98
|
+
end
|
99
|
+
private(alias_name)
|
100
|
+
if alt.is_a?(Symbol)
|
101
|
+
begin
|
102
|
+
alt = instance_method(alt)
|
103
|
+
rescue NameError => e
|
104
|
+
raise ::Deprecations.__send__(:name_error, e)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
define_method(name) do |*args, **kw_args, &b|
|
108
|
+
::Deprecations.call(
|
109
|
+
"#{self}.#{::Kernel.__method__}",
|
110
|
+
(alt.is_a?(UnboundMethod) ? "#{self}.#{alt.name}" : alt),
|
111
|
+
outdated
|
112
|
+
)
|
113
|
+
__send__(alias_name, *args, **kw_args, &b)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
module InstanceMethods
|
119
|
+
private
|
120
|
+
|
121
|
+
def deprecated(name, alt = nil, outdated = nil)
|
122
|
+
alias_name = "__deprecated__instance_method__#{name}__"
|
123
|
+
return if private_method_defined?(alias_name)
|
124
|
+
begin
|
125
|
+
alias_method(alias_name, name)
|
126
|
+
rescue NameError => e
|
127
|
+
::Deprecations.__send__(:name_error, e)
|
128
|
+
return singleton_class.__send__(:deprecated, name, alt, outdated)
|
129
|
+
end
|
130
|
+
private(alias_name)
|
131
|
+
if alt.is_a?(Symbol)
|
132
|
+
begin
|
133
|
+
alt = instance_method(alt)
|
134
|
+
rescue NameError => e
|
135
|
+
raise ::Deprecations.__send__(:name_error, e)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
define_method(name) do |*args, **kw_args, &b|
|
139
|
+
pref =
|
140
|
+
if defined?(self.class.name)
|
141
|
+
self.class.name
|
142
|
+
else
|
143
|
+
::Kernel.instance_method(:class).bind(self).call
|
144
|
+
end
|
145
|
+
::Deprecations.call(
|
146
|
+
"#{pref}##{::Kernel.__method__}",
|
147
|
+
(alt.is_a?(UnboundMethod) ? "#{pref}##{alt.name}" : alt),
|
148
|
+
outdated
|
149
|
+
)
|
150
|
+
__send__(alias_name, *args, **kw_args, &b)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def deprecated!(alternative = nil, outdated = nil)
|
155
|
+
org = method(:new)
|
156
|
+
define_singleton_method(:new) do |*args, **kw_args, &b|
|
157
|
+
::Deprecations.call(name, alternative, outdated)
|
158
|
+
org.call(*args, **kw_args, &b)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
Module.extend(ClassMethods)
|
164
|
+
Module.include(InstanceMethods)
|
13
165
|
end
|
14
166
|
|
15
167
|
self.behavior = :warn
|
16
168
|
end
|
17
|
-
|
18
|
-
DeprecationError = Deprecations::Error
|
metadata
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deprecations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Blumtritt
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-30 00:00:00.000000000 Z
|
12
11
|
dependencies: []
|
13
12
|
description: |
|
14
13
|
This gem provides transparent declaration of deprecated methods and classes.
|
15
14
|
It's easy, small, has no dependencies and no overhead.
|
16
|
-
email:
|
17
15
|
executables: []
|
18
16
|
extensions: []
|
19
17
|
extra_rdoc_files:
|
@@ -21,8 +19,6 @@ extra_rdoc_files:
|
|
21
19
|
files:
|
22
20
|
- README.md
|
23
21
|
- lib/deprecations.rb
|
24
|
-
- lib/deprecations/behavior.rb
|
25
|
-
- lib/deprecations/extension.rb
|
26
22
|
- lib/deprecations/version.rb
|
27
23
|
homepage: https://github.com/mblumtritt/deprecations
|
28
24
|
licenses: []
|
@@ -30,7 +26,6 @@ metadata:
|
|
30
26
|
source_code_uri: https://github.com/mblumtritt/deprecations
|
31
27
|
bug_tracker_uri: https://github.com/mblumtritt/deprecations/issues
|
32
28
|
rubygems_mfa_required: 'true'
|
33
|
-
post_install_message:
|
34
29
|
rdoc_options: []
|
35
30
|
require_paths:
|
36
31
|
- lib
|
@@ -38,15 +33,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
38
33
|
requirements:
|
39
34
|
- - ">="
|
40
35
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
36
|
+
version: 3.0.0
|
42
37
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
38
|
requirements:
|
44
39
|
- - ">="
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
requirements: []
|
48
|
-
rubygems_version: 3.
|
49
|
-
signing_key:
|
43
|
+
rubygems_version: 3.6.3
|
50
44
|
specification_version: 4
|
51
45
|
summary: Deprecation support for your project.
|
52
46
|
test_files: []
|
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Deprecations
|
4
|
-
class << self
|
5
|
-
def behavior
|
6
|
-
BEHAVIOR.key(@behavior) || @behavior
|
7
|
-
end
|
8
|
-
|
9
|
-
def behavior=(value)
|
10
|
-
@behavior = as_behavior(value)
|
11
|
-
end
|
12
|
-
|
13
|
-
def with_behavior(behavior)
|
14
|
-
behavior = as_behavior(behavior)
|
15
|
-
raise(ArgumentError, 'block expected') unless block_given?
|
16
|
-
current_behavior = @behavior
|
17
|
-
@behavior = behavior
|
18
|
-
yield
|
19
|
-
ensure
|
20
|
-
@behavior = current_behavior if current_behavior
|
21
|
-
end
|
22
|
-
|
23
|
-
alias set_behavior with_behavior
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def as_behavior(arg)
|
28
|
-
return arg if defined?(arg.call)
|
29
|
-
BEHAVIOR.fetch(arg) do
|
30
|
-
raise(
|
31
|
-
ArgumentError,
|
32
|
-
'invalid parameter - behavior has to be ' \
|
33
|
-
"#{valid_behaviors} or need to respond to `#call`"
|
34
|
-
)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def valid_behaviors
|
39
|
-
BEHAVIOR.keys.map(&:inspect).join(' | ')
|
40
|
-
end
|
41
|
-
|
42
|
-
module Raise
|
43
|
-
def self.call(subject, alternative, _outdated)
|
44
|
-
raise(
|
45
|
-
Error
|
46
|
-
.new(
|
47
|
-
"`#{subject}` is deprecated#{
|
48
|
-
" - use #{alternative} instead" if alternative
|
49
|
-
}"
|
50
|
-
)
|
51
|
-
.tap { |error| error.set_backtrace(caller(3)) }
|
52
|
-
)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
module Warn
|
57
|
-
def self.call(subject, alternative, outdated)
|
58
|
-
::Kernel.warn(
|
59
|
-
"`#{subject}` is deprecated#{
|
60
|
-
outdated ? " and will be outdated #{outdated}." : '.'
|
61
|
-
}#{" Please use `#{alternative}` instead." if alternative}",
|
62
|
-
uplevel: 3
|
63
|
-
)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
BEHAVIOR = { silence: proc {}, raise: Raise, warn: Warn }.freeze
|
68
|
-
end
|
69
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Deprecations
|
4
|
-
private_class_method def self.infect(mod)
|
5
|
-
mod.extend(ClassMethods)
|
6
|
-
mod.__send__(:include, InstanceMethods)
|
7
|
-
end
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
private
|
11
|
-
|
12
|
-
def deprecated(method_name, alternative = nil, outdated = nil)
|
13
|
-
alias_name = "__deprecated__singleton_method__#{method_name}__"
|
14
|
-
return if private_method_defined?(alias_name)
|
15
|
-
alias_method(alias_name, method_name)
|
16
|
-
private(alias_name)
|
17
|
-
alternative = instance_method(alternative) if alternative.is_a?(Symbol)
|
18
|
-
define_method(method_name) do |*args, **kw_args, &b|
|
19
|
-
Deprecations.call(
|
20
|
-
"#{self}.#{::Kernel.__method__}",
|
21
|
-
if alternative.is_a?(UnboundMethod)
|
22
|
-
"#{self}.#{alternative.name}"
|
23
|
-
else
|
24
|
-
alternative
|
25
|
-
end,
|
26
|
-
outdated
|
27
|
-
)
|
28
|
-
__send__(alias_name, *args, **kw_args, &b)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
module InstanceMethods
|
34
|
-
private
|
35
|
-
|
36
|
-
def deprecated(method_name, alternative = nil, outdated = nil)
|
37
|
-
alias_name = "__deprecated__instance_method__#{method_name}__"
|
38
|
-
return if private_method_defined?(alias_name)
|
39
|
-
alias_method(alias_name, method_name)
|
40
|
-
private(alias_name)
|
41
|
-
alternative = instance_method(alternative) if alternative.is_a?(Symbol)
|
42
|
-
define_method(method_name) do |*args, **kw_args, &b|
|
43
|
-
pref =
|
44
|
-
if defined?(self.class.name)
|
45
|
-
self.class.name
|
46
|
-
else
|
47
|
-
Kernel.instance_method(:class).bind(self).call
|
48
|
-
end
|
49
|
-
Deprecations.call(
|
50
|
-
"#{pref}##{::Kernel.__method__}",
|
51
|
-
if alternative.is_a?(UnboundMethod)
|
52
|
-
"#{pref}##{alternative.name}"
|
53
|
-
else
|
54
|
-
alternative
|
55
|
-
end,
|
56
|
-
outdated
|
57
|
-
)
|
58
|
-
__send__(alias_name, *args, **kw_args, &b)
|
59
|
-
end
|
60
|
-
rescue NameError
|
61
|
-
raise if private_method_defined?(alias_name)
|
62
|
-
singleton_class.__send__(:deprecated, method_name, alternative, outdated)
|
63
|
-
end
|
64
|
-
|
65
|
-
def deprecated!(alternative = nil, outdated = nil)
|
66
|
-
org = method(:new)
|
67
|
-
define_singleton_method(:new) do |*args, **kw_args, &b|
|
68
|
-
Deprecations.call(name, alternative, outdated)
|
69
|
-
org.call(*args, **kw_args, &b)
|
70
|
-
end
|
71
|
-
rescue NameError
|
72
|
-
nil
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
infect(Module)
|
77
|
-
end
|