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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9973f05a62830c682760b9becfce855fa3e25d2bfdb40a0516846b5e3e27297f
4
- data.tar.gz: 77b6ca73354da20235e652895d30513dc4f3ab47dd3bd73658eeb250d2cac52c
3
+ metadata.gz: 8a9290e6b74cd3d108623f9b726b6f71b02a5108feb534114fb2d63160dfbfab
4
+ data.tar.gz: 9a554fb7d11c6d6e9c741f43c846c1d140705be8621540683ab94b3bb2bdc0bd
5
5
  SHA512:
6
- metadata.gz: 190ddcd1b3f3f750d83579d369f02b12fc03f6fdd4a21a05b5d58a3d830d72b49c696bebbd8e27e431458a0224162a00bc1fa79f59851b608b5f9547b7e111ca
7
- data.tar.gz: 14e17835fd8c727d3a30db5f22673918373969a4b687c494e67abe6b83e9f8e72ee0c6dcab98b63bca8e08926506e98c076e89a59acd9ae457787b42a01cd91b
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 `DeprecationException` when a deprecated method is called
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Deprecations
4
- VERSION = '2.5.0'
4
+ VERSION = '2.6.0'
5
5
  end
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
- def self.call(subject, alternative, outdated)
11
- @behavior.call(subject, alternative, outdated)
12
- self
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.5.0
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: 2023-12-22 00:00:00.000000000 Z
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: 2.7.0
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.5.1
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