Как я могу создать программу для создания нескольких файлов из одного шаблона с разными значениями внутри? - PullRequest
0 голосов
/ 28 мая 2010

Мне нужно создать 1500+ файлов ruby ​​из шаблона для некоторого тестирования, которое я делаю с Selenium.

Шаблон выглядит так:

class $CLASS_NAME

require "spec"

attr_accessor :title

include Spec::Example::ExampleGroupMethods
include Spec::Matchers


def initialize  
  @title = "$OLD_URL -> $NEW_URL"
end


def execute(selenium)
  selenium.open "$OLD_URL"
  sleep 1
  puts 'Opening...'
  sleep 1
  url = selenium.get_location
  puts 'Grabbing location...'
  sleep 1
  puts 'The URL is ' + url 
  puts 'Doing match...'
  sleep 1
  /$NEW_URL/.match(url).should_not be nil

  puts "\n##### Success! #####\n\r"

end # execute

У меня есть множество URL, которые мне нужно вставить - по одному в каждый файл, заменив '$ OLD_URL' и '$ NEW_URL'.

Есть ли что-нибудь подобное?

x = 0
while (x <1500) <br> {
открыть template.rb
найти все экземпляры $ CLASS_NAME и заменить на xxx из classnames.txt
найти все экземпляры $ OLD_URL и заменить на xxx из listofurls.csv
найти все экземпляры $ NEW_URL и заменить на xxx из listofurls.csv
сохранить файл как ('redirect_' + 'x ++')
х ++
}

Ответы [ 2 ]

0 голосов
/ 28 мая 2010

Правильный способ сделать это - использовать библиотеку ERB.

Приведенный ниже код сгенерирует два файла в соответствии с предопределенным шаблоном.

require "erb"

File.open("template.erb") do |io|
  template = ERB.new io.read

  files = {:anecdote => "There are 10 types of people in the world.",
           :story => "Once upon a time..."}

  files.each do |file, contents|
    File.open "#{file}.txt", "w" do |out| 
      out.puts template.result binding
    end
  end
end

Когда template.erb выглядит так:

Title <%= file %>
<%= "=" * 40 %>
<%= contents %>
<%= "=" * 40 %>

Вот содержимое aneqdote.txt:

Title anecdote
========================================
There are 10 types of people in the world.
========================================
0 голосов
/ 28 мая 2010

Считайте содержимое template.rb в строку, затем используйте String # gsub , чтобы отредактировать шаблон внутри цикла и сохранить измененный шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...