Skip to content

Commit 8abfcd7

Browse files
authored
Merge pull request rails#48913 from ipc103/fix-parent-deprecation-warning
Allow parent to define alias method override
2 parents 8eb051a + a88f47d commit 8abfcd7

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

activemodel/lib/active_model/attribute_methods.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ def attribute_method_affix(*affixes)
203203
# person.nickname_short? # => true
204204
def alias_attribute(new_name, old_name)
205205
self.attribute_aliases = attribute_aliases.merge(new_name.to_s => old_name.to_s)
206+
local_attribute_aliases[new_name.to_s] = old_name.to_s
206207
eagerly_generate_alias_attribute_methods(new_name, old_name)
207208
end
208209

@@ -361,6 +362,10 @@ def undefine_attribute_methods
361362
attribute_method_patterns_cache.clear
362363
end
363364

365+
def local_attribute_aliases # :nodoc:
366+
@local_attribute_aliases ||= {}
367+
end
368+
364369
private
365370
def inherited(base) # :nodoc:
366371
super

activerecord/lib/active_record/attribute_methods.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ def eagerly_generate_alias_attribute_methods(_new_name, _old_name) # :nodoc:
6565
end
6666

6767
def generate_alias_attributes # :nodoc:
68+
superclass.generate_alias_attributes unless base_class?
6869
return if @alias_attributes_mass_generated
6970

7071
generated_attribute_methods.synchronize do
7172
return if @alias_attributes_mass_generated
7273
ActiveSupport::CodeGenerator.batch(generated_attribute_methods, __FILE__, __LINE__) do |code_generator|
73-
attribute_aliases.each do |new_name, old_name|
74+
local_attribute_aliases.each do |new_name, old_name|
7475
generate_alias_attribute_methods(code_generator, new_name, old_name)
7576
end
7677
end

activerecord/test/cases/attribute_methods_test.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,6 +1225,9 @@ def subject_was
12251225
end
12261226
end
12271227

1228+
class ChildWithDeprecatedBehaviorResolved < ClassWithDeprecatedAliasAttributeBehaviorResolved
1229+
end
1230+
12281231
test "#alias_attribute with an overridden original method along with an overridden alias method doesn't issue a deprecation" do
12291232
obj = assert_not_deprecated(ActiveRecord.deprecator) do
12301233
ClassWithDeprecatedAliasAttributeBehaviorResolved.new
@@ -1234,6 +1237,15 @@ def subject_was
12341237
assert_equal("overridden_subject_was", obj.subject_was)
12351238
end
12361239

1240+
test "#alias_attribute with an overridden original method along with an overridden alias method in a parent class doesn't issue a deprecation" do
1241+
obj = assert_not_deprecated(ActiveRecord.deprecator) do
1242+
ChildWithDeprecatedBehaviorResolved.new
1243+
end
1244+
obj.title = "hey"
1245+
assert_equal("hey", obj.subject)
1246+
assert_equal("overridden_subject_was", obj.subject_was)
1247+
end
1248+
12371249
private
12381250
def new_topic_like_ar_class(&block)
12391251
klass = Class.new(ActiveRecord::Base) do

0 commit comments

Comments
 (0)