Module#include
находится под капотом, вызывая Module#append_features
.Это означает, что ничто не является общим, и это можно легко проверить (ActiveSupport::Concern
не имеет никакого отношения к коду, который вы проверяете.)
module SetPassword
attr_reader :password
def password=(new_password)
@password = new_password
puts <<~EOS
Setting password to: #{@password} (id: #{@password.__id__}).
Object: #{self.class.name} (#{self.__id__}).
Method: #{__callee__} on #{self.method(__callee__).__id__}.
EOS
end
end
class User
include SetPassword
end
u1 = User.new; u1.password = 'abcdef'
u2 = User.new; u2.password = '123456'
Приведенный выше код демонстрирует, что все(сам пароль, переменная экземпляра и даже сам метод) отличается:
▶ u1 = User.new; u1.password = 'abcdef'
#⇒ Setting password to: abcdef (id: 46968741459360).
# Object: User (46968741459420).
# Method: password= on 46968741459040.
▶ u2 = User.new; u2.password = '123456'
#⇒ Setting password to: 123456 (id: 46968734231740).
# Object: User (46968734232020).
# Method: password= on 46968734230640.