APIのネットワークを強化するライブラリを作成中です。そのライブラリの中心は現在、各APIクライアントがサブクラス化するClientクラスです。私はすべてのAPIを作成しているので、すべて同じように機能します(RESTful、access_tokenによる承認など)。
ただし、他のruby APIクライアントライブラリ(Twitterなど)とは異なり、クライアントクラスを直接インスタンス化しないでください。これは、ライブラリが単一のAPIに制限されていないためです。代わりに、各APIクライアントはClientクラスをサブクラス化します。私の質問は次のとおりです。
Rubyクラスがサブクラスを介してのみ初期化されることを要求する方法はありますか?
さらに、この質問を読んで、ここでのミックスインよりもクラスの方が優れていると判断しました。
コードが必要な人のために、ここに例があります:
class A
def initialize(options = {})
#what goes on in here doesn't really matter for the purpose of this question
#I just don't want it to be initialized directly
options.each do |k,v|
instance_variable_set("@#{k}",v) unless v.nil?
end
end
end
class B < A
attr_accessor :class_specific_opt
def initialize( options = {} )
@class_specific_opt = "val" unless options[:class_specific_opt].nil?
super(options)
end
end
何かご意見は?