有没有办法在Ruby中强制实现接口方法?

时间:2017-03-04 14:19:45

标签: java ruby-on-rails ruby interface

我目前正在开发一个中央身份验证API(在ruby on rails上),它将根据用户的电子邮件地址域与许多其他提供商进行身份验证。

如果我使用java,这将是接口的经典用例。鉴于我正在使用Ruby,我仍然希望使用接口构造,但不确定如何强制实现接口方法。

这个界面的意图是至少有一个authenticated?方法。

示例实现。它对本地数据库中的用户进行身份验证。

# internal_user.rb
class InternalUser < User
  def authenticated?(email, password)
    user = User.find_for_database_authentication(email: email)
    user && user.valid_password?(password) && !user.confirmed_at.nil?
  end
end

因此,当我向我的API添加更多提供程序支持时(即实现此接口的更多类),我如何确保这些新类将实现此接口,换句话说,确保authenticated?方法已实施?

1 个答案:

答案 0 :(得分:3)

Ruby没有任何类似于Java的界面。使用duck-typing,每个班级都可以决定是否应答方法调用。

如果要显示应该在子类中实现方法,可以在父方法中引发异常:

msg.payload