deprecations 1.0.1 → 1.0.2
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 +3 -0
- data/lib/deprecations/extension.rb +7 -7
- data/lib/deprecations/version.rb +1 -1
- data/lib/deprecations.rb +9 -5
- data/spec/deprecations_spec.rb +55 -19
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78ed3cd91fd99c383cfcf80cf73f9e5757f0f007
|
4
|
+
data.tar.gz: bf79ec77bdff29dc0222a4b385efa37d7bc27fd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 600ef0c82127f3df1111751cad2a13fdd0aa4342051fa629f122f498dac8ee469182f1417474df5ff1b60db178276858e707a8becfb9f62449d75e05126f41fb
|
7
|
+
data.tar.gz: 17760c77380a0379c7e8cc523a1869bcf77164156fe4749d63ba3ed6afa674f1f0cf9bbed7f63f394e35b956e76dba51786f47d0e6d8fe84bdd4b5ac7aec51d0
|
data/CHANGELOG.md
CHANGED
@@ -18,12 +18,12 @@ module Deprecations
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def __define_deprecated(name, decorated_name, scope, alternative, outdated)
|
21
|
-
alias_name = __private_alias(name, decorated_name
|
21
|
+
alias_name = __private_alias(name, decorated_name)
|
22
|
+
send(scope, name)
|
22
23
|
define_method(name) do |*a, &b|
|
23
24
|
Deprecations.call(decorated_name, alternative, outdated)
|
24
25
|
send(alias_name, *a, &b)
|
25
26
|
end
|
26
|
-
send(scope, name)
|
27
27
|
name
|
28
28
|
end
|
29
29
|
|
@@ -44,7 +44,7 @@ module Deprecations
|
|
44
44
|
method_scope = __method_scope(method_name) or __not_found!(method_name)
|
45
45
|
__define_deprecated(
|
46
46
|
method_name,
|
47
|
-
"#{self.inspect[8..-2]}.#{method_name}",
|
47
|
+
->{"#{self.inspect[8..-2]}.#{method_name}"},
|
48
48
|
method_scope,
|
49
49
|
__decorated(alternative_method_name),
|
50
50
|
outdated
|
@@ -55,7 +55,7 @@ module Deprecations
|
|
55
55
|
|
56
56
|
def __decorated(name)
|
57
57
|
name or return nil
|
58
|
-
__method_scope(name) and return "#{self.inspect[8..-2]}.#{name}"
|
58
|
+
__method_scope(name) and return ->{"#{self.inspect[8..-2]}.#{name}"}
|
59
59
|
Symbol === name and __not_found!(name)
|
60
60
|
name
|
61
61
|
end
|
@@ -73,7 +73,7 @@ module Deprecations
|
|
73
73
|
singleton_class.send(
|
74
74
|
:__define_deprecated,
|
75
75
|
:new,
|
76
|
-
|
76
|
+
->{self},
|
77
77
|
:public,
|
78
78
|
alternative ? "#{alternative}" : nil,
|
79
79
|
outdated
|
@@ -83,7 +83,7 @@ module Deprecations
|
|
83
83
|
def deprecated(method_name, alternative_method_name = nil, outdated = nil)
|
84
84
|
method_scope = __method_scope(method_name) and return __define_deprecated(
|
85
85
|
method_name,
|
86
|
-
"#{
|
86
|
+
->{"#{self}##{method_name}"},
|
87
87
|
method_scope,
|
88
88
|
__decorated(alternative_method_name),
|
89
89
|
outdated
|
@@ -95,7 +95,7 @@ module Deprecations
|
|
95
95
|
|
96
96
|
def __decorated(name)
|
97
97
|
name or return nil
|
98
|
-
__method_scope(name) ? "#{self
|
98
|
+
__method_scope(name) ? ->{"#{self}##{name}"} : singleton_class.send(:__decorated, name)
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
data/lib/deprecations/version.rb
CHANGED
data/lib/deprecations.rb
CHANGED
@@ -21,8 +21,8 @@ module Deprecations
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def throw!(subject, alternative)
|
24
|
-
msg = "`#{subject}` is deprecated"
|
25
|
-
alternative and msg << " - use #{alternative} instead"
|
24
|
+
msg = "`#{value(subject)}` is deprecated"
|
25
|
+
alternative and msg << " - use #{value(alternative)} instead"
|
26
26
|
ex = DeprecationError.new(msg)
|
27
27
|
ex.set_backtrace(caller(3))
|
28
28
|
raise(ex)
|
@@ -30,11 +30,15 @@ module Deprecations
|
|
30
30
|
|
31
31
|
def warn(subject, alternative, outdated)
|
32
32
|
location = ::Kernel.caller_locations(3,1).last and location = "#{location.path}:#{location.lineno}: "
|
33
|
-
msg = "#{location}[DEPRECATION] `#{subject}` is deprecated"
|
34
|
-
msg << (outdated ? " and will be outdated #{outdated}." : '.')
|
35
|
-
alternative and msg << " Please use `#{alternative}` instead."
|
33
|
+
msg = "#{location}[DEPRECATION] `#{value(subject)}` is deprecated"
|
34
|
+
msg << ((outdated = value(outdated)) ? " and will be outdated #{outdated}." : '.')
|
35
|
+
alternative = value(alternative) and msg << " Please use `#{alternative}` instead."
|
36
36
|
::Kernel.warn(msg)
|
37
37
|
end
|
38
|
+
|
39
|
+
def value(arg)
|
40
|
+
defined?(arg.call) ? arg.call : arg
|
41
|
+
end
|
38
42
|
|
39
43
|
end
|
40
44
|
end
|
data/spec/deprecations_spec.rb
CHANGED
@@ -23,58 +23,66 @@ module DeprecationsSamples # samples how to use
|
|
23
23
|
|
24
24
|
# here we go:
|
25
25
|
|
26
|
-
# method Sample1#foo is deprecated
|
27
26
|
class Sample1
|
28
27
|
include MethodSamples
|
29
|
-
deprecated :foo
|
28
|
+
deprecated :foo # Sample1#foo is deprecated
|
30
29
|
end
|
31
30
|
|
32
|
-
# method Sample2#foo is deprecated, Sample2#alt should be used
|
33
31
|
class Sample2
|
34
32
|
include MethodSamples
|
35
|
-
deprecated :foo, :alt
|
33
|
+
deprecated :foo, :alt # Sample2#foo is deprecated, Sample2#alt should be used
|
36
34
|
end
|
37
35
|
|
38
|
-
# method Sample3#foo is deprecated and will be outdated in next version, Sample3#alt should be used
|
39
36
|
class Sample3
|
40
37
|
include MethodSamples
|
41
|
-
deprecated :foo, :alt, 'next version'
|
38
|
+
deprecated :foo, :alt, 'next version' # Sample3#foo is deprecated and will be outdated in next version, Sample3#alt should be used
|
42
39
|
end
|
43
40
|
|
44
|
-
# class method Sample4::foo is deprecated
|
45
41
|
class Sample4
|
46
42
|
extend MethodSamples
|
47
|
-
deprecated :foo
|
43
|
+
deprecated :foo # class method Sample4::foo is deprecated
|
48
44
|
end
|
49
45
|
|
50
|
-
# class method Sample5::foo is deprecated, Sample5::alt should be used
|
51
46
|
class Sample5
|
52
47
|
extend MethodSamples
|
53
|
-
deprecated :foo, :alt
|
48
|
+
deprecated :foo, :alt # class method Sample5::foo is deprecated, Sample5::alt should be used
|
54
49
|
end
|
55
50
|
|
56
|
-
# class method Sample6::foo is deprecated and will be outdated in next version, Sample6::alt should be used
|
57
51
|
class Sample6
|
58
52
|
extend MethodSamples
|
59
|
-
deprecated :foo, :alt, 'next version'
|
53
|
+
deprecated :foo, :alt, 'next version' # class method Sample6::foo is deprecated and will be outdated in next version, Sample6::alt should be used
|
60
54
|
end
|
61
55
|
|
62
|
-
# class Sample7 is deprecated
|
63
56
|
class Sample7
|
57
|
+
deprecated! # class Sample7 is deprecated
|
64
58
|
include InitializerSample
|
65
|
-
deprecated!
|
66
59
|
end
|
67
60
|
|
68
|
-
# class Sample8 is deprecated, class Sample1 should be used
|
69
61
|
class Sample8
|
62
|
+
deprecated! Sample1 # class Sample8 is deprecated, class Sample1 should be used
|
70
63
|
include InitializerSample
|
71
|
-
deprecated! Sample1
|
72
64
|
end
|
73
65
|
|
74
|
-
# class Sample9 is deprecated and will be outdated in version 2.0.0, class Sample1 should be used
|
75
66
|
class Sample9
|
67
|
+
deprecated! Sample1, 'in 2.0.0' # class Sample9 is deprecated and will be outdated in version 2.0.0, class Sample1 should be used
|
76
68
|
include InitializerSample
|
77
|
-
|
69
|
+
end
|
70
|
+
|
71
|
+
module AnonymousDefined
|
72
|
+
AnnoSample7 = Class.new do
|
73
|
+
deprecated! # class AnonymousDefined::AnnoSample7 is deprecated
|
74
|
+
include InitializerSample
|
75
|
+
end
|
76
|
+
|
77
|
+
AnnoSample8 = Class.new do
|
78
|
+
deprecated! Sample1 # class AnonymousDefined::AnnoSample8 is deprecated, class Sample1 should be used
|
79
|
+
include InitializerSample
|
80
|
+
end
|
81
|
+
|
82
|
+
AnnoSample9 = Class.new do
|
83
|
+
deprecated! Sample1, 'in 2.0.0' # class AnonymousDefined::AnnoSample9 is deprecated and will be outdated in version 2.0.0, class Sample1 should be used
|
84
|
+
include InitializerSample
|
85
|
+
end
|
78
86
|
end
|
79
87
|
|
80
88
|
end
|
@@ -278,6 +286,34 @@ RSpec.describe Deprecations do
|
|
278
286
|
end
|
279
287
|
end
|
280
288
|
|
289
|
+
context 'when a anonymous class is marked as deprecated' do
|
290
|
+
let(:sample){ DeprecationsSamples::AnonymousDefined::AnnoSample7 }
|
291
|
+
|
292
|
+
it_should_behave_like 'a deprecated class (warnings enabled)'
|
293
|
+
|
294
|
+
context 'when an optional alternative class is given' do
|
295
|
+
let(:sample){ DeprecationsSamples::AnonymousDefined::AnnoSample8 }
|
296
|
+
|
297
|
+
it_should_behave_like 'a deprecated class (warnings enabled)'
|
298
|
+
|
299
|
+
it 'suggests the alternative class' do
|
300
|
+
expect(Kernel).to receive(:warn).with(/\bDeprecationsSamples::Sample1\b.*\binstead\b/)
|
301
|
+
sample.new
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
context 'when an optional comment is given' do
|
306
|
+
let(:sample){ DeprecationsSamples::AnonymousDefined::AnnoSample9 }
|
307
|
+
|
308
|
+
it_should_behave_like 'a deprecated class (warnings enabled)'
|
309
|
+
|
310
|
+
it 'informs about when it will become outdated' do
|
311
|
+
expect(Kernel).to receive(:warn).with(/outdated in 2.0.0/)
|
312
|
+
sample.new
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
281
317
|
context 'error cases' do
|
282
318
|
|
283
319
|
context 'when the method to mark as deprecated does not exist' do
|
@@ -341,4 +377,4 @@ RSpec.describe Deprecations do
|
|
341
377
|
end
|
342
378
|
end
|
343
379
|
end
|
344
|
-
end
|
380
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deprecations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Blumtritt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -141,3 +141,4 @@ signing_key:
|
|
141
141
|
specification_version: 4
|
142
142
|
summary: Deprecation support for your project.
|
143
143
|
test_files: []
|
144
|
+
has_rdoc: false
|