2010-05-28 2 views
0

Je dois créer plus de 1500 fichiers ruby ​​à partir d'un modèle pour certains tests que je fais avec Selenium.Comment puis-je créer un programme pour créer plusieurs fichiers à partir d'un modèle avec des valeurs différentes à l'intérieur?

Le modèle ressemble à ceci:

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 

J'ai une charge d'URL que je dois insérer - un dans chaque fichier, en remplaçant « $ OLD_URL » et « $ NEW_URL ».

Est-il possible de faire quelque chose comme ça?

x = 0
while (x < 1500)
{
de template.rb ouvert
trouver toutes les instances de CLASS_NAME $ et les remplacer par xxx de classnames.txt
trouver toutes les instances de OLD_URL $ et les remplacer par xxx de listofurls.csv
trouver toutes les instances de NEW_URL $ et les remplacer par xxx de listofurls.csv
Enregistrer le fichier sous ('REDIRECT_' + 'x ++')
x ++
}

Répondre

0

La meilleure façon de le faire est d'utiliser la bibliothèque ERB.

Le code ci-dessous génère deux fichiers selon un modèle prédéfini.

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 

Quand template.erb ressemble:

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

Voici le contenu de aneqdote.txt:

Title anecdote 
======================================== 
There are 10 types of people in the world. 
======================================== 
+0

C'est à peu près ce que je suis après mais je dois créer des fichiers avec trois 1500+ différentes variables dans chaque fichier. De plus, il doit lire les valeurs d'un fichier externe (csv) ... – Jem

+0

Utilisez la bibliothèque 'CSV'. C'est plutôt simple. – Yossi

0

Lire le contenu de template.rb à une chaîne, puis utilisez String#gsub pour modifier le modèle dans la boucle et enregistrer le modèle modifié.

Questions connexes