2012-01-19 3 views
0

디렉토리 구조를 탐색하여 동적으로 코드를로드하고 내가 찾은 모듈을 동적으로로드하려고합니다.모듈을 중첩 된 디렉토리에 동적으로 포함하려면 어떻게해야합니까?

그렇게하기위한 목적은 일련의 유효성 검사를 실행하는 것입니다. 최상위 유효성 검사가 실패하면 모든 자식 유효성 검사가 실행되지 않습니다.

내 생각에 컨트롤러 객체가 디렉토리를 스캔하고 모듈 계층 구조를 구축 한 다음 높은 수준의 유효성 검사의 성공/실패를 기반으로 트리의 특정 부분을 트래버스할지 여부를 결정할 수 있다고 생각했습니다. .

예를 들어 정규식에 대해 실행하고 싶은 일련의 유효성 검사가있을 수 있지만 정규식이 없거나 비어있는 경우 유효성 검사를 수행하지 않아야합니다. 이 경우 최상위 디렉토리에는 exists 유효성 검증 만 포함되며, 하위 디렉토리에는 정규 표현식이 존재하는 경우 실행될 다른 모든 유효성 검증이 포함됩니다.

이러한 유효성 검사를 별도의 파일로 정의하고 필요한 계층 구조를 만들면 기존 클래스를 열어서 메소드를 추가하지 않아도 나중에 추가 검증을 쉽게 추가 할 수있어 매우 유용합니다.

응용 프로그램이 디렉터리를 동적으로 검색하고 파일 이름을 컬렉션에 저장 한 다음 해당 컬렉션의 요소를 필요에 따라 사용할 수있는 방법이 있습니까? 나는 그렇게 생각하지 않는다. 부하는 어떨까요?

그런 디자인을 달성 할 방법이 있습니까? 또는 나는 그것을 틀리게 생각하고 대신 다른 방법론을 생각해야합니까?

+0

귀하의 목표가 무엇인지 모르겠습니다. 그것은 동적 인 모듈 로딩과 관련이있는 것보다 검증 체인과 비슷하게 들립니다. 유효성 검증 콜렉션의 성공/실패에 관계없이 유효성 검증 * 메소드 *가 존재할 수 있습니다. –

답변

1

귀하의 요청은 매우 행해지지만, 어떠한 언어도 자동으로 귀하를 대신해줍니다. 디렉터리에 들어가기위한 코드를 작성하고 테스트의 존재 여부를 결정한 다음 추가로 드릴 다운해야하는지 여부를 결정해야합니다.

루비가 도움이 될 것입니다. Find 모듈이 표준 라이브러리에 포함되어 있습니다. 이는 그 문서에서있다 : 당신은, 파일 및 포함 된 폴더의 서명을 보일 것이 더 드릴 다운해야하는지 결정하기 위해 해당 코드에서

 
The Find module supports the top-down traversal of a set of file paths. 

For example, to total the size of all files under your home directory, 
ignoring anything in a "dot" directory (e.g. $HOME/.ssh): 

     require 'find' 

     total_size = 0 

     Find.find(ENV["HOME"]) do |path| 
     if FileTest.directory?(path) 
      if File.basename(path)[0] == ?. 
      Find.prune  # Don't look any further into this directory. 
      else 
      next 
      end 
     else 
      total_size += FileTest.size(path) 
     end 
     end 

. 원하는 파일 하나 하나를 찾으려면 require을 사용하십시오.

다른 예제는 사람들이 사용하는 방법을 보여주는 "internets"에서 찾을 수 있습니다. Find. 또한 Dir 모듈은 glob을 사용하는 유사한 기능을 가지고 있습니다. 사용자가 어디서 내려야하는지 알려주고 반환 된 결과를 반복 할 수 있습니다.

+0

디렉토리 및 파일 목록을 찾은 후에는 루프를 통해 확인할 수있는 조건에 따라 파일 이름을 요구할 수 있습니다. – roberocity

+1

@roberocity, 예. 나는 그것을 추가 할 예정 이었지만 회의에 소집되었다. –

+1

+1 회의에 참석하십시오. :) – roberocity

관련 문제