deprecations 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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