2011-06-10 1 views
1

새로운 프로젝트에서 기존 코드를 새로운 코드로 변환하려고합니다. 비슷한 코드가 100 개 이상 있으며 약간 다른 새로운 형식으로 변환해야합니다. 기본적으로 레거시 응용 프로그램에서 특정 메서드를 가져 와서 이름을 변경하고 메서드의 내용을 새 형식에 맞게 수정 한 다음 해당 메서드를 새 프로젝트의 클래스에 넣습니다. 그 중 100 개가 넘기 때문에 수동으로 복사하여 붙여 넣기 및 수정하는 대신 프로그래밍 방식으로 처리하려고합니다.Ruby : 메소드 내용을 동적으로 가져 와서 파일에 쓰는 방법?

메소드의 소스 코드를 동적으로 문자열로 가져 오는 방법이 있습니까? 클래스 나 파일의 전체 내용이 아닌 특정 메서드에만 사용해야합니다.

이 작업이 끝나면 gsub을 수행하거나 AST (Abstract Syntax Tree)를 사용하여 Ruby2Ruby로 전달할 수 있다고 생각합니다.

그래서 How can I get source code of a methods dynamically and also which file is this method locate in? 질문에 대한 답변 이상이 필요합니다.

도움이 될 것입니다.

답변

0

source_location을 사용하면 찾고있는 메소드의 시작 부분을 찾고 메소드의 끝까지 파일을 구문 분석 할 수 있습니다. 메소드의 시작부터 시작하여 블록의 시작을 찾을 때 카운터를 증가시키고 블록 끝까지 도달하면 카운터가 0이 될 때마다 파일의 각 행을 검사 할 수 있습니다.

+0

감사합니다. – tadatoshi

+0

스택 오버플로에 오신 것을 환영합니다! 내 대답을 통해 문제가 해결되면 답변 옆에있는 체크 표시를 클릭하여 문제를 해결하십시오. 그것은 저에게 평판 포인트를 줄 것입니다. –

1

추가 조사에서 live_ast gem을 사용하여 메서드 개체를 추상 구문 트리로 변환하고 해당 추상 구문 트리 (아래 Ruby2Ruby를 사용하고 있음)에서 메서드 코드를 생성합니다. 사실 live_ast는 두 단계를 수행하는 데 편리한 방법을 제공합니다.

매우 잘 작동합니다.

require 'live_ast' 
require 'live_ast/to_ruby' 

SomeClassWithMethod.instance_method(:method_name).to_ruby