2016-09-17 5 views
0

私は非レールのrubyプロジェクトで作業しています。 app.rbで祖先に基づいてすべてのファイルが必要です

--Root 
    -Base 
    -xyz_base.rb 
    -abc_base.rb 
    -Entities 
    -A 
    -base 
     -a_base.rb 
    -a.rb 
    -B 
    -b.rb 
    -C 
    -c.rb 
    -app.rb 

私は以下のようなものがあります:プロジェクトの構造は、以下のようなものであるので、

Dir['./**/'].each {|dir| $:.push dir} 
Dir["./**/*.rb"].each {|rb| require rb} 

を、すべてのファイルは、プロジェクト(abc_base.rba.rb、...)に含まれています。

問題は、別のものの前にどれが必要なのかわかりません。たとえば、a_base.rbは、a.rbより前に必要です。しかし、実際には、a.rbが必要で、a_base.rbにはuninitialized constant Entities::A::Base (NameError)またはcannot load such fileが得られます。

私はautoloadrequire_allの宝石を調べました。また、別の解決策は、必要なファイルのみを必要とするために各ファイルにrequireを入れることです。しかし、ファイルが大きすぎます。

ありますか?

+0

この 'require'プロジェクトのアルゴリズムとは何ですか?サブディレクトリの内容は、ディレクトリの実際の内容の前に必要ですか? – IvRRimUm

+1

[Bundler](http://bundler.io/)をご覧ください。 –

答えて

0

あなたがあなたのプロジェクト全体で、この命名規則を使用してすることがあります知っている場合は - とあなたの提案されたソリューションを使用する必要はありません(明示的にAからa_base必要) - あなたは次のような何かができる:

Dir.glob("**/[a-z].rb").each do |file| 
    m = /(.+)\.rb/.match(file) 
    require_relative "#{m[1]}_base.rb" # entities/a/a_base.rb 
    require_relative file 
end 
関連する問題