Je devais utiliser une fixture au format YAML[Wikipedia] (.yml) pour peupler ma db PostgreSql[Wikipedia] mais apparemment c’est pas trop faisable directement avec rake ou autres.
Google ne me satisfaisant pas .. j’ai écrit un script ruby[Wikipedia] (à l’arrache !) qui convertis un fichier YML en SQL qui puisse être utilisé par psql pour importer les données.
Le voici :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #!/usr/bin/env ruby require "yaml" def show_usage puts "Usage: #{$0} YML-FILE-PATH [DESTINATION]" puts end def isNumeric(s) begin Float(s) rescue false # not numeric else true # numeric end end unless ARGV.size == 2 show_usage else begin output = File.open(ARGV.last, 'w') YAML::load(IO.read(ARGV.first)).each do |yml_line| table_name = yml_line[0].sub(/\d+/, "").chop sql_query = "INSERT INTO #{table_name} " sql_query_columns_name = "(" sql_query_columns_value = "(" yml_line[1].each_with_index do |table_column, index| if index > 0 sql_query_columns_name += ", " sql_query_columns_value += ", " end sql_query_columns_name += table_column[0] sql_query_columns_value += "'" unless isNumeric(table_column[1]) sql_query_columns_value += table_column[1].gsub(/.*'.*/, "''") if table_column[1] != "" sql_query_columns_value += "'" unless isNumeric(table_column[1]) end sql_query_columns_name += ")" sql_query_columns_value += ")" output.write sql_query + sql_query_columns_name + " VALUES " + sql_query_columns_value + ";\n" end rescue SystemCallError puts "IO failed: " + $! else puts "Unknow error" end end |
















