Преобразовать код Ruby в строку - PullRequest
4 голосов
/ 25 мая 2009

Я выполняю рефакторинг некоторого кода, который не написал, и нашел строку, которая выглядит следующим образом (она намного длиннее, я использовал немного для этого примера):

system("rubyw -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control');")

Чтобы улучшить читаемость, я изменил его до

do_something =
  "rubyw -e \"
    require 'win32ole'
    @autoit=WIN32OLE.new('AutoItX3.Control')"
system do_something

Затем я хотел внести некоторые изменения, но поскольку код, над которым я работаю, находится в строке, я теряю подсветку синтаксиса, сопоставление скобок и все такое хорошее.

Есть ли простой способ написать код вне строки и затем преобразовать его в строку?

Я искал в сети и stackoverflow, но не смог найти ответ.

Для получения дополнительной информации взгляните на оригинальный код по адресу bret / watir (набор Watir :: FileField #, строка 445) и мой ответвление по zeljkofilipin / watir (строки 447-459).

Ответы [ 3 ]

6 голосов
/ 25 мая 2009

Вы можете использовать следующий синтаксис:

do_something = <<SOMETHING
  rubyw -e 
  require 'win32ole'
  @autoit=WIN32OLE.new('AutoItX3.Control')
SOMETHING

По-видимому, это heredoc ! Вы можете найти другой пример здесь (документ) .

Это не значит, что команда не будет волноваться из-за того, что там есть разрывы строк. Однако вы, вероятно, можете запустить его на system do_something.split(/\r\n/).join('') или что-то в этом роде.

5 голосов
/ 25 мая 2009

Ну, вы можете просто поместить код во внешний файл и загрузить его.

В качестве альтернативы, если я правильно помню, файлы Ruby могут содержать DATA разделы:

# Sample ruby file:

puts DATA.readline()

__END__
foo bar

Это должно вывести «foo bar». Вы можете поместить свой код в сегмент данных. Если повезет, ваш редактор по-прежнему обеспечит подсветку синтаксиса для сегмента DATA.

1 голос
/ 25 мая 2009

Ruby2ruby звучит как то, что вы просите.

http://seattlerb.rubyforge.org/ruby2ruby/

...