deprecations 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b74900a310d72869dfae2f9b091e9a48da08b5fa
4
+ data.tar.gz: fc6eda630d25dbcde15725ace76a8a3d0a539c83
5
+ SHA512:
6
+ metadata.gz: f52526544a564d6be8c33d69f2140131e914adc480a0644578f8655c09b8201e4cdcf1dd43d30cb74aa5f311cce9fb52f1db349bec6874886e305fab1d60ff74
7
+ data.tar.gz: 0a7e22ebf74c2c8264f58e12abaa551b8c68d6b6921d03efc643e74dbf77029e27f9dbb28809ce6038bda2c40e6bb1bf1e3a96352b665bc306140307f056378c
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ tmp/
2
+ local/
3
+ pkg/
4
+ coverage/
5
+ Gemfile.lock
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ### deprecations 1.0.0
2
+ - initial release
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,12 @@
1
+ guard(
2
+ :rspec,
3
+ cmd: 'bundle exec rspec -c',
4
+ spec_paths: ['spec'],
5
+ failed_mode: :focus,
6
+ all_on_start: true,
7
+ all_after_pass: true,
8
+ ) do
9
+ watch(%r[^spec/.+_spec.rb$])
10
+ watch(%r[^lib/.+.rb$]){ 'spec' }
11
+ watch(%r[^spec/spec_helper]){ 'spec' }
12
+ end
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Deprecations
2
+
3
+ This gem provides transparent declaration of deprecated methods and classes.
4
+
5
+ ## Installation
6
+
7
+ The simplest way to install Deprecations gem is to use [Bundler](http://gembundler.com/).
8
+
9
+ Add Deprecations to your `Gemfile`:
10
+
11
+ ```ruby
12
+ gem 'deprecations'
13
+ ```
14
+
15
+ and install it by running Bundler:
16
+
17
+ ```bash
18
+ $ bundle
19
+ ```
20
+
21
+ To install the gem globally use:
22
+
23
+ ```bash
24
+ $ gem install deprecations
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ After adding the gem to your project
30
+
31
+ ```ruby
32
+ require 'deprecations'
33
+ ```
34
+
35
+ you can specify which methods and classes are deprecated. To mark a method as deprecated is quite easy:
36
+
37
+ ```ruby
38
+ class MySample
39
+
40
+ def clear
41
+ # something here
42
+ end
43
+
44
+ def clean
45
+ clear
46
+ end
47
+ deprecate :clean, :clear, 'next version'
48
+
49
+ end
50
+ ```
51
+
52
+ Whenever the method `MySample#clean` is called this warning appears:
53
+
54
+ > [DEPRECATION] `MySample#clean` is deprecated and will be outdated next version. Please use `MySample#clear` instead.
55
+
56
+ You can change this behavior by configure the Deprecations gem:
57
+
58
+ ```ruby
59
+ Deprecations.configure do |config|
60
+ config.behavior = :raise
61
+ end
62
+ ```
63
+
64
+ Valid behaviors are:
65
+
66
+ - `:raise` will raise an `DeprecationException` when a deprecated method is called
67
+ - `:silence` will do nothing
68
+ - `:warn` will print a warning (default behavior)
69
+
70
+ Marking a complete class as deprecated will present the deprecation warning (or exception) whenever this class is instantiated:
71
+
72
+ ```ruby
73
+ class MySample
74
+ deprecated!
75
+
76
+ # some more code here...
77
+ end
78
+ ```
79
+
80
+ Please have a look at the [specs](https://github.com/mblumtritt/deprecations/blob/master/spec/deprecations_spec.rb) for detailed information and more samples.
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ ENV.key?('NO_RUBYGEMS') or require('rubygems')
2
+ require 'bundler/gem_tasks'
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:test) do |t|
6
+ t.pattern = ['spec/*_spec.rb', 'spec/**/*/*_spec.rb']
7
+ t.rspec_opts = '-w'
8
+ t.verbose = Rake.application.options.trace
9
+ end
10
+
11
+ task default: :test
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../lib/deprecations/version', __FILE__)
2
+
3
+ GemSpec= Gem::Specification.new do |spec|
4
+ spec.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
5
+ spec.platform = Gem::Platform::RUBY
6
+ spec.required_ruby_version = '>= 2.0.0'
7
+ spec.name = spec.rubyforge_project = 'deprecations'
8
+ spec.version = Deprecations::VERSION
9
+ spec.authors = ['Mike Blumtritt']
10
+ spec.email = %w[mike.blumtritt@injixo.com]
11
+ spec.summary = 'Deprecation support for your project.'
12
+ spec.description = 'This gem provides transparent declaration of deprecated methods and classes.'
13
+ spec.homepage = 'https://github.com/mblumtritt/deprecations'
14
+ spec.date = Time.now.strftime('%Y-%m-%d')
15
+ spec.require_paths = %w[lib]
16
+ spec.files = %x[git ls-files].split($/)
17
+ spec.test_files = spec.files.grep(%r[^test/])
18
+ spec.extra_rdoc_files = %w[README.md]
19
+ spec.has_rdoc = false # TODO!
20
+ spec.add_development_dependency 'rake'
21
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
22
+ spec.add_development_dependency 'guard'
23
+ spec.add_development_dependency 'guard-rspec'
24
+ if /darwin|mac os/i =~ RUBY_PLATFORM
25
+ spec.add_development_dependency 'rb-fsevent'
26
+ spec.add_development_dependency 'terminal-notifier-guard'
27
+ end
28
+ end
@@ -0,0 +1,35 @@
1
+
2
+ module Deprecations
3
+ class << self
4
+
5
+ def configure
6
+ yield(@@cfg = Cfg.new)
7
+ end
8
+
9
+ def configuration
10
+ @@cfg
11
+ end
12
+
13
+ BEHAVIORS = [:warn, :raise, :silence].freeze
14
+
15
+ private
16
+
17
+ class Cfg < BasicObject
18
+ attr_reader :behavior
19
+
20
+ def initialize
21
+ @behavior = :warn
22
+ end
23
+
24
+ def behavior=(how)
25
+ BEHAVIORS.include?(how) and return @behavior = how
26
+ ::Kernel.raise(
27
+ ::ArgumentError, "invalid parameter `#{how}` - have to be #{BEHAVIORS.map(&:inspect).join(' | ')}"
28
+ )
29
+ end
30
+
31
+ end
32
+
33
+ @@cfg = Cfg.new
34
+ end
35
+ end
@@ -0,0 +1,102 @@
1
+
2
+ module Deprecations
3
+ class << self
4
+ private
5
+ def infect(mod)
6
+ mod.extend(ClassMethods)
7
+ mod.send(:include, InstanceMethods)
8
+ end
9
+
10
+ module Helper
11
+ private
12
+
13
+ def __method_scope(method_name)
14
+ private_method_defined?(method_name) and return :private
15
+ protected_method_defined?(method_name) and return :protected
16
+ public_method_defined?(method_name) and return :public
17
+ nil
18
+ end
19
+
20
+ def __define_deprecated(opts)
21
+ alias_name = "deprecated_#{opts[:name]}"
22
+ private_method_defined?(alias_name) and raise(
23
+ ScriptError, "method is already deprecated - #{opts[:decorated]}"
24
+ )
25
+ alias_method(alias_name, opts[:name])
26
+ private(alias_name)
27
+ define_method(opts[:name]) do |*a, &b|
28
+ Deprecations.call(opts[:decorated], opts[:alternative], opts[:outdated])
29
+ send(alias_name, *a, &b)
30
+ end
31
+ send(opts[:scope], opts[:name])
32
+ opts[:name]
33
+ end
34
+ end
35
+
36
+ module ClassMethods
37
+ include Helper
38
+ private
39
+
40
+ def deprecated(method_name, alternative_method_name = nil, outdated = nil)
41
+ method_scope = __method_scope(method_name) or __not_found!(method_name)
42
+ __define_deprecated(
43
+ name: method_name,
44
+ scope: method_scope,
45
+ decorated: "#{self.inspect[8..-2]}.#{method_name}",
46
+ alternative: __decorated(alternative_method_name),
47
+ outdated: outdated
48
+ )
49
+ ensure
50
+ $@ and $@.delete_if{ |s| s.index(__FILE__) }
51
+ end
52
+
53
+ def __decorated(name)
54
+ name or return nil
55
+ __method_scope(name) and return "#{self.inspect[8..-2]}.#{name}"
56
+ Symbol === name and __not_found!(name)
57
+ name
58
+ end
59
+
60
+ def __not_found!(name)
61
+ raise(NameError, "undefined method `#{name}` for class `#{self.inspect[8..-2]}`")
62
+ end
63
+ end
64
+
65
+ module InstanceMethods
66
+ include Helper
67
+ private
68
+
69
+ def deprecated!(alternative = nil, outdated = nil)
70
+ singleton_class.send(
71
+ :__define_deprecated,
72
+ name: :new,
73
+ scope: :public,
74
+ decorated: name,
75
+ alternative: alternative ? "#{alternative}" : nil,
76
+ outdated: outdated
77
+ )
78
+ end
79
+
80
+ def deprecated(method_name, alternative_method_name = nil, outdated = nil)
81
+ method_scope = __method_scope(method_name) and return __define_deprecated(
82
+ name: method_name,
83
+ scope: method_scope,
84
+ decorated: "#{name}##{method_name}",
85
+ alternative: __decorated(alternative_method_name),
86
+ outdated: outdated
87
+ )
88
+ singleton_class.send(:deprecated, method_name, alternative_method_name, outdated)
89
+ ensure
90
+ $@ and $@.delete_if{ |s| s.index(__FILE__) }
91
+ end
92
+
93
+ def __decorated(name)
94
+ name or return nil
95
+ __method_scope(name) ? "#{self.name}##{name}" : singleton_class.send(:__decorated, name)
96
+ end
97
+ end
98
+ end
99
+
100
+ infect(Module)
101
+ TOPLEVEL_BINDING.eval('DeprecationError = Class.new(ScriptError)')
102
+ end
@@ -0,0 +1,3 @@
1
+ module Deprecations
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,38 @@
1
+
2
+ module Deprecations
3
+ autoload(:VERSION, "#{__FILE__[/.*(?=\..+$)/]}/version")
4
+ require_relative 'deprecations/configuration'
5
+ require_relative 'deprecations/extension'
6
+
7
+ class << self
8
+
9
+ def call(subject, alternative, outdated)
10
+ case configuration.behavior
11
+ when :warn
12
+ warn(subject, alternative, outdated)
13
+ when :raise
14
+ throw!(subject, alternative)
15
+ end
16
+ self
17
+ end
18
+
19
+ private
20
+
21
+ def throw!(subject, alternative)
22
+ msg = "`#{subject}` is deprecated"
23
+ alternative and msg << " - use #{alternative} instead"
24
+ ex = DeprecationError.new(msg)
25
+ ex.set_backtrace(caller(3))
26
+ raise(ex)
27
+ end
28
+
29
+ def warn(subject, alternative, outdated)
30
+ location = ::Kernel.caller_locations(3,1).last and location = "#{location.path}:#{location.lineno}: "
31
+ msg = "#{location}[DEPRECATION] `#{subject}` is deprecated"
32
+ msg << (outdated ? " and will be outdated #{outdated}." : '.')
33
+ alternative and msg << " Please use `#{alternative}` instead."
34
+ ::Kernel.warn(msg)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'Deprecations::Configuration' do
4
+ it 'is possible to configure the module' do
5
+ Deprecations.configure do |config|
6
+ config.behavior = :silence
7
+ end
8
+ expect(Deprecations.configuration.behavior).to be :silence
9
+ end
10
+
11
+ context 'when invalid arguments are given' do
12
+ it 'raises an error' do
13
+ expect do
14
+ Deprecations.configure do |config|
15
+ config.behavior = :invalid_value
16
+ end
17
+ end.to raise_error(ArgumentError, /invalid_value/)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Deprecations::VERSION do
4
+ it 'has format <major>.<minor>.<build>' do
5
+ expect(subject).to match(/^\d{1,2}\.\d{1,2}\.\d{1,3}/)
6
+ end
7
+ end
@@ -0,0 +1,344 @@
1
+ require 'spec_helper'
2
+
3
+ module DeprecationsSamples # samples how to use
4
+
5
+ # mixin with some methods for demonstration
6
+ module MethodSamples
7
+ def foo(*parameters)
8
+ block_given? ? yield(parameters) : {foo: parameters}
9
+ end
10
+
11
+ def alt
12
+ :nop
13
+ end
14
+ end
15
+
16
+ # mixin with initializer method for demonstration
17
+ module InitializerSample
18
+ attr_reader :parameters
19
+ def initialize(*parameters)
20
+ @parameters = block_given? ? yield(parameters) : {foo: parameters}
21
+ end
22
+ end
23
+
24
+ # here we go:
25
+
26
+ # method Sample1#foo is deprecated
27
+ class Sample1
28
+ include MethodSamples
29
+ deprecated :foo
30
+ end
31
+
32
+ # method Sample2#foo is deprecated, Sample2#alt should be used
33
+ class Sample2
34
+ include MethodSamples
35
+ deprecated :foo, :alt
36
+ end
37
+
38
+ # method Sample3#foo is deprecated and will be outdated in next version, Sample3#alt should be used
39
+ class Sample3
40
+ include MethodSamples
41
+ deprecated :foo, :alt, 'next version'
42
+ end
43
+
44
+ # class method Sample4::foo is deprecated
45
+ class Sample4
46
+ extend MethodSamples
47
+ deprecated :foo
48
+ end
49
+
50
+ # class method Sample5::foo is deprecated, Sample5::alt should be used
51
+ class Sample5
52
+ extend MethodSamples
53
+ deprecated :foo, :alt
54
+ end
55
+
56
+ # class method Sample6::foo is deprecated and will be outdated in next version, Sample6::alt should be used
57
+ class Sample6
58
+ extend MethodSamples
59
+ deprecated :foo, :alt, 'next version'
60
+ end
61
+
62
+ # class Sample7 is deprecated
63
+ class Sample7
64
+ include InitializerSample
65
+ deprecated!
66
+ end
67
+
68
+ # class Sample8 is deprecated, class Sample1 should be used
69
+ class Sample8
70
+ include InitializerSample
71
+ deprecated! Sample1
72
+ end
73
+
74
+ # class Sample9 is deprecated and will be outdated in version 2.0.0, class Sample1 should be used
75
+ class Sample9
76
+ include InitializerSample
77
+ deprecated! Sample1, 'in 2.0.0'
78
+ end
79
+
80
+ end
81
+
82
+ RSpec.shared_examples_for 'a transparent deprecated method' do
83
+ it 'forwards all parameter and returns the original method`s result' do
84
+ allow(Kernel).to receive(:warn)
85
+ expect(sample.foo(:arg1, :arg2, 42)).to eq(foo: [:arg1, :arg2, 42])
86
+ end
87
+
88
+ it 'forwards a given Proc to the original method' do
89
+ allow(Kernel).to receive(:warn)
90
+ expect(sample.foo(:arg1, 'test', 42){ |p| {via_block: p} }).to eq(via_block: [:arg1, 'test', 42])
91
+ end
92
+ end
93
+
94
+ RSpec.shared_examples_for 'a deprecated method (warnings enabled)' do
95
+ it_should_behave_like 'a transparent deprecated method'
96
+
97
+ it 'warns about the deprecation' do
98
+ expect(Kernel).to receive(:warn).once.with(/\bDeprecationsSamples::Sample\d[\.#]foo\b.*\bdeprecated\b/)
99
+ sample.foo
100
+ end
101
+
102
+ it 'points to the calling line' do
103
+ expect(Kernel).to receive(:warn).with(/#{__FILE__}:#{__LINE__ + 1}/)
104
+ sample.foo
105
+ end
106
+
107
+ end
108
+
109
+ RSpec.shared_examples_for 'a deprecated method (should throw)' do
110
+ it 'raises an DeprecationError' do
111
+ expect{ sample.foo }.to raise_error(DeprecationError, /\bDeprecationsSamples::Sample\d[\.#]foo\b.*\bdeprecated\b/)
112
+ end
113
+
114
+ it 'has a helpful backtrace' do
115
+ backtrace = nil
116
+ begin
117
+ sample.foo
118
+ rescue DeprecationError => err
119
+ backtrace = err.backtrace
120
+ end
121
+ expect(backtrace.first).to match(/#{__FILE__}:#{__LINE__ - 4}/)
122
+ end
123
+ end
124
+
125
+ RSpec.shared_examples_for 'a transparent deprecated class' do
126
+ it 'calls the original initializer with all parameters' do
127
+ allow(Kernel).to receive(:warn)
128
+ instance = sample.new(:arg1, :arg2, 42)
129
+ expect(instance.parameters).to eq(foo: [:arg1, :arg2, 42])
130
+ end
131
+
132
+ it 'forwards a given Proc to the original initializer' do
133
+ allow(Kernel).to receive(:warn)
134
+ instance = sample.new(:arg1, 'test', 42){ |p| {via_block: p} }
135
+ expect(instance.parameters).to eq(via_block: [:arg1, 'test', 42])
136
+ end
137
+ end
138
+
139
+ RSpec.shared_examples_for 'a deprecated class (warnings enabled)' do
140
+ it_should_behave_like 'a transparent deprecated class'
141
+
142
+ it 'warns about the deprecation' do
143
+ expect(Kernel).to receive(:warn).once.with(/\b#{sample}\b.*\bdeprecated\b/)
144
+ sample.new
145
+ end
146
+
147
+ it 'points to the calling line' do
148
+ expect(Kernel).to receive(:warn).with(/#{__FILE__}:#{__LINE__ + 1}/)
149
+ sample.new
150
+ end
151
+ end
152
+
153
+ RSpec.shared_examples_for 'a deprecated class (should throw)' do
154
+ it 'raises an DeprecationError' do
155
+ expect{ sample.new }.to raise_error(DeprecationError, /\bDeprecationsSamples::Sample\d\b.*\bdeprecated\b/)
156
+ end
157
+
158
+ it 'has a helpful backtrace' do
159
+ backtrace = nil
160
+ begin
161
+ sample.new
162
+ rescue DeprecationError => err
163
+ backtrace = err.backtrace
164
+ end
165
+ expect(backtrace.first).to match(/#{__FILE__}:#{__LINE__ - 4}/)
166
+ end
167
+ end
168
+
169
+ RSpec.describe Deprecations do
170
+ context 'when configured as silent' do
171
+ before :all do
172
+ Deprecations.configuration.behavior = :silence
173
+ end
174
+
175
+ context 'when an instance method is marked as deprecated' do
176
+ let(:sample){ DeprecationsSamples::Sample1.new }
177
+ it_should_behave_like 'a transparent deprecated method'
178
+ end
179
+
180
+ context 'when a class method is marked as deprecated' do
181
+ let(:sample){ DeprecationsSamples::Sample4 }
182
+ it_should_behave_like 'a transparent deprecated method'
183
+ end
184
+
185
+ context 'when a class is marked as deprecated' do
186
+ let(:sample){ DeprecationsSamples::Sample7 }
187
+ it_should_behave_like 'a transparent deprecated class'
188
+ end
189
+ end
190
+
191
+ context 'when configured to warn' do
192
+ before :all do
193
+ Deprecations.configuration.behavior = :warn
194
+ end
195
+
196
+ context 'when an instance method is marked as deprecated' do
197
+ let(:sample){ DeprecationsSamples::Sample1.new }
198
+
199
+ it_should_behave_like 'a deprecated method (warnings enabled)'
200
+
201
+ context 'when an optional alternative method is given' do
202
+ let(:sample){ DeprecationsSamples::Sample2.new }
203
+
204
+ it_should_behave_like 'a deprecated method (warnings enabled)'
205
+
206
+ it 'suggests the alternative method' do
207
+ expect(Kernel).to receive(:warn).with(/DeprecationsSamples::Sample2#alt.*instead/)
208
+ sample.foo
209
+ end
210
+ end
211
+
212
+ context 'when an optional comment is given' do
213
+ let(:sample){ DeprecationsSamples::Sample3.new }
214
+
215
+ it_should_behave_like 'a deprecated method (warnings enabled)'
216
+
217
+ it 'informs about when it will become outdated' do
218
+ expect(Kernel).to receive(:warn).with(/outdated next version/)
219
+ sample.foo
220
+ end
221
+ end
222
+ end
223
+
224
+ context 'when a class method is marked as deprecated' do
225
+ let(:sample){ DeprecationsSamples::Sample4 }
226
+
227
+ it_should_behave_like 'a deprecated method (warnings enabled)'
228
+
229
+ context 'when an optional alternative method is given' do
230
+ let(:sample){ DeprecationsSamples::Sample5 }
231
+
232
+ it_should_behave_like 'a deprecated method (warnings enabled)'
233
+
234
+ it 'suggests the alternative method' do
235
+ expect(Kernel).to receive(:warn).with(/\bDeprecationsSamples::Sample5\.alt\b.*\binstead\b/)
236
+ sample.foo
237
+ end
238
+ end
239
+
240
+ context 'when an optional comment is given' do
241
+ let(:sample){ DeprecationsSamples::Sample6 }
242
+
243
+ it_should_behave_like 'a deprecated method (warnings enabled)'
244
+
245
+ it 'informs about when it will become outdated' do
246
+ expect(Kernel).to receive(:warn).with(/outdated next version/)
247
+ sample.foo
248
+ end
249
+ end
250
+
251
+ end
252
+
253
+ context 'when a class is marked as deprecated' do
254
+ let(:sample){ DeprecationsSamples::Sample7 }
255
+
256
+ it_should_behave_like 'a deprecated class (warnings enabled)'
257
+
258
+ context 'when an optional alternative class is given' do
259
+ let(:sample){ DeprecationsSamples::Sample8 }
260
+
261
+ it_should_behave_like 'a deprecated class (warnings enabled)'
262
+
263
+ it 'suggests the alternative class' do
264
+ expect(Kernel).to receive(:warn).with(/\bDeprecationsSamples::Sample1\b.*\binstead\b/)
265
+ sample.new
266
+ end
267
+ end
268
+
269
+ context 'when an optional comment is given' do
270
+ let(:sample){ DeprecationsSamples::Sample9 }
271
+
272
+ it_should_behave_like 'a deprecated class (warnings enabled)'
273
+
274
+ it 'informs about when it will become outdated' do
275
+ expect(Kernel).to receive(:warn).with(/outdated in 2.0.0/)
276
+ sample.new
277
+ end
278
+ end
279
+ end
280
+
281
+ context 'error cases' do
282
+
283
+ context 'when the method to mark as deprecated does not exist' do
284
+ it 'raises a NameError' do
285
+ expect do
286
+ Class.new do
287
+ deprecated :does_not_exist
288
+ end
289
+ end.to raise_error(NameError, /undefined method.*does_not_exist/)
290
+ end
291
+ end
292
+
293
+ context 'when the alternative method does not exist' do
294
+ it 'raises a NameError' do
295
+ expect do
296
+ Class.new do
297
+ def foo; end
298
+ deprecated :foo, :not_existing_alternative
299
+ end
300
+ end.to raise_error(NameError, /undefined method.*not_existing_alternative/)
301
+ end
302
+ end
303
+
304
+ end
305
+ end
306
+
307
+ context 'when configured to raise' do
308
+ before :all do
309
+ Deprecations.configuration.behavior = :raise
310
+ end
311
+
312
+ context 'when an instance method is marked as deprecated' do
313
+ let(:sample){ DeprecationsSamples::Sample1.new }
314
+
315
+ it_should_behave_like 'a deprecated method (should throw)'
316
+
317
+ context 'when an optional alternative method is given' do
318
+ let(:sample){ DeprecationsSamples::Sample2.new }
319
+
320
+ it_should_behave_like 'a deprecated method (should throw)'
321
+
322
+ it 'suggests the alternative method' do
323
+ expect{ sample.foo }.to raise_error(DeprecationError, /DeprecationsSamples::Sample2#alt.*instead/)
324
+ end
325
+ end
326
+ end
327
+
328
+ context 'when a class method is marked as deprecated' do
329
+ let(:sample){ DeprecationsSamples::Sample7 }
330
+
331
+ it_should_behave_like 'a deprecated class (should throw)'
332
+
333
+ context 'when an optional alternative class is given' do
334
+ let(:sample){ DeprecationsSamples::Sample8 }
335
+
336
+ it_should_behave_like 'a deprecated class (should throw)'
337
+
338
+ it 'suggests the alternative class' do
339
+ expect{ sample.new }.to raise_error(DeprecationError, /\bDeprecationsSamples::Sample8\b.*\binstead\b/)
340
+ end
341
+ end
342
+ end
343
+ end
344
+ end
@@ -0,0 +1,10 @@
1
+ # configure RSpec
2
+ RSpec.configure do |config|
3
+ config.raise_errors_for_deprecations!
4
+ config.disable_monkey_patching!
5
+ config.expose_dsl_globally = false
6
+ config.expect_with(:rspec){ |c| c.syntax = :expect }
7
+ config.mock_with(:rspec){ |c| c.syntax = :expect }
8
+ end
9
+
10
+ require 'deprecations'
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deprecations
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Mike Blumtritt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rb-fsevent
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: terminal-notifier-guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: This gem provides transparent declaration of deprecated methods and classes.
98
+ email:
99
+ - mike.blumtritt@injixo.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - README.md
104
+ files:
105
+ - ".gitignore"
106
+ - CHANGELOG.md
107
+ - Gemfile
108
+ - Guardfile
109
+ - README.md
110
+ - Rakefile
111
+ - deprecations.gemspec
112
+ - lib/deprecations.rb
113
+ - lib/deprecations/configuration.rb
114
+ - lib/deprecations/extension.rb
115
+ - lib/deprecations/version.rb
116
+ - spec/deprecations/configuration_spec.rb
117
+ - spec/deprecations/version_spec.rb
118
+ - spec/deprecations_spec.rb
119
+ - spec/spec_helper.rb
120
+ homepage: https://github.com/mblumtritt/deprecations
121
+ licenses: []
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.0.0
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 1.3.6
137
+ requirements: []
138
+ rubyforge_project: deprecations
139
+ rubygems_version: 2.2.2
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Deprecation support for your project.
143
+ test_files: []