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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42b4cf87903a557ef44e7fa0f7d8e7cbda134c7f
4
- data.tar.gz: 23360fbe0f87964cde7e0987c7df5ae10c3cd172
3
+ metadata.gz: 78ed3cd91fd99c383cfcf80cf73f9e5757f0f007
4
+ data.tar.gz: bf79ec77bdff29dc0222a4b385efa37d7bc27fd5
5
5
  SHA512:
6
- metadata.gz: 64409aa1740a08d1cabe23694cfaf86ca95eb0348ca9f0ff90f5589dc9cbe771d5696f631f1dab038bf0b1c945f1c0524d2322dd086b8f9ab6801207178a49d4
7
- data.tar.gz: e2b7f0edbbbb9df6f32f10210b02c3cc2c8c3160b8831ba1f15c14a2874c70925b0797741d2597ff7a329fb66f5ef1ceeb4f091e98e6de15cb949efa6c51a275
6
+ metadata.gz: 600ef0c82127f3df1111751cad2a13fdd0aa4342051fa629f122f498dac8ee469182f1417474df5ff1b60db178276858e707a8becfb9f62449d75e05126f41fb
7
+ data.tar.gz: 17760c77380a0379c7e8cc523a1869bcf77164156fe4749d63ba3ed6afa674f1f0cf9bbed7f63f394e35b956e76dba51786f47d0e6d8fe84bdd4b5ac7aec51d0
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
+ ### deprecations 1.0.2
2
+ - support for late bound class names (like in `Foo = Class.new`)
3
+
1
4
  ### deprecations 1.0.0
2
5
  - initial release
@@ -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
- name,
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
- "#{name}##{method_name}",
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.name}##{name}" : singleton_class.send(:__decorated, name)
98
+ __method_scope(name) ? ->{"#{self}##{name}"} : singleton_class.send(:__decorated, name)
99
99
  end
100
100
  end
101
101
  end
@@ -1,3 +1,3 @@
1
1
  module Deprecations
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
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
@@ -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
- deprecated! Sample1, 'in 2.0.0'
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.1
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-07-31 00:00:00.000000000 Z
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