如何创建程序以从一个具有不同值的模板创建多个文件?

时间:2010-05-28 07:54:30

标签: ruby url redirect selenium

我需要从模板中创建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
  而(x <1500)
  {
  打开template.rb
  找到$ CLASS_NAME的所有实例,并从classnames.txt中替换xxx   找到$ OLD_URL的所有实例,并用listofurls.csv中的xxx替换   找到$ NEW_URL的所有实例,并从listofurls.csv中替换为xxx   将文件另存为('redirect_'+'x ++')
  X ++
  }

2 个答案:

答案 0 :(得分:0)

template.rb的内容读取为字符串,然后使用String#gsub编辑循环内的模板并保存修改后的模板。

答案 1 :(得分:0)

正确的方法是使用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.
========================================