2016-09-17 5 views
0

난 레일이없는 루비 프로젝트에서 작업하고 있습니다.조상을 기반으로 모든 파일 필요

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

그래서, 모든 파일은 프로젝트 (abc_base.rb, a.rb, ...)에 포함되어 있습니다 : 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 

나는 아래와 같은 것이있다 : 프로젝트 구조는 무엇인가 다음과 같다.

문제는, 어떤 것이 다른 것이 먼저 요구되어야 하는지를 모른다는 것입니다. 예를 들어 전에 a_base.rb을 입력해야합니다. 하지만 실제로는 a.rb이 필요하고 a_base.rb에는 uninitialized constant Entities::A::Base (NameError) 또는 cannot load such file이 있습니다.

나는 autoload, require_all 보석을 들여다 보았다. 또한 또 다른 솔루션은 필요한 파일 만 필요로하기 위해 각 파일에 require를 넣는 것입니다. 그러나 파일이 너무 많습니다.

어떤 아이디어가 있습니까? 당신은 당신이 프로젝트를 통해이 명명 규칙을 사용하게 될 알고있는 경우

+0

이'require' 프로젝트의 알고리즘은 무엇입니까? 서브 디렉토리 내용은 디렉토리의 실제 내용보다 먼저 필요합니까? – IvRRimUm

+1

[Bundler] (http://bundler.io/)를보십시오. –

답변

0

- 당신의 제안 솔루션을 사용하지 않으려는 (명시 적에서 a_base 필요를 A) - 당신은 다음과 같은 것을 할 수있는 :

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