New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove Active Support deprecations #27035

Merged
merged 18 commits into from Nov 14, 2016
Jump to file or symbol
Failed to load files and symbols.
+4 −263
Diff settings

Always

Just for now

Viewing a subset of changes. View all

Remove deprecated method alias_method_chain

  • Loading branch information...
pixeltrix committed Nov 14, 2016
commit 7c848e6dd493ff236d33a0410a92f4c3e5cc3c7f
@@ -1,3 +1,7 @@
* Remove deprecated method `alias_method_chain`
*Andrew White*
* Remove deprecated constant `MissingSourceFile`
*Andrew White*
@@ -1,52 +1,4 @@
class Module
# NOTE: This method is deprecated. Please use <tt>Module#prepend</tt> that
# comes with Ruby 2.0 or newer instead.
#
# Encapsulates the common pattern of:
#
# alias_method :foo_without_feature, :foo
# alias_method :foo, :foo_with_feature
#
# With this, you simply do:
#
# alias_method_chain :foo, :feature
#
# And both aliases are set up for you.
#
# Query and bang methods (foo?, foo!) keep the same punctuation:
#
# alias_method_chain :foo?, :feature
#
# is equivalent to
#
# alias_method :foo_without_feature?, :foo?
# alias_method :foo?, :foo_with_feature?
#
# so you can safely chain foo, foo?, foo! and/or foo= with the same feature.
def alias_method_chain(target, feature)
ActiveSupport::Deprecation.warn("alias_method_chain is deprecated. Please, use Module#prepend instead. From module, you can access the original method using super.")
# Strip out punctuation on predicates, bang or writer methods since
# e.g. target?_without_feature is not a valid method name.
aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ""), $1
yield(aliased_target, punctuation) if block_given?
with_method = "#{aliased_target}_with_#{feature}#{punctuation}"
without_method = "#{aliased_target}_without_#{feature}#{punctuation}"
alias_method without_method, target
alias_method target, with_method
case
when public_method_defined?(without_method)
public target
when protected_method_defined?(without_method)
protected target
when private_method_defined?(without_method)
private target
end
end
# Allows you to make aliases for attributes, which includes
# getter, setter, and a predicate.
#
@@ -385,221 +385,6 @@ def test_parents
assert_equal [Yz::Zy, Yz, Object], Yz::Zy::Cd.parents
assert_equal [Yz, Object], Yz::Zy.parents
end
end
module BarMethodAliaser
def self.included(foo_class)
foo_class.class_eval do
include BarMethods
alias_method_chain :bar, :baz
end
end
end
module BarMethods
def bar_with_baz
bar_without_baz << "_with_baz"
end
def quux_with_baz!
quux_without_baz! << "_with_baz"
end
def quux_with_baz?
false
end
def quux_with_baz=(v)
send(:quux_without_baz=, v) << "_with_baz"
end
def duck_with_orange
duck_without_orange << "_with_orange"
end
end
class MethodAliasingTest < ActiveSupport::TestCase
def setup
Object.const_set :FooClassWithBarMethod, Class.new { def bar() "bar" end }
@instance = FooClassWithBarMethod.new
end
def teardown
Object.instance_eval { remove_const :FooClassWithBarMethod }
end
def test_alias_method_chain_deprecated
assert_deprecated(/alias_method_chain/) do
Module.new do
def base
end
def base_with_deprecated
end
alias_method_chain :base, :deprecated
end
end
end
def test_alias_method_chain
assert_deprecated(/alias_method_chain/) do
assert @instance.respond_to?(:bar)
feature_aliases = [:bar_with_baz, :bar_without_baz]
feature_aliases.each do |method|
assert !@instance.respond_to?(method)
end
assert_equal "bar", @instance.bar
FooClassWithBarMethod.class_eval { include BarMethodAliaser }
feature_aliases.each do |method|
assert_respond_to @instance, method
end
assert_equal "bar_with_baz", @instance.bar
assert_equal "bar", @instance.bar_without_baz
end
end
def test_alias_method_chain_with_punctuation_method
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def quux!; "quux" end
end
assert !@instance.respond_to?(:quux_with_baz!)
FooClassWithBarMethod.class_eval do
include BarMethodAliaser
alias_method_chain :quux!, :baz
end
assert_respond_to @instance, :quux_with_baz!
assert_equal "quux_with_baz", @instance.quux!
assert_equal "quux", @instance.quux_without_baz!
end
end
def test_alias_method_chain_with_same_names_between_predicates_and_bang_methods
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def quux!; "quux!" end
def quux?; true end
def quux=(v); "quux=" end
end
assert !@instance.respond_to?(:quux_with_baz!)
assert !@instance.respond_to?(:quux_with_baz?)
assert !@instance.respond_to?(:quux_with_baz=)
FooClassWithBarMethod.class_eval { include BarMethodAliaser }
assert_respond_to @instance, :quux_with_baz!
assert_respond_to @instance, :quux_with_baz?
assert_respond_to @instance, :quux_with_baz=
FooClassWithBarMethod.alias_method_chain :quux!, :baz
assert_equal "quux!_with_baz", @instance.quux!
assert_equal "quux!", @instance.quux_without_baz!
FooClassWithBarMethod.alias_method_chain :quux?, :baz
assert_equal false, @instance.quux?
assert_equal true, @instance.quux_without_baz?
FooClassWithBarMethod.alias_method_chain :quux=, :baz
assert_equal "quux=_with_baz", @instance.send(:quux=, 1234)
assert_equal "quux=", @instance.send(:quux_without_baz=, 1234)
end
end
def test_alias_method_chain_with_feature_punctuation
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def quux; "quux" end
def quux?; "quux?" end
include BarMethodAliaser
alias_method_chain :quux, :baz!
end
assert_nothing_raised do
assert_equal "quux_with_baz", @instance.quux_with_baz!
end
assert_raise(NameError) do
FooClassWithBarMethod.alias_method_chain :quux?, :baz!
end
end
end
def test_alias_method_chain_yields_target_and_punctuation
assert_deprecated(/alias_method_chain/) do
args = nil
FooClassWithBarMethod.class_eval do
def quux?; end
include BarMethods
FooClassWithBarMethod.alias_method_chain :quux?, :baz do |target, punctuation|
args = [target, punctuation]
end
end
assert_not_nil args
assert_equal "quux", args[0]
assert_equal "?", args[1]
end
end
def test_alias_method_chain_preserves_private_method_status
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def duck; "duck" end
include BarMethodAliaser
private :duck
alias_method_chain :duck, :orange
end
assert_raise NoMethodError do
@instance.duck
end
assert_equal "duck_with_orange", @instance.instance_eval { duck }
assert FooClassWithBarMethod.private_method_defined?(:duck)
end
end
def test_alias_method_chain_preserves_protected_method_status
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def duck; "duck" end
include BarMethodAliaser
protected :duck
alias_method_chain :duck, :orange
end
assert_raise NoMethodError do
@instance.duck
end
assert_equal "duck_with_orange", @instance.instance_eval { duck }
assert FooClassWithBarMethod.protected_method_defined?(:duck)
end
end
def test_alias_method_chain_preserves_public_method_status
assert_deprecated(/alias_method_chain/) do
FooClassWithBarMethod.class_eval do
def duck; "duck" end
include BarMethodAliaser
public :duck
alias_method_chain :duck, :orange
end
assert_equal "duck_with_orange", @instance.duck
assert FooClassWithBarMethod.public_method_defined?(:duck)
end
end
def test_delegate_with_case
event = Event.new(Tester.new)
ProTip! Use n and p to navigate between commits in a pull request.