зеркало из https://github.com/github/ruby.git
[rubygems/rubygems] Restore and deprecate old deprecate method
https://github.com/rubygems/rubygems/commit/024267fa60
This commit is contained in:
Родитель
7db538a7c9
Коммит
0e85a39dc7
|
@ -45,6 +45,31 @@ module Gem::Deprecate
|
|||
Gem::Version.new(Gem.rubygems_version.segments.first).bump
|
||||
end
|
||||
|
||||
##
|
||||
# Simple deprecation method that deprecates +name+ by wrapping it up
|
||||
# in a dummy method. It warns on each call to the dummy method
|
||||
# telling the user of +repl+ (unless +repl+ is :none) and the
|
||||
# year/month that it is planned to go away.
|
||||
|
||||
def deprecate(name, repl, year, month)
|
||||
class_eval do
|
||||
old = "_deprecated_#{name}"
|
||||
alias_method old, name
|
||||
define_method name do |*args, &block|
|
||||
klass = self.kind_of? Module
|
||||
target = klass ? "#{self}." : "#{self.class}#"
|
||||
msg = [ "NOTE: #{target}#{name} is deprecated",
|
||||
repl == :none ? " with no replacement" : "; use #{repl} instead",
|
||||
". It will be removed on or after %4d-%02d-01." % [year, month],
|
||||
"\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
|
||||
]
|
||||
warn "Gem::Deprecate#deprecate has been deprecated with no replacement and it will be removed in Rubygems 4.\n" unless Gem::Deprecate.skip
|
||||
warn "#{msg.join}." unless Gem::Deprecate.skip
|
||||
send old, *args, &block
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Simple deprecation method that deprecates +name+ by wrapping it up
|
||||
# in a dummy method. It warns on each call to the dummy method
|
||||
|
|
|
@ -54,6 +54,20 @@ class TestDeprecate < Gem::TestCase
|
|||
|
||||
end
|
||||
|
||||
class OtherThing
|
||||
|
||||
extend Gem::Deprecate
|
||||
attr_accessor :message
|
||||
def foo
|
||||
@message = "foo"
|
||||
end
|
||||
def bar
|
||||
@message = "bar"
|
||||
end
|
||||
deprecate :foo, :bar, 2099, 3
|
||||
|
||||
end
|
||||
|
||||
def test_deprecated_method_calls_the_old_method
|
||||
capture_io do
|
||||
thing = Thing.new
|
||||
|
@ -91,4 +105,16 @@ class TestDeprecate < Gem::TestCase
|
|||
Gem::Commands.send(:remove_const, :FooCommand)
|
||||
end
|
||||
|
||||
def test_deprecated_method_outputs_a_warning_old_way
|
||||
out, err = capture_io do
|
||||
thing = OtherThing.new
|
||||
thing.foo
|
||||
end
|
||||
|
||||
assert_equal "", out
|
||||
assert_match(/Gem::Deprecate#deprecate has been deprecated with no replacement and it will be removed in Rubygems 4\./, err)
|
||||
assert_match(/Thing#foo is deprecated; use bar instead\./, err)
|
||||
assert_match(/on or after 2099-03-01/, err)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче