aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorRyuta Kamizono <kamipo@gmail.com>2019-04-19 23:13:19 +0900
committerGitHub <noreply@github.com>2019-04-19 23:13:19 +0900
commit75aeb3617153efbc2c6fd28d03f364f7c38a446a (patch)
tree431c28133a74d8c2172dcf54f9e7d380396ba804 /activesupport/lib
parentf656bb301a43fe441af0039e4fafe40a7faa62f8 (diff)
parent8afdfdcfc92720162920aa6b59954ff4a1bfe831 (diff)
downloadrails-75aeb3617153efbc2c6fd28d03f364f7c38a446a.tar.gz
rails-75aeb3617153efbc2c6fd28d03f364f7c38a446a.tar.bz2
rails-75aeb3617153efbc2c6fd28d03f364f7c38a446a.zip
Merge pull request #36037 from kamipo/deprecate_methods
Refactor `ActiveSupport::Deprecation.deprecate_methods` not to expose internal methods
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/deprecation/method_wrappers.rb25
1 files changed, 7 insertions, 18 deletions
diff --git a/activesupport/lib/active_support/deprecation/method_wrappers.rb b/activesupport/lib/active_support/deprecation/method_wrappers.rb
index d99571790f..7c0a54a1d0 100644
--- a/activesupport/lib/active_support/deprecation/method_wrappers.rb
+++ b/activesupport/lib/active_support/deprecation/method_wrappers.rb
@@ -1,6 +1,7 @@
# frozen_string_literal: true
require "active_support/core_ext/array/extract_options"
+require "active_support/core_ext/module/redefine_method"
module ActiveSupport
class Deprecation
@@ -52,29 +53,17 @@ module ActiveSupport
options = method_names.extract_options!
deprecator = options.delete(:deprecator) || self
method_names += options.keys
- mod = Module.new
+ mod = nil
method_names.each do |method_name|
if target_module.method_defined?(method_name) || target_module.private_method_defined?(method_name)
- aliased_method, punctuation = method_name.to_s.sub(/([?!=])$/, ""), $1
- with_method = "#{aliased_method}_with_deprecation#{punctuation}"
- without_method = "#{aliased_method}_without_deprecation#{punctuation}"
-
- target_module.define_method(with_method) do |*args, &block|
+ method = target_module.instance_method(method_name)
+ target_module.redefine_method(method_name) do |*args, &block|
deprecator.deprecation_warning(method_name, options[method_name])
- send(without_method, *args, &block)
- end
-
- target_module.alias_method(without_method, method_name)
- target_module.alias_method(method_name, with_method)
-
- case
- when target_module.protected_method_defined?(without_method)
- target_module.send(:protected, method_name)
- when target_module.private_method_defined?(without_method)
- target_module.send(:private, method_name)
+ method.bind(self).call(*args, &block)
end
else
+ mod ||= Module.new
mod.define_method(method_name) do |*args, &block|
deprecator.deprecation_warning(method_name, options[method_name])
super(*args, &block)
@@ -82,7 +71,7 @@ module ActiveSupport
end
end
- target_module.prepend(mod) unless mod.instance_methods(false).empty?
+ target_module.prepend(mod) if mod
end
end
end