Fix mentioned users on diff notes
Summary
DiffNote
, and LegacyDiffNote
returns empty array for mentionable_attrs
, because mentionable_attrs
is not inheritable by subclasses. The problem can be illustrated with this small sample:
module Mentionable
extend ActiveSupport::Concern
module ClassMethods
def attr_mentionable(attr)
mentionable_attrs << [attr.to_s]
end
def mentionable_attrs
@mentionable_attrs ||= []
end
end
end
class A
include Mentionable
attr_mentionable :foo
end
class B < A
end
A.mentionable_attrs
=> [["foo", {}]]
B.mentionable_attrs
=> []
Possible solution using cattr_accessor
:
module Mentionable
extend ActiveSupport::Concern
module ClassMethods
def attr_mentionable(attr)
mentionable_attrs << [attr.to_s]
end
end
included do
cattr_accessor :mentionable_attrs, instance_accessor: false do
[]
end
end
end
class A
include Mentionable
attr_mentionable :foo
end
class B < A
end
A.mentionable_attrs
=> [["foo"]]
B.mentionable_attrs
=> [["foo"]]
B.mentionable_attrs < [:bar]
=> [["foo"], ["bar"]]
A.mentionable_attrs
=> [["foo"], ["bar"]]
mentionable_attrs
is inheritable by subclasses. If a subclass changes the value then that would also change the value for parent class. Similarly if parent class changes the value then that would change the value of subclasses too.
What are the relevant issue numbers?
Fixes #19807 (closed)
Fixes #18022 (closed)
/cc @stanhu @DouweM @rspeicher