たとえば、アプリケーションがあり、プラグインを介してインポートされるオブジェクトを作成したい場合、どのように記述すればよいでしょうか?
例をまとめました-意図したとおりに機能します。ただし、これが「従来の」方法であるかどうかはわかりません。
Rubyでこれを行うためのより効率的または適切な方法はありますか?
start.rb
require './cloud.rb'
dir = 'plugins'
$LOAD_PATH.unshift(dir)
Dir[File.join(dir, "*.rb")].each {|file| require File.basename(file) }
mycloud = CloudProvider.descendants.first.new
mycloud.say('testing')
クラウド.rb
class CloudProvider
def self.descendants
ObjectSpace.each_object(Class).select { |asdf| asdf < self }
end
end
plugins/aws.rb
# This one inside plugins/
class AWS < CloudProvider
def initialize
end
def say(val)
puts val
end
end