Rubyによる動的ライブラリの読み込み処理をちょっとだけ考えてみる、、、
動的にディレクトリ配下のファイルを include するのはちょいとめんどくさいなぁ、、、っと
微妙なコーディングだけど、、、ちょっとだけ考えてみる。
ってことで、ディレクトリ構成を以下のようにしてみる。(クラス名とかは適当、、、)
lib/.
lib/..
lib/module/hoge1.rb
lib/hoge/huga1.rb
lib/lib_load.rb
exec.rb
そして、コードはこんな感じにしてみた。
Class LibLoad lib_files = ->(dir = "#{File.expand_path(File.dirname(__FILE__))}"){ files = Array.new Dir.entries(dir).each do |entry| next if /^\.{1,2}$/ =~ entry path = "#{dir}/#{entry}" if FileTest.directory?(path) files.concat(lib_files.call(path)) else files << path end end files } lib_files.call.each do |file| require file next if file.index('/module/').nil? include Object.const_get(File.basename(file, '.*').capitalize) end def initialize end end
確かに読み込んでやりたいことができた。
が、そもそも lambda で書く必要ないよな、、、そもそも定義位置依存するのをどうにかしたい。
こういう時って、プロトタイプもどきを構築したり、method_missing使うほうがいいのだろうか。