Rubyでプラグイン機構を作る
rack/rack · GitHub のコード読んでてプラグイン(Rackの場合はバックエンドにどのサーバを使うか)の処理があったので取り出して書いてみた.
Rubyではクラスは定数なのでHandler
っていう名前空間の中の定数を探すだけでいい.
# sample1.rb module Handler class Base def call run end def run raise NotImplementedError end end class PlugA < Base def run p "called in A" end end end # sample2.rb module Handler class PlugB < Base def run p "called in B" end end end # runner.rb require_relative './sample1.rb' require_relative './sample2.rb' def run(class_name) klass = Handler.const_get(class_name) klass.new.call end ['PlugA', 'PlugB'].each do |e| run e end # => "called in A" # => "called in B"
githubの分割バージョンがある
感想
研究室にyogiboがあってそれに乗っかりながらだらだら読んでて、夏休みの朝に再放送のアニメ見てる感じだった