Ruby: Как динамически получать содержимое метода и записывать его в файл? - PullRequest
1 голос
/ 11 июня 2011

Я работаю над преобразованием старого кода в новый проект в новом проекте.Существует более 100 похожих кодов, и мне нужно преобразовать их в немного другой новый формат.По сути, получите конкретный метод из унаследованного приложения, переименуйте его, измените содержимое метода в соответствии с новым форматом и поместите этот метод в класс для нового проекта.Поскольку их более 100, я хочу сделать это программно, вместо того, чтобы вручную копировать, вставлять и изменять.

Есть ли способ получить исходный код метода в виде строки динамически?Это должно быть только для определенного метода, а не всего содержимого класса или файла.

После того, как это будет сделано, я думаю, что я могу просто сделать gsub или, возможно, использовать AST (Абстрактное синтаксическое дерево) для перехода к Ruby2Ruby.

Так что мне нужно больше, чем ответы на вопрос Как получить динамический исходный код методов, а также в каком файле находится этот метод?помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 18 июня 2011

После дальнейшего изучения я использовал live_ast gem, чтобы преобразовать объект метода в Абстрактное синтаксическое дерево и сгенерировать код для метода из этого Абстрактного синтаксического дерева (он использует Ruby2Ruby внизу).На самом деле, live_ast предоставляет удобный метод to_ruby для выполнения обоих шагов.

Работает очень хорошо.

например

require 'live_ast'
require 'live_ast/to_ruby'

SomeClassWithMethod.instance_method(:method_name).to_ruby
0 голосов
/ 11 июня 2011

Вы можете использовать source_location, чтобы найти начало метода, который вы ищете, а затем проанализировать файл с этой точки до конца метода.Вы можете проверить каждую строку файла, начиная с начала метода, увеличивая счетчик, когда вы находите начало блока, и уменьшая его, когда вы достигаете конца блока, пока счетчик не достигнет 0.

...